From 9e914bc8d7fd82ea1d51ac2950ff66092efa780e Mon Sep 17 00:00:00 2001 From: Sadaf Ebrahimi Date: Tue, 3 May 2022 18:25:02 +0000 Subject: Updating antlr 3.5.2 to antlr 3.5.3 Test: treehugger Change-Id: I6c91c2379d82c967dc84bfe825cd0da6e5835a03 --- .github/workflows/main.yml | 24 + .gitignore | 14 +- BUILD.bazel | 29 + METADATA | 10 +- README.txt | 54 +- WORKSPACE.bazel | 29 + antlr-complete/pom.xml | 18 +- antlr3-maven-archetype/pom.xml | 4 +- antlr3-maven-plugin/pom.xml | 125 +- .../java/org/antlr/mojo/antlr3/Antlr3Mojo.java | 73 +- contributors.txt | 2 + gunit-maven-plugin/pom.xml | 103 +- .../org/antlr/mojo/antlr3/GUnitExecuteMojo.java | 46 +- gunit/pom.xml | 2 +- patches/fix_infinite_recursion.diff | 24 - pom.xml | 140 +- .../Antlr3.Runtime.Debug.csproj | 79 - .../Antlr3.Runtime.Debug.csproj.vspscc | 10 - .../BlankDebugEventListener.cs | 165 --- .../Sources/Antlr3.Runtime.Debug/DebugEventHub.cs | 366 ----- .../DebugEventListenerConstants.cs | 46 - .../Antlr3.Runtime.Debug/DebugEventRepeater.cs | 196 --- .../Antlr3.Runtime.Debug/DebugEventSocketProxy.cs | 445 ------ .../Sources/Antlr3.Runtime.Debug/DebugParser.cs | 129 -- .../Antlr3.Runtime.Debug/DebugTokenStream.cs | 212 --- .../Antlr3.Runtime.Debug/DebugTreeAdaptor.cs | 329 ----- .../Antlr3.Runtime.Debug/DebugTreeNodeStream.cs | 216 --- .../Antlr3.Runtime.Debug/DebugTreeParser.cs | 137 -- .../JavaExtensions/ExceptionExtensions.cs | 51 - .../Antlr3.Runtime.Debug/Misc/DoubleKeyMap`3.cs | 86 -- .../Sources/Antlr3.Runtime.Debug/Misc/Stats.cs | 131 -- .../Antlr3.Runtime.Debug/ParseTreeBuilder.cs | 140 -- .../Sources/Antlr3.Runtime.Debug/ParserDebugger.cs | 49 - .../Sources/Antlr3.Runtime.Debug/Profiler.cs | 797 ---------- .../Properties/AssemblyInfo.cs | 70 - .../RemoteDebugEventSocketListener.cs | 744 ---------- .../TraceDebugEventListener.cs | 135 -- .../CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs | 85 -- .../Antlr3.Runtime.JavaExtensions.csproj | 91 -- .../Antlr3.Runtime.JavaExtensions.csproj.vspscc | 10 - .../DictionaryExtensions.cs | 135 -- .../ExceptionExtensions.cs | 100 -- .../Antlr3.Runtime.JavaExtensions/IOExtensions.cs | 90 -- .../Antlr3.Runtime.JavaExtensions/JSystem.cs | 87 -- .../LexerExtensions.cs | 42 - .../ListExtensions.cs | 237 --- .../ObjectExtensions.cs | 123 -- .../Properties/AssemblyInfo.cs | 69 - .../Antlr3.Runtime.JavaExtensions/SetExtensions.cs | 89 -- .../StackExtensions.cs | 84 -- .../StringBuilderExtensions.cs | 75 - .../StringExtensions.cs | 151 -- .../StringTokenizer.cs | 87 -- .../Antlr3.Runtime.JavaExtensions/SubList.cs | 423 ------ .../TreeExtensions.cs | 53 - .../TypeExtensions.cs | 102 -- .../Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj | 187 --- .../Antlr3.Runtime.Test.csproj.vspscc | 10 - .../BuildOptions/DebugGrammar.g3 | 103 -- .../BuildOptions/DebugGrammarLexer.cs | 693 --------- .../BuildOptions/DebugGrammarLexerHelper.cs | 32 - .../BuildOptions/DebugGrammarParser.cs | 1556 ------------------- .../BuildOptions/DebugGrammarParserHelper.cs | 43 - .../BuildOptions/DebugTreeGrammar.cs | 845 ----------- .../BuildOptions/DebugTreeGrammar.g3 | 90 -- .../BuildOptions/DebugTreeGrammarHelper.cs | 119 -- .../BuildOptions/ProfileGrammar.g3 | 103 -- .../BuildOptions/ProfileGrammarLexer.cs | 693 --------- .../BuildOptions/ProfileGrammarLexerHelper.cs | 32 - .../BuildOptions/ProfileGrammarParser.cs | 1560 -------------------- .../BuildOptions/ProfileGrammarParserHelper.cs | 43 - .../BuildOptions/ProfileTreeGrammar.cs | 850 ----------- .../BuildOptions/ProfileTreeGrammar.g3 | 90 -- .../BuildOptions/ProfileTreeGrammarHelper.cs | 119 -- .../Antlr3.Runtime.Test/Composition/Program.cs | 54 - .../Antlr3.Runtime.Test/Composition/Reduce.g3 | 20 - .../Antlr3.Runtime.Test/Composition/Simplify.g3 | 20 - .../Antlr3.Runtime.Test/Composition/VecMath.g3 | 22 - .../Composition/VecMath_Lexer.g3 | 17 - .../Composition/VecMath_Parser.g3 | 35 - .../Antlr3.Runtime.Test/FastSimpleExpression.g3 | 88 -- .../FastSimpleExpressionLexerHelper.cs | 31 - .../FastSimpleExpressionParserHelper.cs | 31 - .../Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 | 113 -- .../Antlr3.Runtime.Test/PreprocessorLexer.g3 | 69 - .../Antlr3.Runtime.Test/PreprocessorLexer.g3.cs | 38 - .../Antlr3.Runtime.Test/PreprocessorTests.cs | 58 - .../Antlr3.Runtime.Test/Properties/AssemblyInfo.cs | 70 - .../SemanticPredicateReduction.g3 | 23 - .../SemanticPredicateReduction.g3.lexer.cs | 6 - .../SemanticPredicateReduction.g3.parser.cs | 6 - .../Antlr3.Runtime.Test/SimpleExpression.g3 | 83 -- .../SimpleExpressionLexerHelper.cs | 31 - .../SimpleExpressionParserHelper.cs | 31 - .../SlimParsing/ITokenSource`1.cs | 41 - .../SlimParsing/ITokenStream`1.cs | 46 - .../Antlr3.Runtime.Test/SlimParsing/SlimLexer.cs | 445 ------ .../SlimParsing/SlimStringStream.cs | 334 ----- .../Antlr3.Runtime.Test/SlimParsing/SlimToken.cs | 160 -- .../SlimParsing/SlimTokenStream.cs | 438 ------ .../SlimParsing/Tree/ITreeAdaptor`1.cs | 314 ---- .../SlimParsing/Tree/ITreeFactory.cs | 54 - .../SlimParsing/Tree/ITreeNodeStream`1.cs | 142 -- .../Antlr3.Runtime.Test/StringTemplateOutput.g3 | 36 - .../StringTemplateOutput.g3.lexer.cs | 6 - .../StringTemplateOutput.g3.parser.cs | 6 - .../Antlr3.Runtime.Test/SynpredTreeParser.g3 | 47 - .../Antlr3.Runtime.Test/SynpredTreeParser.g3.cs | 41 - .../Antlr3.Runtime.Test/TestActionFeatures.g3 | 65 - .../TestActionFeatures.g3.lexer.cs | 6 - .../TestActionFeatures.g3.parser.cs | 6 - .../Antlr3.Runtime.Test/TestDotTreeGenerator.cs | 85 -- .../Antlr3.Runtime.Test/TestExpressionFeatures.g3 | 160 -- .../TestExpressionFeatures.g3.lexer.cs | 38 - .../TestExpressionFeatures.g3.parser.cs | 38 - .../Sources/Antlr3.Runtime.Test/TestFastLexer.cs | 94 -- runtime/CSharp3/Sources/Antlr3.Runtime.sln | 36 - runtime/CSharp3/Sources/Antlr3.Runtime.vssscc | 10 - .../Sources/Antlr3.Runtime/ANTLRFileStream.cs | 88 -- .../Sources/Antlr3.Runtime/ANTLRInputStream.cs | 79 - .../Sources/Antlr3.Runtime/ANTLRReaderStream.cs | 93 -- .../Sources/Antlr3.Runtime/ANTLRStringStream.cs | 327 ---- .../Sources/Antlr3.Runtime/Antlr3.Runtime.csproj | 143 -- .../Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc | 10 - .../Antlr3.Runtime/AstParserRuleReturnScope`2.cs | 60 - .../Sources/Antlr3.Runtime/BaseRecognizer.cs | 1186 --------------- runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs | 380 ----- .../Sources/Antlr3.Runtime/BufferedTokenStream.cs | 425 ------ .../Sources/Antlr3.Runtime/CharStreamConstants.cs | 41 - .../Sources/Antlr3.Runtime/CharStreamState.cs | 56 - .../CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs | 212 --- .../CSharp3/Sources/Antlr3.Runtime/CommonToken.cs | 260 ---- .../Sources/Antlr3.Runtime/CommonTokenStream.cs | 181 --- runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs | 318 ---- .../Antlr3.Runtime/Debug/IDebugEventListener.cs | 387 ----- .../Sources/Antlr3.Runtime/EarlyExitException.cs | 104 -- .../Antlr3.Runtime/FailedPredicateException.cs | 129 -- .../Sources/Antlr3.Runtime/GrammarRuleAttribute.cs | 57 - .../Sources/Antlr3.Runtime/IAstRuleReturnScope.cs | 44 - .../Antlr3.Runtime/IAstRuleReturnScope`1.cs | 44 - .../CSharp3/Sources/Antlr3.Runtime/ICharStream.cs | 72 - .../CSharp3/Sources/Antlr3.Runtime/IIntStream.cs | 161 -- .../Sources/Antlr3.Runtime/IRuleReturnScope.cs | 56 - .../Sources/Antlr3.Runtime/IRuleReturnScope`1.cs | 57 - .../Antlr3.Runtime/ITemplateRuleReturnScope.cs | 42 - .../Antlr3.Runtime/ITemplateRuleReturnScope`1.cs | 42 - runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs | 106 -- .../CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs | 78 - .../CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs | 95 -- .../Antlr3.Runtime/ITokenStreamInformation.cs | 48 - .../Antlr3.Runtime/LegacyCommonTokenStream.cs | 526 ------- runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs | 443 ------ .../Sources/Antlr3.Runtime/Misc/FastQueue.cs | 143 -- .../Antlr3.Runtime/Misc/FunctionDelegates.cs | 40 - .../Sources/Antlr3.Runtime/Misc/ListStack`1.cs | 98 -- .../Sources/Antlr3.Runtime/Misc/LookaheadStream.cs | 271 ---- .../Antlr3.Runtime/MismatchedNotSetException.cs | 81 - .../Antlr3.Runtime/MismatchedRangeException.cs | 122 -- .../Antlr3.Runtime/MismatchedSetException.cs | 108 -- .../Antlr3.Runtime/MismatchedTokenException.cs | 139 -- .../Antlr3.Runtime/MismatchedTreeNodeException.cs | 109 -- .../Antlr3.Runtime/MissingTokenException.cs | 113 -- .../Sources/Antlr3.Runtime/NoViableAltException.cs | 165 --- runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs | 131 -- .../Antlr3.Runtime/ParserRuleReturnScope.cs | 106 -- .../Antlr3.Runtime/Properties/AssemblyInfo.cs | 72 - .../Sources/Antlr3.Runtime/RecognitionException.cs | 474 ------ .../Antlr3.Runtime/RecognizerSharedState.cs | 186 --- .../TemplateParserRuleReturnScope`2.cs | 60 - .../Sources/Antlr3.Runtime/TokenChannels.cs | 52 - .../Sources/Antlr3.Runtime/TokenRewriteStream.cs | 729 --------- .../CSharp3/Sources/Antlr3.Runtime/TokenTypes.cs | 46 - runtime/CSharp3/Sources/Antlr3.Runtime/Tokens.cs | 44 - .../Tree/AntlrRuntime_BaseTreeDebugView.cs | 60 - .../Tree/AstTreeRuleReturnScope`2.cs | 60 - .../Sources/Antlr3.Runtime/Tree/BaseTree.cs | 575 -------- .../Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs | 517 ------- .../Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs | 663 --------- .../Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs | 142 -- .../Sources/Antlr3.Runtime/Tree/CommonTree.cs | 296 ---- .../Antlr3.Runtime/Tree/CommonTreeAdaptor.cs | 112 -- .../Antlr3.Runtime/Tree/CommonTreeNodeStream.cs | 312 ---- .../Antlr3.Runtime/Tree/DotTreeGenerator.cs | 216 --- .../Antlr3.Runtime/Tree/IPositionTrackingStream.cs | 59 - .../CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs | 173 --- .../Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs | 346 ----- .../Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs | 146 -- .../Antlr3.Runtime/Tree/ITreeVisitorAction.cs | 90 -- .../Sources/Antlr3.Runtime/Tree/ParseTree.cs | 167 --- .../Tree/RewriteCardinalityException.cs | 96 -- .../Tree/RewriteEarlyExitException.cs | 72 - .../Tree/RewriteEmptyStreamException.cs | 72 - .../Tree/RewriteRuleElementStream.cs | 253 ---- .../Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs | 81 - .../Tree/RewriteRuleSubtreeStream.cs | 99 -- .../Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs | 86 -- .../Tree/TemplateTreeRuleReturnScope`2.cs | 60 - .../Sources/Antlr3.Runtime/Tree/TreeFilter.cs | 99 -- .../Sources/Antlr3.Runtime/Tree/TreeIterator.cs | 180 --- .../Sources/Antlr3.Runtime/Tree/TreeParser.cs | 209 --- .../Antlr3.Runtime/Tree/TreePatternLexer.cs | 162 -- .../Antlr3.Runtime/Tree/TreePatternParser.cs | 183 --- .../Sources/Antlr3.Runtime/Tree/TreeRewriter.cs | 144 -- .../Antlr3.Runtime/Tree/TreeRuleReturnScope`1.cs | 84 -- .../Sources/Antlr3.Runtime/Tree/TreeVisitor.cs | 83 -- .../Sources/Antlr3.Runtime/Tree/TreeWizard.cs | 736 --------- .../Antlr3.Runtime/UnbufferedTokenStream.cs | 172 --- .../Antlr3.Runtime/UnwantedTokenException.cs | 109 -- runtime/Java/pom.xml | 25 +- runtime/Python/README | 5 + runtime/Python/ez_setup.py | 545 ++++--- runtime/Python3/README | 5 + runtime/Python3/ez_setup.py | 714 ++++----- tool/CHANGES.txt | 8 + tool/pom.xml | 8 +- tool/src/BUILD.bazel | 145 ++ .../org/antlr/codegen/templates/Cpp/Cpp.stg | 2 +- tool/src/test/java/org/antlr/test/TestAutoAST.java | 4 +- .../java/org/antlr/test/TestCharDFAConversion.java | 2 +- .../java/org/antlr/test/TestDFAConversion.java | 2 +- .../test/TestSemanticPredicateEvaluation.java | 2 +- .../org/antlr/test/TestSemanticPredicates.java | 4 +- 222 files changed, 1253 insertions(+), 34796 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 BUILD.bazel create mode 100644 WORKSPACE.bazel delete mode 100644 patches/fix_infinite_recursion.diff delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventListenerConstants.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/DoubleKeyMap`3.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ExceptionExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ListExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ObjectExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SetExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StackExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringBuilderExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringTokenizer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SubList.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TreeExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TypeExtensions.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Program.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Reduce.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Simplify.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Lexer.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Parser.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpression.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionLexerHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionParserHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorTests.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.lexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.parser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpression.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionLexerHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionParserHelper.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenSource`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenStream`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimLexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimStringStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimToken.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeAdaptor`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeFactory.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeNodeStream`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.lexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.parser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.lexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.parser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestDotTreeGenerator.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3 delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.lexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.parser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestFastLexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.sln delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime.vssscc delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/AstParserRuleReturnScope`2.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/BufferedTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/GrammarRuleAttribute.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStreamInformation.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/LegacyCommonTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FunctionDelegates.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Misc/ListStack`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/TemplateParserRuleReturnScope`2.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/TokenChannels.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/TokenTypes.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tokens.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AntlrRuntime_BaseTreeDebugView.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AstTreeRuleReturnScope`2.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/DotTreeGenerator.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/IPositionTrackingStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TemplateTreeRuleReturnScope`2.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope`1.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/UnbufferedTokenStream.cs delete mode 100644 runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs create mode 100644 tool/src/BUILD.bazel diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..42f81dd --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,24 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: 12 + - name: Build with Maven + run: mvn -B -DskipTests package verify --file pom.xml diff --git a/.gitignore b/.gitignore index cceb80d..9b7937c 100644 --- a/.gitignore +++ b/.gitignore @@ -19,12 +19,8 @@ nb-configuration.xml # Python runtime files *.py[co] -# ANTLR C# target build folders -/runtime/CSharp3/Sources/Antlr3.Runtime/bin/ -/runtime/CSharp3/Sources/Antlr3.Runtime/obj/ -/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/bin/ -/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/obj/ -/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/bin/ -/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/obj/ -/runtime/CSharp3/Sources/Antlr3.Runtime.Test/bin/ -/runtime/CSharp3/Sources/Antlr3.Runtime.Test/obj/ +# Bazel +bazel-bin +bazel-out +bazel-antlr3 +bazel-testlogs diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..962a831 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,29 @@ +"""BUILD.bazel file for ANTLR 3.""" + +load("@rules_java//java:defs.bzl", "java_library") + +package(default_visibility = ["//visibility:private"]) + +java_library( + name = "java_runtime", + srcs = glob( + ["runtime/Java/src/main/java/**/*.java"], + # Avoid pulling in org.antlr.stringtemplate. + exclude = ["runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java"], + ), + javacopts = [ + "-Xep:EqualsHashCode:OFF", + ], + visibility = ["//visibility:public"], +) + +alias( + name = "tool", + actual = "//tool/src:tool", + visibility = ["//visibility:public"], +) + +test_suite( + name = "tests", + tests = ["//tool/src:tests"], +) diff --git a/METADATA b/METADATA index f6d8745..d6424bd 100644 --- a/METADATA +++ b/METADATA @@ -7,13 +7,13 @@ third_party { } url { type: ARCHIVE - value: "https://github.com/antlr/antlr3/archive/3.5.2.zip" + value: "https://github.com/antlr/antlr3/archive/3.5.3.zip" } - version: "3.5.2" + version: "3.5.3" license_type: NOTICE last_upgrade_date { - year: 2018 - month: 8 - day: 28 + year: 2022 + month: 5 + day: 3 } } diff --git a/README.txt b/README.txt index c2fa6c4..3e50af0 100644 --- a/README.txt +++ b/README.txt @@ -1,7 +1,7 @@ -ANTLR v3.5 -January 4, 2013 +ANTLR v3.5.3 +April 9, 2022 -Terence Parr, parrt at cs usfca edu +Terence Parr ANTLR project lead and supreme dictator for life University of San Francisco @@ -18,11 +18,11 @@ version of ANTLR for 9 years. You should use v3 in conjunction with ANTLRWorks: - http://www.antlr.org/works/index.html + http://www.antlr3.org/works/ and gUnit (grammar unit testing tool included in distribution): - http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing The book will also help you a great deal (printed May 15, 2007); you can also buy the PDF: @@ -35,17 +35,17 @@ can also buy the PDF: See the getting started document: - http://www.antlr.org/wiki/display/ANTLR3/FAQ+-+Getting+Started + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/FAQ+-+Getting+Started You also have the examples plus the source to guide you. See the wiki FAQ: - http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+FAQ + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/ANTLR+v3+FAQ and general doc root: - http://www.antlr.org/wiki/display/ANTLR3/ANTLR+3+Wiki+Home + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/ANTLR+3+Wiki+Home Please help add/update FAQ entries. @@ -90,7 +90,7 @@ that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing actions. Target language list: -http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets +http://theantlrguy.atlassian.net/wiki/display/ANTLR3/Code+Generation+Targets ---------------------------------------------------------------------- @@ -98,11 +98,11 @@ How is ANTLR v3 different than ANTLR v2? See "What is the difference between ANTLR v2 and v3?" - http://www.antlr.org/wiki/pages/viewpage.action?pageId=719 + http://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=2687279 See migration guide: - http://www.antlr.org/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3 + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3 ---------------------------------------------------------------------- @@ -110,33 +110,33 @@ How do I install this damn thing? You will have grabbed either of these: - http://antlr.org/download/antlr-3.5-complete-no-st3.jar - http://antlr.org/download/antlr-3.5-complete.jar + http://www.antlr3.org/download/antlr-3.5.3-complete-no-st3.jar + http://www.antlr3.org/download/antlr-3.5.3-complete.jar It has all of the jars you need combined into one. Then you need to -add antlr-3.5-complete.jar to your CLASSPATH or add to arg list; e.g., on unix: +add antlr-3.5.3-complete.jar to your CLASSPATH or add to arg list; e.g., on unix: -$ java -cp "/usr/local/lib/antlr-3.5-complete.jar:$CLASSPATH" org.antlr.Tool Test.g +$ java -cp "/usr/local/lib/antlr-3.5.3-complete.jar:$CLASSPATH" org.antlr.Tool Test.g -Source + java binaries: Just untar antlr-3.5.tar.gz and you'll get: +Source + java binaries: Just untar antlr-3.5.3.tar.gz and you'll get: -antlr-3.5/BUILD.txt -antlr-3.5/antlr3-maven-plugin -antlr-3.5/antlrjar.xml -antlr-3.5/antlrsources.xml -antlr-3.5/gunit -antlr-3.5/gunit-maven-plugin -antlr-3.5/pom.xml +antlr-3.5.3/BUILD.txt +antlr-3.5.3/antlr3-maven-plugin +antlr-3.5.3/antlrjar.xml +antlr-3.5.3/antlrsources.xml +antlr-3.5.3/gunit +antlr-3.5.3/gunit-maven-plugin +antlr-3.5.3/pom.xml antlr-3.5/runtime -antlr-3.5/tool -antlr-3.5/lib +antlr-3.5.3/tool +antlr-3.5.3/lib Please see the FAQ - http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+FAQ + http://theantlrguy.atlassian.net/wiki/display/ANTLR3/ANTLR+v3+FAQ ------------------------- How can I contribute to ANTLR v3? -http://www.antlr.org/wiki/pages/viewpage.action?pageId=33947666 +http://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=2687297 diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel new file mode 100644 index 0000000..71ed40e --- /dev/null +++ b/WORKSPACE.bazel @@ -0,0 +1,29 @@ +workspace(name = "antlr3") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_jar") + +# This needs to be identical to the one used inhttps://github.com/antlr/stringtemplate4/blob/master/WORKSPACE.bazel. +http_jar( + name = "antlr3_bootstrap", + sha256 = "46531814ba9739cdf20c6c1789c252d3d95b68932813d79fb8bbfdf8d5840417", + url = "http://www.antlr3.org/download/antlr-3.5.2-complete-no-st3.jar", +) + +http_jar( + name = "junit", + sha256 = "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3", + url = "https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar", +) + +http_jar( + name = "hamcrest_core", + sha256 = "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", + url = "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", +) + +http_archive( + name = "stringtemplate4", + sha256 = "a91974e67013c1e68ef80794151dd66f04fc034cd3a9cf68af78867cd3067520", + strip_prefix = "stringtemplate4-139f34243e516fc9d2cc4db8eeaa825014d631cc", + url = "https://github.com/antlr/stringtemplate4/archive/139f34243e516fc9d2cc4db8eeaa825014d631cc.zip", +) diff --git a/antlr-complete/pom.xml b/antlr-complete/pom.xml index aad3c68..2bd9d83 100644 --- a/antlr-complete/pom.xml +++ b/antlr-complete/pom.xml @@ -17,7 +17,7 @@ org.antlr antlr-master - 3.5.2 + 3.5.3 http://antlr.org/ @@ -57,9 +57,7 @@ - - org.apache.maven.plugins maven-shade-plugin @@ -123,12 +121,22 @@ - + org.apache.maven.plugins maven-javadoc-plugin + 3.3.1 - true + 1.8 + false + + + deploy + + javadoc + + + diff --git a/antlr3-maven-archetype/pom.xml b/antlr3-maven-archetype/pom.xml index c4b084b..6ca8564 100644 --- a/antlr3-maven-archetype/pom.xml +++ b/antlr3-maven-archetype/pom.xml @@ -19,7 +19,7 @@ org.antlr antlr-master - 3.5.2 + 3.5.3 @@ -35,13 +35,11 @@ - maven-archetype-plugin 2.2 true - diff --git a/antlr3-maven-plugin/pom.xml b/antlr3-maven-plugin/pom.xml index 6fc1770..803b075 100644 --- a/antlr3-maven-plugin/pom.xml +++ b/antlr3-maven-plugin/pom.xml @@ -34,53 +34,27 @@ - - 4.0.0 - - - org.antlr - - - - antlr3-maven-plugin - maven-plugin - org.antlr antlr-master - 3.5.2 + 3.5.3 - + antlr3-maven-plugin + maven-plugin ANTLR 3 Maven plugin - - 2.0 - + + + 3.8.4 + UTF-8 + http://antlr.org - - UTF-8 - - - This is the brand new, re-written from scratch plugin for ANTLR v3. Previous valiant efforts all suffered from being unable to modify the ANTLR Tool @@ -106,11 +80,9 @@ to death. Hence even this pom has more comments than funcitonal elements, in case I get run over by a bus or fall off a cliff while skiing. Jim Idle - March 2009 - - Jim Idle http://www.temporal-wave.com @@ -159,25 +131,78 @@ Jim Idle - March 2009 + org.apache.maven maven-plugin-api - 2.0 - compile + 3.8.4 + provided + + + org.codehaus.plexus + plexus-compiler-api + 2.9.0 + + + org.sonatype.plexus + plexus-build-api + 0.0.7 + + + + org.antlr + antlr + 3.5.3 + + + + junit + junit + 4.13.2 + test + + + org.apache.maven.plugin-tools + maven-plugin-annotations + 3.6.2 + provided + + + io.takari.maven.plugins + takari-plugin-testing + 3.0.0 + test - org.apache.maven - maven-project - 2.0 + maven-core + 3.8.4 + provided + + + org.apache.maven + maven-compat + 3.8.4 + test - org.codehaus.plexus - plexus-compiler-api - 2.0 + plexus-utils + 3.4.1 + provided + + + org.slf4j + slf4j-api + 1.7.32 + + + org.slf4j + slf4j-simple + 1.7.32 - - 4.0.0 - - - 2.0 - - - org.antlr - maven-gunit-plugin - maven-plugin - - ANTLR 3 gUnit Maven plugin - A Maven plugin for incorporating gUnit testing of grammars - http://antlr.org - - org.antlr antlr-master - 3.5.2 + 3.5.3 + maven-gunit-plugin + maven-plugin + ANTLR 3 gUnit Maven plugin + A Maven plugin for incorporating gUnit testing of grammars + http://antlr.org + 3.8.4 UTF-8 @@ -75,25 +61,68 @@ + org.apache.maven maven-plugin-api - 2.0 - compile + 3.8.4 + provided + + + org.codehaus.plexus + plexus-compiler-api + 2.9.0 + + + org.sonatype.plexus + plexus-build-api + 0.0.7 + + + + + junit + junit + 4.13.2 + test + + + org.apache.maven.plugin-tools + maven-plugin-annotations + 3.6.2 + provided + + + io.takari.maven.plugins + takari-plugin-testing + 3.0.0 + test - org.apache.maven - maven-project - 2.0 + maven-core + 3.8.4 + provided + + + org.apache.maven + maven-compat + 3.8.4 + test - org.codehaus.plexus - plexus-compiler-api - 2.0 + plexus-utils + 3.4.1 + provided + + + org.slf4j + slf4j-api + 1.7.32 - org.antlr gunit @@ -120,12 +145,20 @@ 1.1 test - + + org.apache.maven.plugins + maven-javadoc-plugin + 3.3.1 + + 1.8 + false + + org.apache.maven.plugins diff --git a/gunit-maven-plugin/src/main/java/org/antlr/mojo/antlr3/GUnitExecuteMojo.java b/gunit-maven-plugin/src/main/java/org/antlr/mojo/antlr3/GUnitExecuteMojo.java index a7e2317..4f2ba87 100644 --- a/gunit-maven-plugin/src/main/java/org/antlr/mojo/antlr3/GUnitExecuteMojo.java +++ b/gunit-maven-plugin/src/main/java/org/antlr/mojo/antlr3/GUnitExecuteMojo.java @@ -36,18 +36,22 @@ import org.antlr.gunit.GrammarInfo; import org.antlr.gunit.gUnitExecutor; import org.antlr.gunit.AbstractTest; import org.antlr.gunit.Interp; +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; /** * Takes gUnit scripts and directly performs testing. - * - * @goal gunit - * - * @phase test - * @requiresDependencyResolution test - * @requiresProject true - * * @author Steve Ebersole */ +@Mojo( + name = "gunit", + defaultPhase = LifecyclePhase.TEST, + requiresDependencyResolution = ResolutionScope.TEST, + requiresProject = true) public class GUnitExecuteMojo extends AbstractMojo { public static final String ANTLR_GROUP_ID = "org.antlr"; public static final String ANTLR_ARTIFACT_NAME = "antlr"; @@ -55,60 +59,48 @@ public class GUnitExecuteMojo extends AbstractMojo { /** * INTERNAL : The Maven Project to which we are attached - * - * @parameter expression="${project}" - * @required */ + @Parameter(defaultValue = "${project}", required = true) private MavenProject project; /** * INTERNAL : The artifacts associated to the dependencies defined as part * of our configuration within the project to which we are being attached. - * - * @parameter expression="${plugin.artifacts}" - * @required - * @readonly */ + @Parameter(defaultValue = "${plugin.artifacts}", required = true, readonly = true) private List pluginArtifacts; /** * Specifies the directory containing the gUnit testing files. - * - * @parameter expression="${basedir}/src/test/gunit" - * @required */ + @Parameter(defaultValue = "${basedir}/src/test/gunit", required = true) private File sourceDirectory; /** * A set of patterns for matching files from the sourceDirectory that * should be included as gUnit source files. - * - * @parameter */ + @Parameter private Set includes; /** * A set of exclude patterns. - * - * @parameter */ + @Parameter private Set excludes; /** * Specifies directory to which gUnit reports should get written. - * - * @parameter expression="${basedir}/target/gunit-report" - * @required */ - private File reportDirectory; + @Parameter(defaultValue = "${basedir}/target/gunit-report", required = true) + private File reportDirectory; /** * Should gUnit functionality be completely by-passed? *

* By default we skip gUnit tests if the user requested that all testing be skipped using 'maven.test.skip'

- * - * @parameter expression="${maven.test.skip}" */ + @Parameter(defaultValue = "${maven.test.skip}") private boolean skip; public Set getIncludePatterns() { diff --git a/gunit/pom.xml b/gunit/pom.xml index 8a8da9e..b842d0f 100644 --- a/gunit/pom.xml +++ b/gunit/pom.xml @@ -17,7 +17,7 @@ org.antlr antlr-master - 3.5.2 + 3.5.3 http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing diff --git a/patches/fix_infinite_recursion.diff b/patches/fix_infinite_recursion.diff deleted file mode 100644 index 06d8815..0000000 --- a/patches/fix_infinite_recursion.diff +++ /dev/null @@ -1,24 +0,0 @@ -From 12f69f5bb0e10f608b1899bab67b1813e0fdaf14 Mon Sep 17 00:00:00 2001 -From: Andreas Gampe -Date: Tue, 20 Feb 2018 09:51:42 -0800 -Subject: [PATCH] Antlr: Fix infinite recursion - -Bug: 73645371 -Test: m javac-check RUN_ERROR_PRONE=true -Change-Id: Ie8702ad59aab1af7e23038fbffd5bd34902f1f7c ---- - -Index: antlr/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java -=================================================================== ---- antlr.orig/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java -+++ antlr/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java -@@ -227,7 +227,7 @@ public class DebugTreeAdaptor implements - - @Override - public Object deleteChild(Object t, int i) { -- return deleteChild(t, i); -+ return adaptor.deleteChild(t, i); - } - - @Override - diff --git a/pom.xml b/pom.xml index bcec4b5..577aaca 100644 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,15 @@ 9 + + 3.8 + + 4.0.0 org.antlr antlr-master pom - 3.5.2 + 3.5.3 ANTLR 3 Master build control POM Master build POM for ANTLR 3 http://antlr.org @@ -52,12 +56,13 @@ --> UTF-8 - ${env.JAVA5_HOME} - ${env.JAVA6_HOME} - ${java5.home}/lib/rt.jar - ${java6.home}/lib/rt.jar - ${bootclasspath.java5} - ${bootclasspath.java6} + 1.8 + 4.13 + 4.3.1 + 2.7.7 + 3.2.1 + 3.3.1 + 3.8.4 @@ -84,7 +89,7 @@ https://github.com/antlr/antlr3/tree/master scm:git:git://github.com/antlr/antlr3.git scm:git:git@github.com:antlr/antlr3.git - 3.5.2 + HEAD
@@ -220,50 +236,18 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 + 3.8.1 - src - true - true - - -Xlint - -Xlint:-serial - + ${jdk} + ${jdk} - - - - default-compile - - 1.5 - 1.5 - - - - default-testCompile - - 1.6 - 1.6 - - - - - org.apache.maven.plugins - maven-release-plugin - - 2.5 - - -Psonatype-oss-release ${release.arguments} - - org.apache.maven.plugins maven-surefire-plugin - - 2.17 + 2.12.4 @@ -284,16 +268,6 @@ 2.2.1 - - org.apache.maven.plugins - maven-javadoc-plugin - - 2.9.1 - - true - - - org.apache.maven.plugins maven-gpg-plugin @@ -301,24 +275,36 @@ 1.5 - - -
- - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - org.apache.maven.plugins - maven-jxr-plugin - 2.3 + maven-enforcer-plugin + 3.0.0-M2 + + + enforce-maven + + enforce + + + + + ${required-maven-version} + + + + + - + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + + diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj deleted file mode 100644 index 9c52017..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B} - Library - Properties - Antlr.Runtime.Debug - Antlr3.Runtime.Debug - v2.0 - 512 - true - ..\..\..\..\..\..\..\..\..\keys\antlr\Key.snk - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Antlr3.Runtime.Debug.xml - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\Antlr3.Runtime.Debug.xml - - - - - - - - - - - - - - - - - - - - Key.snk - - - - - - - - - - - - {8FDC0A87-9005-4D5A-AB75-E55CEB575559} - Antlr3.Runtime - - - - - \ No newline at end of file diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs deleted file mode 100644 index 61d54ff..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs +++ /dev/null @@ -1,165 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - /** - * A blank listener that does nothing; useful for real classes so - * they don't have to have lots of blank methods and are less - * sensitive to updates to debug interface. - * - */ - public class BlankDebugEventListener : IDebugEventListener - { - public int RuleLevel - { - get; - protected set; - } - - public virtual void Initialize() - { - } - - public virtual void EnterRule( string grammarFileName, string ruleName ) - { - if ( RuleLevel == 0 ) - Commence(); - RuleLevel++; - } - public virtual void ExitRule( string grammarFileName, string ruleName ) - { - RuleLevel--; - if ( RuleLevel == 0 ) - Terminate(); - } - public virtual void EnterAlt( int alt ) - { - } - public virtual void EnterSubRule( int decisionNumber ) - { - } - public virtual void ExitSubRule( int decisionNumber ) - { - } - public virtual void EnterDecision(int decisionNumber, bool couldBacktrack) - { - } - public virtual void ExitDecision( int decisionNumber ) - { - } - public virtual void Location( int line, int pos ) - { - } - public virtual void ConsumeToken( IToken token ) - { - } - public virtual void ConsumeHiddenToken( IToken token ) - { - } - public virtual void LT( int i, IToken t ) - { - } - public virtual void Mark( int i ) - { - } - public virtual void Rewind( int i ) - { - } - public virtual void Rewind() - { - } - public virtual void BeginBacktrack( int level ) - { - } - public virtual void EndBacktrack( int level, bool successful ) - { - } - public virtual void RecognitionException( RecognitionException e ) - { - } - public virtual void BeginResync() - { - } - public virtual void EndResync() - { - } - public virtual void SemanticPredicate( bool result, string predicate ) - { - } - public virtual void Commence() - { - } - public virtual void Terminate() - { - } - - #region Tree parsing stuff - - public virtual void ConsumeNode( object t ) - { - } - public virtual void LT( int i, object t ) - { - } - - #endregion - - - #region AST Stuff - - public virtual void NilNode( object t ) - { - } - public virtual void ErrorNode( object t ) - { - } - public virtual void CreateNode( object t ) - { - } - public virtual void CreateNode( object node, IToken token ) - { - } - public virtual void BecomeRoot( object newRoot, object oldRoot ) - { - } - public virtual void AddChild( object root, object child ) - { - } - public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) - { - } - - #endregion - } -} - diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs deleted file mode 100644 index bea6799..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs +++ /dev/null @@ -1,366 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using System.Collections.Generic; - - /** - * Broadcast debug events to multiple listeners. Lets you debug and still - * use the event mechanism to build parse trees etc... Not thread-safe. - * Don't add events in one thread while parser fires events in another. - * - * - * - */ - public class DebugEventHub : IDebugEventListener - { - List _listeners = new List(); - - public DebugEventHub( params IDebugEventListener[] listeners ) - { - _listeners = new List( listeners ); - } - - public virtual void Initialize() - { - } - - /** - * Add another listener to broadcast events too. Not thread-safe. - * Don't add events in one thread while parser fires events in another. - * - */ - public virtual void AddListener( IDebugEventListener listener ) - { - _listeners.Add( listener ); - } - - /* To avoid a mess like this: - public void enterRule(final String ruleName) { - broadcast(new Code(){ - public void exec(DebugEventListener listener) {listener.enterRule(ruleName);}} - ); - } - I am dup'ing the for-loop in each. Where are Java closures!? blech! - */ - - public virtual void EnterRule( string grammarFileName, string ruleName ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EnterRule( grammarFileName, ruleName ); - } - } - - public virtual void ExitRule( string grammarFileName, string ruleName ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ExitRule( grammarFileName, ruleName ); - } - } - - public virtual void EnterAlt( int alt ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EnterAlt( alt ); - } - } - - public virtual void EnterSubRule( int decisionNumber ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EnterSubRule( decisionNumber ); - } - } - - public virtual void ExitSubRule( int decisionNumber ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ExitSubRule( decisionNumber ); - } - } - - public virtual void EnterDecision(int decisionNumber, bool couldBacktrack) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EnterDecision( decisionNumber, couldBacktrack ); - } - } - - public virtual void ExitDecision( int decisionNumber ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ExitDecision( decisionNumber ); - } - } - - public virtual void Location( int line, int pos ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Location( line, pos ); - } - } - - public virtual void ConsumeToken( IToken token ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ConsumeToken( token ); - } - } - - public virtual void ConsumeHiddenToken( IToken token ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ConsumeHiddenToken( token ); - } - } - - public virtual void LT( int index, IToken t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.LT( index, t ); - } - } - - public virtual void Mark( int index ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Mark( index ); - } - } - - public virtual void Rewind( int index ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Rewind( index ); - } - } - - public virtual void Rewind() - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Rewind(); - } - } - - public virtual void BeginBacktrack( int level ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.BeginBacktrack( level ); - } - } - - public virtual void EndBacktrack( int level, bool successful ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EndBacktrack( level, successful ); - } - } - - public virtual void RecognitionException( RecognitionException e ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.RecognitionException( e ); - } - } - - public virtual void BeginResync() - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.BeginResync(); - } - } - - public virtual void EndResync() - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.EndResync(); - } - } - - public virtual void SemanticPredicate( bool result, string predicate ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.SemanticPredicate( result, predicate ); - } - } - - public virtual void Commence() - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Commence(); - } - } - - public virtual void Terminate() - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.Terminate(); - } - } - - - #region Tree parsing stuff - - public virtual void ConsumeNode( object t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ConsumeNode( t ); - } - } - - public virtual void LT( int index, object t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.LT( index, t ); - } - } - - #endregion - - - #region AST Stuff - - public virtual void NilNode( object t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.NilNode( t ); - } - } - - public virtual void ErrorNode( object t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.ErrorNode( t ); - } - } - - public virtual void CreateNode( object t ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.CreateNode( t ); - } - } - - public virtual void CreateNode( object node, IToken token ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.CreateNode( node, token ); - } - } - - public virtual void BecomeRoot( object newRoot, object oldRoot ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.BecomeRoot( newRoot, oldRoot ); - } - } - - public virtual void AddChild( object root, object child ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.AddChild( root, child ); - } - } - - public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) - { - for ( int i = 0; i < _listeners.Count; i++ ) - { - IDebugEventListener listener = _listeners[i]; - listener.SetTokenBoundaries( t, tokenStartIndex, tokenStopIndex ); - } - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventListenerConstants.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventListenerConstants.cs deleted file mode 100644 index 9032492..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventListenerConstants.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - - public static class DebugEventListenerConstants - { - /** Moved to version 2 for v3.1: added grammar name to enter/exit Rule */ - public const string ProtocolVersion = "2"; - - /** Serialized version of true */ - public const int True = 1; - public const int False = 0; - } - -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs deleted file mode 100644 index 181b649..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs +++ /dev/null @@ -1,196 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - - /** - * A simple event repeater (proxy) that delegates all functionality to the - * listener sent into the ctor. Useful if you want to listen in on a few - * debug events w/o interrupting the debugger. Just subclass the repeater - * and override the methods you want to listen in on. Remember to call - * the method in this class so the event will continue on to the original - * recipient. - * - * - * - */ - public class DebugEventRepeater : IDebugEventListener - { - IDebugEventListener _listener; - - public DebugEventRepeater( IDebugEventListener listener ) - { - _listener = listener; - } - - public virtual void Initialize() - { - } - - public virtual void EnterRule( string grammarFileName, string ruleName ) - { - _listener.EnterRule( grammarFileName, ruleName ); - } - public virtual void ExitRule( string grammarFileName, string ruleName ) - { - _listener.ExitRule( grammarFileName, ruleName ); - } - public virtual void EnterAlt( int alt ) - { - _listener.EnterAlt( alt ); - } - public virtual void EnterSubRule( int decisionNumber ) - { - _listener.EnterSubRule( decisionNumber ); - } - public virtual void ExitSubRule( int decisionNumber ) - { - _listener.ExitSubRule( decisionNumber ); - } - public virtual void EnterDecision(int decisionNumber, bool couldBacktrack) - { - _listener.EnterDecision( decisionNumber, couldBacktrack ); - } - public virtual void ExitDecision( int decisionNumber ) - { - _listener.ExitDecision( decisionNumber ); - } - public virtual void Location( int line, int pos ) - { - _listener.Location( line, pos ); - } - public virtual void ConsumeToken( IToken token ) - { - _listener.ConsumeToken( token ); - } - public virtual void ConsumeHiddenToken( IToken token ) - { - _listener.ConsumeHiddenToken( token ); - } - public virtual void LT( int i, IToken t ) - { - _listener.LT( i, t ); - } - public virtual void Mark( int i ) - { - _listener.Mark( i ); - } - public virtual void Rewind( int i ) - { - _listener.Rewind( i ); - } - public virtual void Rewind() - { - _listener.Rewind(); - } - public virtual void BeginBacktrack( int level ) - { - _listener.BeginBacktrack( level ); - } - public virtual void EndBacktrack( int level, bool successful ) - { - _listener.EndBacktrack( level, successful ); - } - public virtual void RecognitionException( RecognitionException e ) - { - _listener.RecognitionException( e ); - } - public virtual void BeginResync() - { - _listener.BeginResync(); - } - public virtual void EndResync() - { - _listener.EndResync(); - } - public virtual void SemanticPredicate( bool result, string predicate ) - { - _listener.SemanticPredicate( result, predicate ); - } - public virtual void Commence() - { - _listener.Commence(); - } - public virtual void Terminate() - { - _listener.Terminate(); - } - - #region Tree parsing stuff - - public virtual void ConsumeNode( object t ) - { - _listener.ConsumeNode( t ); - } - public virtual void LT( int i, object t ) - { - _listener.LT( i, t ); - } - - #endregion - - - #region AST Stuff - - public virtual void NilNode( object t ) - { - _listener.NilNode( t ); - } - public virtual void ErrorNode( object t ) - { - _listener.ErrorNode( t ); - } - public virtual void CreateNode( object t ) - { - _listener.CreateNode( t ); - } - public virtual void CreateNode( object node, IToken token ) - { - _listener.CreateNode( node, token ); - } - public virtual void BecomeRoot( object newRoot, object oldRoot ) - { - _listener.BecomeRoot( newRoot, oldRoot ); - } - public virtual void AddChild( object root, object child ) - { - _listener.AddChild( root, child ); - } - public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) - { - _listener.SetTokenBoundaries( t, tokenStartIndex, tokenStopIndex ); - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs deleted file mode 100644 index 64b0fd2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs +++ /dev/null @@ -1,445 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using System; - using Antlr.Runtime.JavaExtensions; - - using IOException = System.IO.IOException; - using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; - using Socket = System.Net.Sockets.Socket; - using StringBuilder = System.Text.StringBuilder; - using TcpListener = System.Net.Sockets.TcpListener; - - /** - * A proxy debug event listener that forwards events over a socket to - * a debugger (or any other listener) using a simple text-based protocol; - * one event per line. ANTLRWorks listens on server socket with a - * RemoteDebugEventSocketListener instance. These two objects must therefore - * be kept in sync. New events must be handled on both sides of socket. - * - */ - public class DebugEventSocketProxy : BlankDebugEventListener - { - public const int DefaultDebuggerPort = 49100; - protected int port = DefaultDebuggerPort; - protected TcpListener serverSocket; - protected Socket socket; - protected string grammarFileName; - //protected PrintWriter @out; - //protected BufferedReader @in; - - /** Who am i debugging? */ - protected BaseRecognizer recognizer; - - /** - * Almost certainly the recognizer will have adaptor set, but - * we don't know how to cast it (Parser or TreeParser) to get - * the adaptor field. Must be set with a constructor. :( - * - */ - protected ITreeAdaptor adaptor; - - public DebugEventSocketProxy( BaseRecognizer recognizer, ITreeAdaptor adaptor ) : - this( recognizer, DefaultDebuggerPort, adaptor ) - { - } - - public DebugEventSocketProxy( BaseRecognizer recognizer, int port, ITreeAdaptor adaptor ) - { - this.grammarFileName = recognizer.GrammarFileName; - this.adaptor = adaptor; - this.port = port; - } - - #region Properties - public virtual ITreeAdaptor TreeAdaptor - { - get - { - return adaptor; - } - set - { - adaptor = value; - } - } - #endregion - - public virtual void Handshake() - { - if ( serverSocket == null ) - { - System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry( "localhost" ); - System.Net.IPAddress ipAddress = hostInfo.AddressList[0]; - serverSocket = new TcpListener( ipAddress, port ); - socket = serverSocket.AcceptSocket(); - socket.NoDelay = true; - - System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); - socket.Send( encoding.GetBytes( "ANTLR " + DebugEventListenerConstants.ProtocolVersion + "\n" ) ); - socket.Send( encoding.GetBytes( "grammar \"" + grammarFileName + "\n" ) ); - Ack(); - - //serverSocket = new ServerSocket( port ); - //socket = serverSocket.accept(); - //socket.setTcpNoDelay( true ); - //OutputStream os = socket.getOutputStream(); - //OutputStreamWriter osw = new OutputStreamWriter( os, "UTF8" ); - //@out = new PrintWriter( new BufferedWriter( osw ) ); - //InputStream @is = socket.getInputStream(); - //InputStreamReader isr = new InputStreamReader( @is, "UTF8" ); - //@in = new BufferedReader( isr ); - //@out.println( "ANTLR " + DebugEventListenerConstants.PROTOCOL_VERSION ); - //@out.println( "grammar \"" + grammarFileName ); - //@out.flush(); - //ack(); - } - } - - public override void Commence() - { - // don't bother sending event; listener will trigger upon connection - } - - public override void Terminate() - { - Transmit( "terminate" ); - //@out.close(); - try - { - socket.Close(); - } - catch ( IOException ioe ) - { - ExceptionExtensions.PrintStackTrace( ioe, Console.Error ); - } - } - - protected virtual void Ack() - { - try - { - throw new NotImplementedException(); - //@in.readLine(); - } - catch ( IOException ioe ) - { - ExceptionExtensions.PrintStackTrace( ioe, Console.Error ); - } - } - - protected virtual void Transmit( string @event ) - { - socket.Send( new System.Text.UTF8Encoding().GetBytes( @event + "\n" ) ); - //@out.println( @event ); - //@out.flush(); - Ack(); - } - - public override void EnterRule( string grammarFileName, string ruleName ) - { - Transmit( "enterRule\t" + grammarFileName + "\t" + ruleName ); - } - - public override void EnterAlt( int alt ) - { - Transmit( "enterAlt\t" + alt ); - } - - public override void ExitRule( string grammarFileName, string ruleName ) - { - Transmit( "exitRule\t" + grammarFileName + "\t" + ruleName ); - } - - public override void EnterSubRule( int decisionNumber ) - { - Transmit( "enterSubRule\t" + decisionNumber ); - } - - public override void ExitSubRule( int decisionNumber ) - { - Transmit( "exitSubRule\t" + decisionNumber ); - } - - public override void EnterDecision(int decisionNumber, bool couldBacktrack) - { - Transmit( "enterDecision\t" + decisionNumber ); - } - - public override void ExitDecision( int decisionNumber ) - { - Transmit( "exitDecision\t" + decisionNumber ); - } - - public override void ConsumeToken( IToken t ) - { - string buf = SerializeToken( t ); - Transmit( "consumeToken\t" + buf ); - } - - public override void ConsumeHiddenToken( IToken t ) - { - string buf = SerializeToken( t ); - Transmit( "consumeHiddenToken\t" + buf ); - } - - public override void LT( int i, IToken t ) - { - if ( t != null ) - Transmit( "LT\t" + i + "\t" + SerializeToken( t ) ); - } - - public override void Mark( int i ) - { - Transmit( "mark\t" + i ); - } - - public override void Rewind( int i ) - { - Transmit( "rewind\t" + i ); - } - - public override void Rewind() - { - Transmit( "rewind" ); - } - - public override void BeginBacktrack( int level ) - { - Transmit( "beginBacktrack\t" + level ); - } - - public override void EndBacktrack( int level, bool successful ) - { - Transmit( "endBacktrack\t" + level + "\t" + ( successful ? DebugEventListenerConstants.True : DebugEventListenerConstants.False ) ); - } - - public override void Location( int line, int pos ) - { - Transmit( "location\t" + line + "\t" + pos ); - } - - public override void RecognitionException( RecognitionException e ) - { - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "exception\t" ); - buf.Append( e.GetType().Name ); - // dump only the data common to all exceptions for now - buf.Append( "\t" ); - buf.Append( e.Index ); - buf.Append( "\t" ); - buf.Append( e.Line ); - buf.Append( "\t" ); - buf.Append( e.CharPositionInLine ); - Transmit( buf.ToString() ); - } - - public override void BeginResync() - { - Transmit( "beginResync" ); - } - - public override void EndResync() - { - Transmit( "endResync" ); - } - - public override void SemanticPredicate( bool result, string predicate ) - { - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "semanticPredicate\t" ); - buf.Append( result ); - SerializeText( buf, predicate ); - Transmit( buf.ToString() ); - } - - #region AST Parsing Events - - public override void ConsumeNode( object t ) - { - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "consumeNode" ); - SerializeNode( buf, t ); - Transmit( buf.ToString() ); - } - - public override void LT( int i, object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "LN\t" ); // lookahead node; distinguish from LT in protocol - buf.Append( i ); - SerializeNode( buf, t ); - Transmit( buf.ToString() ); - } - - protected virtual void SerializeNode( StringBuilder buf, object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - buf.Append( "\t" ); - buf.Append( ID ); - buf.Append( "\t" ); - buf.Append( type ); - IToken token = adaptor.GetToken( t ); - int line = -1; - int pos = -1; - if ( token != null ) - { - line = token.Line; - pos = token.CharPositionInLine; - } - buf.Append( "\t" ); - buf.Append( line ); - buf.Append( "\t" ); - buf.Append( pos ); - int tokenIndex = adaptor.GetTokenStartIndex( t ); - buf.Append( "\t" ); - buf.Append( tokenIndex ); - SerializeText( buf, text ); - } - - #endregion - - - #region AST Events - - public override void NilNode( object t ) - { - int ID = adaptor.GetUniqueID( t ); - Transmit( "nilNode\t" + ID ); - } - - public override void ErrorNode( object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = t.ToString(); - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "errorNode\t" ); - buf.Append( ID ); - buf.Append( "\t" ); - buf.Append( TokenTypes.Invalid ); - SerializeText( buf, text ); - Transmit( buf.ToString() ); - } - - public override void CreateNode( object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( "createNodeFromTokenElements\t" ); - buf.Append( ID ); - buf.Append( "\t" ); - buf.Append( type ); - SerializeText( buf, text ); - Transmit( buf.ToString() ); - } - - public override void CreateNode( object node, IToken token ) - { - int ID = adaptor.GetUniqueID( node ); - int tokenIndex = token.TokenIndex; - Transmit( "createNode\t" + ID + "\t" + tokenIndex ); - } - - public override void BecomeRoot( object newRoot, object oldRoot ) - { - int newRootID = adaptor.GetUniqueID( newRoot ); - int oldRootID = adaptor.GetUniqueID( oldRoot ); - Transmit( "becomeRoot\t" + newRootID + "\t" + oldRootID ); - } - - public override void AddChild( object root, object child ) - { - int rootID = adaptor.GetUniqueID( root ); - int childID = adaptor.GetUniqueID( child ); - Transmit( "addChild\t" + rootID + "\t" + childID ); - } - - public override void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) - { - int ID = adaptor.GetUniqueID( t ); - Transmit( "setTokenBoundaries\t" + ID + "\t" + tokenStartIndex + "\t" + tokenStopIndex ); - } - - #endregion - - - #region Support - - protected virtual string SerializeToken( IToken t ) - { - StringBuilder buf = new StringBuilder( 50 ); - buf.Append( t.TokenIndex ); - buf.Append( '\t' ); - buf.Append( t.Type ); - buf.Append( '\t' ); - buf.Append( t.Channel ); - buf.Append( '\t' ); - buf.Append( t.Line ); - buf.Append( '\t' ); - buf.Append( t.CharPositionInLine ); - SerializeText( buf, t.Text ); - return buf.ToString(); - } - - protected virtual void SerializeText( StringBuilder buf, string text ) - { - buf.Append( "\t\"" ); - if ( text == null ) - { - text = ""; - } - // escape \n and \r all text for token appears to exist on one line - // this escape is slow but easy to understand - text = EscapeNewlines( text ); - buf.Append( text ); - } - - protected virtual string EscapeNewlines( string txt ) - { - txt = txt.Replace( "%", "%25" ); // escape all escape char ;) - txt = txt.Replace( "\n", "%0A" ); // escape \n - txt = txt.Replace( "\r", "%0D" ); // escape \r - return txt; - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs deleted file mode 100644 index 18d8db8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs +++ /dev/null @@ -1,129 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Antlr.Runtime.JavaExtensions; - - using Console = System.Console; - using IOException = System.IO.IOException; - - public class DebugParser : Parser - { - /** Who to notify when events in the parser occur. */ - public IDebugEventListener dbg = null; - - /** - * Used to differentiate between fixed lookahead and cyclic DFA decisions - * while profiling. - * - */ - public bool isCyclicDecision = false; - - /** - * Create a normal parser except wrap the token stream in a debug - * proxy that fires consume events. - * - */ - public DebugParser( ITokenStream input, IDebugEventListener dbg, RecognizerSharedState state ) - : base( input is DebugTokenStream ? input : new DebugTokenStream( input, dbg ), state ) - { - SetDebugListener(dbg); - } - - public DebugParser( ITokenStream input, RecognizerSharedState state ) - : base( input is DebugTokenStream ? input : new DebugTokenStream( input, null ), state ) - { - } - - public DebugParser( ITokenStream input, IDebugEventListener dbg ) - : this( input is DebugTokenStream ? input : new DebugTokenStream( input, dbg ), dbg, null ) - { - } - - public override IDebugEventListener DebugListener - { - get - { - return dbg; - } - } - - /** - * Provide a new debug event listener for this parser. Notify the - * input stream too that it should send events to this listener. - * - */ - public virtual void SetDebugListener(IDebugEventListener value) - { - DebugTokenStream debugTokenStream = input as DebugTokenStream; - if (debugTokenStream != null) - debugTokenStream.DebugListener = value; - - dbg = value; - } - - public virtual void ReportError( IOException e ) - { - Console.Error.WriteLine( e ); - ExceptionExtensions.PrintStackTrace( e, Console.Error ); - } - - public override void BeginResync() - { - dbg.BeginResync(); - base.BeginResync(); - } - - public override void EndResync() - { - dbg.EndResync(); - base.EndResync(); - } - - public virtual void BeginBacktrack( int level ) - { - dbg.BeginBacktrack( level ); - } - - public virtual void EndBacktrack( int level, bool successful ) - { - dbg.EndBacktrack( level, successful ); - } - - public override void ReportError( RecognitionException e ) - { - base.ReportError(e); - dbg.RecognitionException( e ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs deleted file mode 100644 index ef61376..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs +++ /dev/null @@ -1,212 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - - public class DebugTokenStream : ITokenStream - { - protected IDebugEventListener dbg; - public ITokenStream input; - protected bool initialStreamState = true; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - public DebugTokenStream( ITokenStream input, IDebugEventListener dbg ) - { - this.input = input; - DebugListener = dbg; - // force TokenStream to get at least first valid token - // so we know if there are any hidden tokens first in the stream - input.LT( 1 ); - } - - #region Properties - - public virtual int Index - { - get - { - return input.Index; - } - } - - public virtual int Range - { - get - { - return input.Range; - } - } - - public virtual IDebugEventListener DebugListener - { - get - { - return dbg; - } - set - { - dbg = value; - } - } - - #endregion - - public virtual void Consume() - { - if ( initialStreamState ) - { - ConsumeInitialHiddenTokens(); - } - int a = input.Index; - IToken t = input.LT( 1 ); - input.Consume(); - int b = input.Index; - dbg.ConsumeToken( t ); - if ( b > a + 1 ) - { - // then we consumed more than one token; must be off channel tokens - for ( int i = a + 1; i < b; i++ ) - { - dbg.ConsumeHiddenToken( input.Get( i ) ); - } - } - } - - /** Consume all initial off-channel tokens */ - protected virtual void ConsumeInitialHiddenTokens() - { - int firstOnChannelTokenIndex = input.Index; - for ( int i = 0; i < firstOnChannelTokenIndex; i++ ) - { - dbg.ConsumeHiddenToken( input.Get( i ) ); - } - initialStreamState = false; - } - - public virtual IToken LT( int i ) - { - if ( initialStreamState ) - { - ConsumeInitialHiddenTokens(); - } - dbg.LT( i, input.LT( i ) ); - return input.LT( i ); - } - - public virtual int LA( int i ) - { - if ( initialStreamState ) - { - ConsumeInitialHiddenTokens(); - } - dbg.LT( i, input.LT( i ) ); - return input.LA( i ); - } - - public virtual IToken Get( int i ) - { - return input.Get( i ); - } - - public virtual int Mark() - { - lastMarker = input.Mark(); - dbg.Mark( lastMarker ); - return lastMarker; - } - - public virtual void Rewind( int marker ) - { - dbg.Rewind( marker ); - input.Rewind( marker ); - } - - public virtual void Rewind() - { - dbg.Rewind(); - input.Rewind( lastMarker ); - } - - public virtual void Release( int marker ) - { - } - - public virtual void Seek( int index ) - { - // TODO: implement seek in dbg interface - // db.seek(index); - input.Seek( index ); - } - - public virtual int Count - { - get - { - return input.Count; - } - } - - public virtual ITokenSource TokenSource - { - get - { - return input.TokenSource; - } - } - - public virtual string SourceName - { - get - { - return TokenSource.SourceName; - } - } - - public override string ToString() - { - return input.ToString(); - } - - public virtual string ToString( int start, int stop ) - { - return input.ToString( start, stop ); - } - - public virtual string ToString( IToken start, IToken stop ) - { - return input.ToString( start, stop ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs deleted file mode 100644 index 1399b53..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs +++ /dev/null @@ -1,329 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; - - /** - * A TreeAdaptor proxy that fires debugging events to a DebugEventListener - * delegate and uses the TreeAdaptor delegate to do the actual work. All - * AST events are triggered by this adaptor; no code gen changes are needed - * in generated rules. Debugging events are triggered *after* invoking - * tree adaptor routines. - * - * - * - * Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" - * cannot be tracked as they might not use the adaptor to create foo, bar. - * The debug listener has to deal with tree node IDs for which it did - * not see a createNode event. A single <unknown> node is sufficient even - * if it represents a whole tree. - * - */ - public class DebugTreeAdaptor : ITreeAdaptor - { - protected IDebugEventListener dbg; - protected ITreeAdaptor adaptor; - - public DebugTreeAdaptor( IDebugEventListener dbg, ITreeAdaptor adaptor ) - { - this.dbg = dbg; - this.adaptor = adaptor; - } - - public virtual object Create( IToken payload ) - { - if ( payload.TokenIndex < 0 ) - { - // could be token conjured up during error recovery - return Create( payload.Type, payload.Text ); - } - object node = adaptor.Create( payload ); - dbg.CreateNode( node, payload ); - return node; - } - - public virtual object ErrorNode( ITokenStream input, IToken start, IToken stop, - RecognitionException e ) - { - object node = adaptor.ErrorNode( input, start, stop, e ); - if ( node != null ) - { - dbg.ErrorNode( node ); - } - return node; - } - - public virtual object DupTree( object tree ) - { - object t = adaptor.DupTree( tree ); - // walk the tree and emit create and add child events - // to simulate what dupTree has done. dupTree does not call this debug - // adapter so I must simulate. - SimulateTreeConstruction( t ); - return t; - } - - /** ^(A B C): emit create A, create B, add child, ... */ - protected virtual void SimulateTreeConstruction( object t ) - { - dbg.CreateNode( t ); - int n = adaptor.GetChildCount( t ); - for ( int i = 0; i < n; i++ ) - { - object child = adaptor.GetChild( t, i ); - SimulateTreeConstruction( child ); - dbg.AddChild( t, child ); - } - } - - public virtual object DupNode( object treeNode ) - { - object d = adaptor.DupNode( treeNode ); - dbg.CreateNode( d ); - return d; - } - - public object DupNode(int type, object treeNode) - { - object d = adaptor.DupNode(type, treeNode); - dbg.CreateNode(d); - return d; - } - - public object DupNode(object treeNode, string text) - { - object d = adaptor.DupNode(treeNode, text); - dbg.CreateNode(d); - return d; - } - - public object DupNode(int type, object treeNode, string text) - { - object d = adaptor.DupNode(type, treeNode, text); - dbg.CreateNode(d); - return d; - } - - public virtual object Nil() - { - object node = adaptor.Nil(); - dbg.NilNode( node ); - return node; - } - - public virtual bool IsNil( object tree ) - { - return adaptor.IsNil( tree ); - } - - public virtual void AddChild( object t, object child ) - { - if ( t == null || child == null ) - { - return; - } - adaptor.AddChild( t, child ); - dbg.AddChild( t, child ); - } - - public virtual object BecomeRoot( object newRoot, object oldRoot ) - { - object n = adaptor.BecomeRoot( newRoot, oldRoot ); - dbg.BecomeRoot( newRoot, oldRoot ); - return n; - } - - public virtual object RulePostProcessing( object root ) - { - return adaptor.RulePostProcessing( root ); - } - - public virtual void AddChild( object t, IToken child ) - { - object n = this.Create( child ); - this.AddChild( t, n ); - } - - public virtual object BecomeRoot( IToken newRoot, object oldRoot ) - { - object n = this.Create( newRoot ); - adaptor.BecomeRoot( n, oldRoot ); - dbg.BecomeRoot( newRoot, oldRoot ); - return n; - } - - public virtual object Create( int tokenType, IToken fromToken ) - { - object node = adaptor.Create( tokenType, fromToken ); - dbg.CreateNode( node ); - return node; - } - - public virtual object Create( int tokenType, IToken fromToken, string text ) - { - object node = adaptor.Create( tokenType, fromToken, text ); - dbg.CreateNode( node ); - return node; - } - - public virtual object Create( int tokenType, string text ) - { - object node = adaptor.Create( tokenType, text ); - dbg.CreateNode( node ); - return node; - } - - public object Create(IToken fromToken, string text) - { - object node = adaptor.Create(fromToken, text); - dbg.CreateNode(node); - return node; - } - - public virtual int GetType( object t ) - { - return adaptor.GetType( t ); - } - - public virtual void SetType( object t, int type ) - { - adaptor.SetType( t, type ); - } - - public virtual string GetText( object t ) - { - return adaptor.GetText( t ); - } - - public virtual void SetText( object t, string text ) - { - adaptor.SetText( t, text ); - } - - public virtual IToken GetToken( object t ) - { - return adaptor.GetToken( t ); - } - - public virtual void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ) - { - adaptor.SetTokenBoundaries( t, startToken, stopToken ); - if ( t != null && startToken != null && stopToken != null ) - { - dbg.SetTokenBoundaries( - t, startToken.TokenIndex, - stopToken.TokenIndex ); - } - } - - public virtual int GetTokenStartIndex( object t ) - { - return adaptor.GetTokenStartIndex( t ); - } - - public virtual int GetTokenStopIndex( object t ) - { - return adaptor.GetTokenStopIndex( t ); - } - - public virtual object GetChild( object t, int i ) - { - return adaptor.GetChild( t, i ); - } - - public virtual void SetChild( object t, int i, object child ) - { - adaptor.SetChild( t, i, child ); - } - - public virtual object DeleteChild( object t, int i ) - { - return DeleteChild( t, i ); - } - - public virtual int GetChildCount( object t ) - { - return adaptor.GetChildCount( t ); - } - - public virtual int GetUniqueID( object node ) - { - return adaptor.GetUniqueID( node ); - } - - public virtual object GetParent( object t ) - { - return adaptor.GetParent( t ); - } - - public virtual int GetChildIndex( object t ) - { - return adaptor.GetChildIndex( t ); - } - - public virtual void SetParent( object t, object parent ) - { - adaptor.SetParent( t, parent ); - } - - public virtual void SetChildIndex( object t, int index ) - { - adaptor.SetChildIndex( t, index ); - } - - public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) - { - adaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); - } - - #region support - - public virtual IDebugEventListener GetDebugListener() - { - return dbg; - } - - public virtual void SetDebugListener( IDebugEventListener dbg ) - { - this.dbg = dbg; - } - - public virtual ITreeAdaptor GetTreeAdaptor() - { - return adaptor; - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs deleted file mode 100644 index 4af8c5b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs +++ /dev/null @@ -1,216 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Obsolete = System.ObsoleteAttribute; - using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; - using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; - - /** - * Debug any tree node stream. The constructor accepts the stream - * and a debug listener. As node stream calls come in, debug events - * are triggered. - * - */ - public class DebugTreeNodeStream : ITreeNodeStream - { - protected IDebugEventListener dbg; - protected ITreeAdaptor adaptor; - protected ITreeNodeStream input; - protected bool initialStreamState = true; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - public DebugTreeNodeStream( ITreeNodeStream input, - IDebugEventListener dbg ) - { - this.input = input; - this.adaptor = input.TreeAdaptor; - this.input.UniqueNavigationNodes = true; - DebugListener = dbg; - } - - #region Properties - public virtual IDebugEventListener DebugListener - { - get - { - return dbg; - } - set - { - dbg = value; - } - } - public virtual int Index - { - get - { - return input.Index; - } - } - public virtual ITokenStream TokenStream - { - get - { - return input.TokenStream; - } - } - public virtual ITreeAdaptor TreeAdaptor - { - get - { - return adaptor; - } - } - public virtual object TreeSource - { - get - { - return input; - } - } - /** - * It is normally this object that instructs the node stream to - * create unique nav nodes, but to satisfy interface, we have to - * define it. It might be better to ignore the parameter but - * there might be a use for it later, so I'll leave. - * - */ - public bool UniqueNavigationNodes - { - get - { - return input.UniqueNavigationNodes; - } - set - { - input.UniqueNavigationNodes = value; - } - } - - #endregion - - public virtual void Consume() - { - object node = input.LT( 1 ); - input.Consume(); - dbg.ConsumeNode( node ); - } - - public virtual object this[int i] - { - get - { - return input[i]; - } - } - - public virtual object LT( int i ) - { - object node = input.LT( i ); - int ID = adaptor.GetUniqueID( node ); - string text = adaptor.GetText( node ); - int type = adaptor.GetType( node ); - dbg.LT( i, node ); - return node; - } - - public virtual int LA( int i ) - { - object node = input.LT( i ); - int ID = adaptor.GetUniqueID( node ); - string text = adaptor.GetText( node ); - int type = adaptor.GetType( node ); - dbg.LT( i, node ); - return type; - } - - public virtual int Mark() - { - lastMarker = input.Mark(); - dbg.Mark( lastMarker ); - return lastMarker; - } - - public virtual void Rewind( int marker ) - { - dbg.Rewind( marker ); - input.Rewind( marker ); - } - - public virtual void Rewind() - { - dbg.Rewind(); - input.Rewind( lastMarker ); - } - - public virtual void Release( int marker ) - { - } - - public virtual void Seek( int index ) - { - // TODO: implement seek in dbg interface - // db.seek(index); - input.Seek( index ); - } - - public virtual int Count - { - get - { - return input.Count; - } - } - - public virtual string SourceName - { - get - { - return TokenStream.SourceName; - } - } - - public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) - { - input.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); - } - - public virtual string ToString( object start, object stop ) - { - return input.ToString( start, stop ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs deleted file mode 100644 index 6461387..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs +++ /dev/null @@ -1,137 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Antlr.Runtime.JavaExtensions; - - using Console = System.Console; - using IOException = System.IO.IOException; - using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; - using TreeParser = Antlr.Runtime.Tree.TreeParser; - - public class DebugTreeParser : TreeParser - { - /** Who to notify when events in the parser occur. */ - public IDebugEventListener dbg = null; - - /** - * Used to differentiate between fixed lookahead and cyclic DFA decisions - * while profiling. - * - */ - public bool isCyclicDecision = false; - - /** - * Create a normal parser except wrap the token stream in a debug - * proxy that fires consume events. - * - */ - public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state ) - : base( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), state ) - { - SetDebugListener(dbg); - } - - public DebugTreeParser( ITreeNodeStream input, RecognizerSharedState state ) - : base( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, null ), state ) - { - } - - public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg ) - : this( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), dbg, null ) - { - } - - public override IDebugEventListener DebugListener - { - get - { - return dbg; - } - } - - /** - * Provide a new debug event listener for this parser. Notify the - * input stream too that it should send events to this listener. - * - */ - public virtual void SetDebugListener(IDebugEventListener value) - { - if (input is DebugTreeNodeStream) - ((DebugTreeNodeStream)input).DebugListener = value; - - this.dbg = value; - } - - public virtual void ReportError( IOException e ) - { - Console.Error.WriteLine( e ); - ExceptionExtensions.PrintStackTrace( e, Console.Error ); - } - - public override void ReportError( RecognitionException e ) - { - dbg.RecognitionException( e ); - } - - protected override object GetMissingSymbol( IIntStream input, - RecognitionException e, - int expectedTokenType, - BitSet follow ) - { - object o = base.GetMissingSymbol( input, e, expectedTokenType, follow ); - dbg.ConsumeNode( o ); - return o; - } - - public override void BeginResync() - { - dbg.BeginResync(); - } - - public override void EndResync() - { - dbg.EndResync(); - } - - public virtual void BeginBacktrack( int level ) - { - dbg.BeginBacktrack( level ); - } - - public virtual void EndBacktrack( int level, bool successful ) - { - dbg.EndBacktrack( level, successful ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs deleted file mode 100644 index 0776cfe..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.JavaExtensions -{ - using Exception = System.Exception; - using TextWriter = System.IO.TextWriter; - - internal static class ExceptionExtensions - { - public static void PrintStackTrace( Exception e, TextWriter writer ) - { - writer.WriteLine( e.ToString() ); - string trace = e.StackTrace ?? string.Empty; - foreach ( string line in trace.Split( '\n', '\r' ) ) - { - if ( !string.IsNullOrEmpty( line ) ) - writer.WriteLine( " " + line ); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/DoubleKeyMap`3.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/DoubleKeyMap`3.cs deleted file mode 100644 index 16cfc26..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/DoubleKeyMap`3.cs +++ /dev/null @@ -1,86 +0,0 @@ -namespace Antlr.Runtime.Debug.Misc -{ - using System.Collections.Generic; - - public class DoubleKeyMap - { - internal IDictionary> data = new Dictionary>(); - - public virtual TValue Put(TKey1 k1, TKey2 k2, TValue v) - { - IDictionary data2; - data.TryGetValue(k1, out data2); - TValue prev = default(TValue); - if (data2 == null) - { - data2 = new Dictionary(); - data[k1]=data2; - } - else - { - data2.TryGetValue(k2, out prev); - } - data2[k2]= v; - return prev; - } - - public virtual TValue Get(TKey1 k1, TKey2 k2) - { - IDictionary data2; - data.TryGetValue(k1, out data2); - if (data2 == null) - return default(TValue); - - TValue value; - data2.TryGetValue(k2, out value); - return value; - } - - public virtual IDictionary Get(TKey1 k1) - { - IDictionary value; - data.TryGetValue(k1, out value); - return value; - } - - /** Get all values associated with primary key */ - public virtual ICollection Values(TKey1 k1) - { - IDictionary data2; - data.TryGetValue(k1, out data2); - if (data2 == null) - return null; - - return data2.Values; - } - - /** get all primary keys */ - public virtual ICollection KeySet() - { - return data.Keys; - } - - /** get all secondary keys associated with a primary key */ - public virtual ICollection KeySet(TKey1 k1) - { - IDictionary data2; - data.TryGetValue(k1, out data2); - if (data2 == null) - return null; - - return data2.Keys; - } - - public virtual ICollection Values() - { - Dictionary s = new Dictionary(); - foreach (IDictionary k2 in data.Values) - { - foreach (TValue v in k2.Values) - s[v] = true; - } - - return s.Keys; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs deleted file mode 100644 index 6a465f7..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs +++ /dev/null @@ -1,131 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Misc -{ - using System.Collections.Generic; - - using Directory = System.IO.Directory; - using Environment = System.Environment; - using File = System.IO.File; - using Math = System.Math; - using Path = System.IO.Path; - - /** Stats routines needed by profiler etc... - * - * - * note that these routines return 0.0 if no values exist in the X[] - * which is not "correct", but it is useful so I don't generate NaN - * in my output - * - */ - public class Stats - { - public const string ANTLRWORKS_DIR = "antlrworks"; - - /** Compute the sample (unbiased estimator) standard deviation following: - * - * - * Computing Deviations: Standard Accuracy - * Tony F. Chan and John Gregg Lewis - * Stanford University - * Communications of ACM September 1979 of Volume 22 the ACM Number 9 - * - * The "two-pass" method from the paper; supposed to have better - * numerical properties than the textbook summation/sqrt. To me - * this looks like the textbook method, but I ain't no numerical - * methods guy. - * - */ - public static double Stddev( int[] X ) - { - int m = X.Length; - if ( m <= 1 ) - { - return 0; - } - double xbar = Average(X); - double s2 = 0.0; - for ( int i = 0; i < m; i++ ) - { - s2 += ( X[i] - xbar ) * ( X[i] - xbar ); - } - s2 = s2 / ( m - 1 ); - return Math.Sqrt( s2 ); - } - public static double Stddev( List X ) - { - int m = X.Count; - if ( m <= 1 ) - { - return 0; - } - double xbar = Average(X); - double s2 = 0.0; - for ( int i = 0; i < m; i++ ) - { - s2 += ( X[i] - xbar ) * ( X[i] - xbar ); - } - s2 = s2 / ( m - 1 ); - return Math.Sqrt( s2 ); - } - - /** Compute the sample mean */ - public static double Average(ICollection X) - { - if (X.Count == 0) - return 0.0; - - double sum = 0.0; - foreach (int i in X) - sum += i; - - return sum / X.Count; - } - - public static void WriteReport( string filename, string data ) - { - string absoluteFilename = GetAbsoluteFileName( filename ); - - Directory.CreateDirectory( Path.GetDirectoryName( absoluteFilename ) ); - File.AppendAllText( absoluteFilename, data ); - } - - public static string GetAbsoluteFileName( string filename ) - { - string personalFolder = Environment.GetFolderPath( Environment.SpecialFolder.Personal ); - return personalFolder + Path.DirectorySeparatorChar + - ANTLRWORKS_DIR + Path.DirectorySeparatorChar + - filename; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs deleted file mode 100644 index cb5f678..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs +++ /dev/null @@ -1,140 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using System.Collections.Generic; - using ParseTree = Antlr.Runtime.Tree.ParseTree; - - /** - * This parser listener tracks rule entry/exit and token matches - * to build a simple parse tree using ParseTree nodes. - * - */ - public class ParseTreeBuilder : BlankDebugEventListener - { - public const string EPSILON_PAYLOAD = ""; - - Stack callStack = new Stack(); - List hiddenTokens = new List(); - int backtracking = 0; - - public ParseTreeBuilder( string grammarName ) - { - ParseTree root = Create( "" ); - callStack.Push( root ); - } - - public virtual ParseTree Tree - { - get - { - ParseTree[] stack = callStack.ToArray(); - return stack[stack.Length - 1]; - } - } - - /** - * What kind of node to create. You might want to override - * so I factored out creation here. - * - */ - public virtual ParseTree Create( object payload ) - { - return new ParseTree( payload ); - } - - public virtual ParseTree EpsilonNode() - { - return Create( EPSILON_PAYLOAD ); - } - - /** Backtracking or cyclic DFA, don't want to add nodes to tree */ - public override void EnterDecision( int d, bool couldBacktrack ) - { - backtracking++; - } - public override void ExitDecision( int i ) - { - backtracking--; - } - - public override void EnterRule( string filename, string ruleName ) - { - if ( backtracking > 0 ) - return; - ParseTree parentRuleNode = callStack.Peek(); - ParseTree ruleNode = Create( ruleName ); - parentRuleNode.AddChild( ruleNode ); - callStack.Push( ruleNode ); - } - - public override void ExitRule( string filename, string ruleName ) - { - if ( backtracking > 0 ) - return; - ParseTree ruleNode = callStack.Peek(); - if ( ruleNode.ChildCount == 0 ) - { - ruleNode.AddChild( EpsilonNode() ); - } - callStack.Pop(); - } - - public override void ConsumeToken( IToken token ) - { - if ( backtracking > 0 ) - return; - ParseTree ruleNode = callStack.Peek(); - ParseTree elementNode = Create( token ); - elementNode.hiddenTokens = this.hiddenTokens; - this.hiddenTokens = new List(); - ruleNode.AddChild( elementNode ); - } - - public override void ConsumeHiddenToken( IToken token ) - { - if ( backtracking > 0 ) - return; - hiddenTokens.Add( token ); - } - - public override void RecognitionException( RecognitionException e ) - { - if ( backtracking > 0 ) - return; - ParseTree ruleNode = callStack.Peek(); - ParseTree errorNode = Create( e ); - ruleNode.AddChild( errorNode ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs deleted file mode 100644 index 0b60f2b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs +++ /dev/null @@ -1,49 +0,0 @@ -namespace Antlr.Runtime.Debug -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - - using IOException = System.IO.IOException; - using Antlr.Runtime.Tree; - - public class ParserDebugger - { - IDebugEventListener dbg; - - public ParserDebugger( Parser parser ) - : this( parser, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT ) - { - } - public ParserDebugger( Parser parser, int port ) - { - DebugEventSocketProxy proxy = new DebugEventSocketProxy( parser, port, null ); - DebugListener = proxy; - parser.TokenStream = new DebugTokenStream( parser.TokenStream, proxy ); - try - { - proxy.handshake(); - } - catch ( IOException e ) - { - reportError( ioe ); - } - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - proxy.TreeAdaptor = adap; - } - public ParserDebugger( Parser parser, IDebugEventListener dbg ) - { - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - } - - protected virtual bool EvalPredicate( bool result, string predicate ) - { - dbg.SemanticPredicate( result, predicate ); - return result; - } - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs deleted file mode 100644 index 54caac8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs +++ /dev/null @@ -1,797 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using System.Collections.Generic; - using System.Collections.ObjectModel; - using Antlr.Runtime.Debug.Misc; - - using Array = System.Array; - using CLSCompliantAttribute = System.CLSCompliantAttribute; - using Console = System.Console; - using DateTime = System.DateTime; - using Environment = System.Environment; - using Math = System.Math; - using StringBuilder = System.Text.StringBuilder; - - /** Using the debug event interface, track what is happening in the parser - * and record statistics about the runtime. - */ - public class Profiler : BlankDebugEventListener - { - public static readonly string DataSeparator = "\t"; - public static readonly string NewLine = Environment.NewLine; - - internal static bool dump = false; - - /** Because I may change the stats, I need to track that for later - * computations to be consistent. - */ - public static readonly string Version = "3"; - public static readonly string RuntimeStatsFilename = "runtime.stats"; - - /** Ack, should not store parser; can't do remote stuff. Well, we pass - * input stream around too so I guess it's ok. - */ - public DebugParser parser = null; - - // working variables - - [CLSCompliant(false)] - protected int ruleLevel = 0; - //protected int decisionLevel = 0; - protected IToken lastRealTokenTouchedInDecision; - protected Dictionary uniqueRules = new Dictionary(); - protected Stack currentGrammarFileName = new Stack(); - protected Stack currentRuleName = new Stack(); - protected Stack currentLine = new Stack(); - protected Stack currentPos = new Stack(); - - // Vector - //protected Vector decisions = new Vector(200); // need setSize - protected DoubleKeyMap decisions = new DoubleKeyMap(); - - // Record a DecisionData for each decision we hit while parsing - private List decisionEvents = new List(); - protected Stack decisionStack = new Stack(); - - protected int backtrackDepth; - - ProfileStats stats = new ProfileStats(); - - public Profiler() - { - } - - public Profiler(DebugParser parser) - { - this.parser = parser; - } - - public override void EnterRule(string grammarFileName, string ruleName) - { - //System.out.println("enterRule "+grammarFileName+":"+ruleName); - ruleLevel++; - stats.numRuleInvocations++; - uniqueRules.Add(grammarFileName + ":" + ruleName, true); - stats.maxRuleInvocationDepth = Math.Max(stats.maxRuleInvocationDepth, ruleLevel); - currentGrammarFileName.Push(grammarFileName); - currentRuleName.Push(ruleName); - } - - public override void ExitRule(string grammarFileName, string ruleName) - { - ruleLevel--; - currentGrammarFileName.Pop(); - currentRuleName.Pop(); - } - - /** Track memoization; this is not part of standard debug interface - * but is triggered by profiling. Code gen inserts an override - * for this method in the recognizer, which triggers this method. - * Called from alreadyParsedRule(). - */ - public virtual void ExamineRuleMemoization(IIntStream input, - int ruleIndex, - int stopIndex, // index or MEMO_RULE_UNKNOWN... - string ruleName) - { - if (dump) - Console.WriteLine("examine memo " + ruleName + " at " + input.Index + ": " + stopIndex); - if (stopIndex == BaseRecognizer.MemoRuleUnknown) - { - //System.out.println("rule "+ruleIndex+" missed @ "+input.index()); - stats.numMemoizationCacheMisses++; - stats.numGuessingRuleInvocations++; // we'll have to enter - CurrentDecision().numMemoizationCacheMisses++; - } - else - { - // regardless of rule success/failure, if in cache, we have a cache hit - //System.out.println("rule "+ruleIndex+" hit @ "+input.index()); - stats.numMemoizationCacheHits++; - CurrentDecision().numMemoizationCacheHits++; - } - } - - /** Warning: doesn't track success/failure, just unique recording event */ - public virtual void Memoize(IIntStream input, - int ruleIndex, - int ruleStartIndex, - string ruleName) - { - // count how many entries go into table - if (dump) - Console.WriteLine("memoize " + ruleName); - stats.numMemoizationCacheEntries++; - } - - public override void Location(int line, int pos) - { - currentLine.Push(line); - currentPos.Push(pos); - } - - public override void EnterDecision(int decisionNumber, bool couldBacktrack) - { - lastRealTokenTouchedInDecision = null; - stats.numDecisionEvents++; - int startingLookaheadIndex = parser.TokenStream.Index; - ITokenStream input = parser.TokenStream; - if (dump) - { - Console.WriteLine("enterDecision canBacktrack=" + couldBacktrack + " " + decisionNumber + - " backtrack depth " + backtrackDepth + - " @ " + input.Get(input.Index) + - " rule " + LocationDescription()); - } - string g = currentGrammarFileName.Peek(); - DecisionDescriptor descriptor = decisions.Get(g, decisionNumber); - if (descriptor == null) - { - descriptor = new DecisionDescriptor(); - decisions.Put(g, decisionNumber, descriptor); - descriptor.decision = decisionNumber; - descriptor.fileName = currentGrammarFileName.Peek(); - descriptor.ruleName = currentRuleName.Peek(); - descriptor.line = currentLine.Peek(); - descriptor.pos = currentPos.Peek(); - descriptor.couldBacktrack = couldBacktrack; - } - descriptor.n++; - - DecisionEvent d = new DecisionEvent(); - decisionStack.Push(d); - d.decision = descriptor; - d.startTime = DateTime.Now; - d.startIndex = startingLookaheadIndex; - } - - public override void ExitDecision(int decisionNumber) - { - DecisionEvent d = decisionStack.Pop(); - d.stopTime = DateTime.Now; - - int lastTokenIndex = lastRealTokenTouchedInDecision.TokenIndex; - int numHidden = GetNumberOfHiddenTokens(d.startIndex, lastTokenIndex); - int depth = lastTokenIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 - d.k = depth; - d.decision.maxk = Math.Max(d.decision.maxk, depth); - - if (dump) - { - Console.WriteLine("exitDecision " + decisionNumber + " in " + d.decision.ruleName + - " lookahead " + d.k + " max token " + lastRealTokenTouchedInDecision); - } - - decisionEvents.Add(d); // done with decision; track all - } - - public override void ConsumeToken(IToken token) - { - if (dump) - Console.WriteLine("consume token " + token); - - if (!InDecision) - { - stats.numTokens++; - return; - } - - if (lastRealTokenTouchedInDecision == null || - lastRealTokenTouchedInDecision.TokenIndex < token.TokenIndex) - { - lastRealTokenTouchedInDecision = token; - } - DecisionEvent d = CurrentDecision(); - // compute lookahead depth - int thisRefIndex = token.TokenIndex; - int numHidden = GetNumberOfHiddenTokens(d.startIndex, thisRefIndex); - int depth = thisRefIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 - //d.maxk = Math.max(d.maxk, depth); - if (dump) - { - Console.WriteLine("consume " + thisRefIndex + " " + depth + " tokens ahead in " + - d.decision.ruleName + "-" + d.decision.decision + " start index " + d.startIndex); - } - } - - /** The parser is in a decision if the decision depth > 0. This - * works for backtracking also, which can have nested decisions. - */ - public virtual bool InDecision - { - get - { - return decisionStack.Count > 0; - } - } - - public override void ConsumeHiddenToken(IToken token) - { - //System.out.println("consume hidden token "+token); - if (!InDecision) - stats.numHiddenTokens++; - } - - /** Track refs to lookahead if in a fixed/nonfixed decision. - */ - public override void LT(int i, IToken t) - { - if (InDecision && i > 0) - { - DecisionEvent d = CurrentDecision(); - if (dump) - { - Console.WriteLine("LT(" + i + ")=" + t + " index " + t.TokenIndex + " relative to " + d.decision.ruleName + "-" + - d.decision.decision + " start index " + d.startIndex); - } - - if (lastRealTokenTouchedInDecision == null || - lastRealTokenTouchedInDecision.TokenIndex < t.TokenIndex) - { - lastRealTokenTouchedInDecision = t; - if (dump) - Console.WriteLine("set last token " + lastRealTokenTouchedInDecision); - } - // get starting index off stack - // int stackTop = lookaheadStack.size()-1; - // Integer startingIndex = (Integer)lookaheadStack.get(stackTop); - // // compute lookahead depth - // int thisRefIndex = parser.getTokenStream().index(); - // int numHidden = - // getNumberOfHiddenTokens(startingIndex.intValue(), thisRefIndex); - // int depth = i + thisRefIndex - startingIndex.intValue() - numHidden; - // /* - // System.out.println("LT("+i+") @ index "+thisRefIndex+" is depth "+depth+ - // " max is "+maxLookaheadInCurrentDecision); - // */ - // if ( depth>maxLookaheadInCurrentDecision ) { - // maxLookaheadInCurrentDecision = depth; - // } - // d.maxk = currentDecision()/ - } - } - - /** Track backtracking decisions. You'll see a fixed or cyclic decision - * and then a backtrack. - * - * enter rule - * ... - * enter decision - * LA and possibly consumes (for cyclic DFAs) - * begin backtrack level - * mark m - * rewind m - * end backtrack level, success - * exit decision - * ... - * exit rule - */ - public override void BeginBacktrack(int level) - { - if (dump) - Console.WriteLine("enter backtrack " + level); - backtrackDepth++; - DecisionEvent e = CurrentDecision(); - if (e.decision.couldBacktrack) - { - stats.numBacktrackOccurrences++; - e.decision.numBacktrackOccurrences++; - e.backtracks = true; - } - } - - /** Successful or not, track how much lookahead synpreds use */ - public override void EndBacktrack(int level, bool successful) - { - if (dump) - Console.WriteLine("exit backtrack " + level + ": " + successful); - backtrackDepth--; - } - - public override void Mark(int i) - { - if (dump) - Console.WriteLine("mark " + i); - } - - public override void Rewind(int i) - { - if (dump) - Console.WriteLine("rewind " + i); - } - - public override void Rewind() - { - if (dump) - Console.WriteLine("rewind"); - } - - protected virtual DecisionEvent CurrentDecision() - { - return decisionStack.Peek(); - } - - public override void RecognitionException(RecognitionException e) - { - stats.numReportedErrors++; - } - - public override void SemanticPredicate(bool result, string predicate) - { - stats.numSemanticPredicates++; - if (InDecision) - { - DecisionEvent d = CurrentDecision(); - d.evalSemPred = true; - d.decision.numSemPredEvals++; - if (dump) - { - Console.WriteLine("eval " + predicate + " in " + d.decision.ruleName + "-" + - d.decision.decision); - } - } - } - - public override void Terminate() - { - foreach (DecisionEvent e in decisionEvents) - { - //System.out.println("decision "+e.decision.decision+": k="+e.k); - e.decision.avgk += e.k; - stats.avgkPerDecisionEvent += e.k; - if (e.backtracks) - { // doesn't count gated syn preds on DFA edges - stats.avgkPerBacktrackingDecisionEvent += e.k; - } - } - stats.averageDecisionPercentBacktracks = 0.0f; - foreach (DecisionDescriptor d in decisions.Values()) - { - stats.numDecisionsCovered++; - d.avgk /= (float)d.n; - if (d.couldBacktrack) - { - stats.numDecisionsThatPotentiallyBacktrack++; - float percentBacktracks = d.numBacktrackOccurrences / (float)d.n; - //System.out.println("dec "+d.decision+" backtracks "+percentBacktracks*100+"%"); - stats.averageDecisionPercentBacktracks += percentBacktracks; - } - // ignore rules that backtrack along gated DFA edges - if (d.numBacktrackOccurrences > 0) - { - stats.numDecisionsThatDoBacktrack++; - } - } - stats.averageDecisionPercentBacktracks /= stats.numDecisionsThatPotentiallyBacktrack; - stats.averageDecisionPercentBacktracks *= 100; // it's a percentage - stats.avgkPerDecisionEvent /= stats.numDecisionEvents; - stats.avgkPerBacktrackingDecisionEvent /= (float)stats.numBacktrackOccurrences; - - Console.Error.WriteLine(ToString()); - Console.Error.WriteLine(GetDecisionStatsDump()); - - // String stats = toNotifyString(); - // try { - // Stats.writeReport(RUNTIME_STATS_FILENAME,stats); - // } - // catch (IOException ioe) { - // System.err.println(ioe); - // ioe.printStackTrace(System.err); - // } - } - - public virtual void SetParser(DebugParser parser) - { - this.parser = parser; - } - - // R E P O R T I N G - - public virtual string ToNotifyString() - { - StringBuilder buf = new StringBuilder(); - buf.Append(Version); - buf.Append('\t'); - buf.Append(parser.GetType().Name); - // buf.Append('\t'); - // buf.Append(numRuleInvocations); - // buf.Append('\t'); - // buf.Append(maxRuleInvocationDepth); - // buf.Append('\t'); - // buf.Append(numFixedDecisions); - // buf.Append('\t'); - // buf.Append(Stats.min(decisionMaxFixedLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.max(decisionMaxFixedLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.avg(decisionMaxFixedLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.stddev(decisionMaxFixedLookaheads)); - // buf.Append('\t'); - // buf.Append(numCyclicDecisions); - // buf.Append('\t'); - // buf.Append(Stats.min(decisionMaxCyclicLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.max(decisionMaxCyclicLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.avg(decisionMaxCyclicLookaheads)); - // buf.Append('\t'); - // buf.Append(Stats.stddev(decisionMaxCyclicLookaheads)); - // buf.Append('\t'); - // buf.Append(numBacktrackDecisions); - // buf.Append('\t'); - // buf.Append(Stats.min(toArray(decisionMaxSynPredLookaheads))); - // buf.Append('\t'); - // buf.Append(Stats.max(toArray(decisionMaxSynPredLookaheads))); - // buf.Append('\t'); - // buf.Append(Stats.avg(toArray(decisionMaxSynPredLookaheads))); - // buf.Append('\t'); - // buf.Append(Stats.stddev(toArray(decisionMaxSynPredLookaheads))); - // buf.Append('\t'); - // buf.Append(numSemanticPredicates); - // buf.Append('\t'); - // buf.Append(parser.getTokenStream().size()); - // buf.Append('\t'); - // buf.Append(numHiddenTokens); - // buf.Append('\t'); - // buf.Append(numCharsMatched); - // buf.Append('\t'); - // buf.Append(numHiddenCharsMatched); - // buf.Append('\t'); - // buf.Append(numberReportedErrors); - // buf.Append('\t'); - // buf.Append(numMemoizationCacheHits); - // buf.Append('\t'); - // buf.Append(numMemoizationCacheMisses); - // buf.Append('\t'); - // buf.Append(numGuessingRuleInvocations); - // buf.Append('\t'); - // buf.Append(numMemoizationCacheEntries); - return buf.ToString(); - } - - public override string ToString() - { - return ToString(GetReport()); - } - - public virtual ProfileStats GetReport() - { - //ITokenStream input = parser.TokenStream; - //for (int i = 0; i < input.Count && lastRealTokenTouchedInDecision != null && i <= lastRealTokenTouchedInDecision.TokenIndex; i++) - //{ - // IToken t = input.Get(i); - // if (t.Channel != TokenChannels.Default) - // { - // stats.numHiddenTokens++; - // stats.numHiddenCharsMatched += t.Text.Length; - // } - //} - stats.Version = Version; - stats.name = parser.GetType().Name; - stats.numUniqueRulesInvoked = uniqueRules.Count; - //stats.numCharsMatched = lastTokenConsumed.getStopIndex() + 1; - return stats; - } - - public virtual DoubleKeyMap GetDecisionStats() - { - return decisions; - } - - public virtual ReadOnlyCollection DecisionEvents - { - get - { - return decisionEvents.AsReadOnly(); - } - } - - public static string ToString(ProfileStats stats) - { - StringBuilder buf = new StringBuilder(); - buf.Append("ANTLR Runtime Report; Profile Version "); - buf.Append(stats.Version); - buf.Append(NewLine); - buf.Append("parser name "); - buf.Append(stats.name); - buf.Append(NewLine); - buf.Append("Number of rule invocations "); - buf.Append(stats.numRuleInvocations); - buf.Append(NewLine); - buf.Append("Number of unique rules visited "); - buf.Append(stats.numUniqueRulesInvoked); - buf.Append(NewLine); - buf.Append("Number of decision events "); - buf.Append(stats.numDecisionEvents); - buf.Append(NewLine); - buf.Append("Number of rule invocations while backtracking "); - buf.Append(stats.numGuessingRuleInvocations); - buf.Append(NewLine); - buf.Append("max rule invocation nesting depth "); - buf.Append(stats.maxRuleInvocationDepth); - buf.Append(NewLine); - // buf.Append("number of fixed lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("min lookahead used in a fixed lookahead decision "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("max lookahead used in a fixed lookahead decision "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("average lookahead depth used in fixed lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("standard deviation of depth used in fixed lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("number of arbitrary lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("min lookahead used in an arbitrary lookahead decision "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("max lookahead used in an arbitrary lookahead decision "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("average lookahead depth used in arbitrary lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("standard deviation of depth used in arbitrary lookahead decisions "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("number of evaluated syntactic predicates "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("min lookahead used in a syntactic predicate "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("max lookahead used in a syntactic predicate "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("average lookahead depth used in syntactic predicates "); - // buf.Append(); - // buf.Append(newline); - // buf.Append("standard deviation of depth used in syntactic predicates "); - // buf.Append(); - // buf.Append(newline); - buf.Append("rule memoization cache size "); - buf.Append(stats.numMemoizationCacheEntries); - buf.Append(NewLine); - buf.Append("number of rule memoization cache hits "); - buf.Append(stats.numMemoizationCacheHits); - buf.Append(NewLine); - buf.Append("number of rule memoization cache misses "); - buf.Append(stats.numMemoizationCacheMisses); - buf.Append(NewLine); - // buf.Append("number of evaluated semantic predicates "); - // buf.Append(); - // buf.Append(newline); - buf.Append("number of tokens "); - buf.Append(stats.numTokens); - buf.Append(NewLine); - buf.Append("number of hidden tokens "); - buf.Append(stats.numHiddenTokens); - buf.Append(NewLine); - buf.Append("number of char "); - buf.Append(stats.numCharsMatched); - buf.Append(NewLine); - buf.Append("number of hidden char "); - buf.Append(stats.numHiddenCharsMatched); - buf.Append(NewLine); - buf.Append("number of syntax errors "); - buf.Append(stats.numReportedErrors); - buf.Append(NewLine); - return buf.ToString(); - } - - public virtual string GetDecisionStatsDump() - { - StringBuilder buf = new StringBuilder(); - buf.Append("location"); - buf.Append(DataSeparator); - buf.Append("n"); - buf.Append(DataSeparator); - buf.Append("avgk"); - buf.Append(DataSeparator); - buf.Append("maxk"); - buf.Append(DataSeparator); - buf.Append("synpred"); - buf.Append(DataSeparator); - buf.Append("sempred"); - buf.Append(DataSeparator); - buf.Append("canbacktrack"); - buf.Append("\n"); - foreach (string fileName in decisions.KeySet()) - { - foreach (int d in decisions.KeySet(fileName)) - { - DecisionDescriptor s = decisions.Get(fileName, d); - buf.Append(s.decision); - buf.Append("@"); - buf.Append(LocationDescription(s.fileName, s.ruleName, s.line, s.pos)); // decision number - buf.Append(DataSeparator); - buf.Append(s.n); - buf.Append(DataSeparator); - buf.Append(string.Format("{0}", s.avgk)); - buf.Append(DataSeparator); - buf.Append(s.maxk); - buf.Append(DataSeparator); - buf.Append(s.numBacktrackOccurrences); - buf.Append(DataSeparator); - buf.Append(s.numSemPredEvals); - buf.Append(DataSeparator); - buf.Append(s.couldBacktrack ? "1" : "0"); - buf.Append(NewLine); - } - } - return buf.ToString(); - } - - protected virtual int[] Trim(int[] X, int n) - { - if (n < X.Length) - { - int[] trimmed = new int[n]; - Array.Copy(X, 0, trimmed, 0, n); - X = trimmed; - } - return X; - } - - /** Get num hidden tokens between i..j inclusive */ - public virtual int GetNumberOfHiddenTokens(int i, int j) - { - int n = 0; - ITokenStream input = parser.TokenStream; - for (int ti = i; ti < input.Count && ti <= j; ti++) - { - IToken t = input.Get(ti); - if (t.Channel != TokenChannels.Default) - { - n++; - } - } - return n; - } - - protected virtual string LocationDescription() - { - return LocationDescription( - currentGrammarFileName.Peek(), - currentRuleName.Peek(), - currentLine.Peek(), - currentPos.Peek()); - } - - protected virtual string LocationDescription(string file, string rule, int line, int pos) - { - return file + ":" + line + ":" + pos + "(" + rule + ")"; - } - - public class ProfileStats - { - public string Version; - public string name; - public int numRuleInvocations; - public int numUniqueRulesInvoked; - public int numDecisionEvents; - public int numDecisionsCovered; - public int numDecisionsThatPotentiallyBacktrack; - public int numDecisionsThatDoBacktrack; - public int maxRuleInvocationDepth; - public float avgkPerDecisionEvent; - public float avgkPerBacktrackingDecisionEvent; - public float averageDecisionPercentBacktracks; - public int numBacktrackOccurrences; // doesn't count gated DFA edges - - public int numFixedDecisions; - public int minDecisionMaxFixedLookaheads; - public int maxDecisionMaxFixedLookaheads; - public int avgDecisionMaxFixedLookaheads; - public int stddevDecisionMaxFixedLookaheads; - public int numCyclicDecisions; - public int minDecisionMaxCyclicLookaheads; - public int maxDecisionMaxCyclicLookaheads; - public int avgDecisionMaxCyclicLookaheads; - public int stddevDecisionMaxCyclicLookaheads; - // int Stats.min(toArray(decisionMaxSynPredLookaheads); - // int Stats.max(toArray(decisionMaxSynPredLookaheads); - // int Stats.avg(toArray(decisionMaxSynPredLookaheads); - // int Stats.stddev(toArray(decisionMaxSynPredLookaheads); - public int numSemanticPredicates; - public int numTokens; - public int numHiddenTokens; - public int numCharsMatched; - public int numHiddenCharsMatched; - public int numReportedErrors; - public int numMemoizationCacheHits; - public int numMemoizationCacheMisses; - public int numGuessingRuleInvocations; - public int numMemoizationCacheEntries; - } - - public class DecisionDescriptor - { - public int decision; - public string fileName; - public string ruleName; - public int line; - public int pos; - public bool couldBacktrack; - - public int n; - public float avgk; // avg across all decision events - public int maxk; - public int numBacktrackOccurrences; - public int numSemPredEvals; - } - - // all about a specific exec of a single decision - public class DecisionEvent - { - public DecisionDescriptor decision; - public int startIndex; - public int k; - public bool backtracks; // doesn't count gated DFA edges - public bool evalSemPred; - public DateTime startTime; - public DateTime stopTime; - public int numMemoizationCacheHits; - public int numMemoizationCacheMisses; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs deleted file mode 100644 index 038cddb..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "Antlr3.Runtime.Debug" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "Tunnel Vision Laboratories, LLC" )] -[assembly: AssemblyProduct( "Antlr3.Runtime.Debug" )] -[assembly: AssemblyCopyright( "Copyright © Sam Harwell 2013" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] -[assembly: CLSCompliant( true )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "9f8fa018-6766-404c-9e72-551407e1b173" )] - -/* Version information for an assembly consists of four values in the following order: - * - * Major.Minor.Build.Revision - * - * These values are updated according to the following: - * 1. Major.Minor follows the ANTLR release schedule - * 2. Build is incremented each time the C# port is packaged for release (regardless - * of whether it's an incremental or nightly). The value resets to zero whenever - * the Major or Minor version is incremented. - * 3. Revision is the Perforce changelist number associated with the release. - */ -[assembly: AssemblyVersion("3.5.0.2")] -[assembly: AssemblyFileVersion("3.5.0.2")] diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs deleted file mode 100644 index e390065..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs +++ /dev/null @@ -1,744 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Antlr.Runtime.JavaExtensions; - - using Array = System.Array; - using BaseTree = Antlr.Runtime.Tree.BaseTree; - using Console = System.Console; - using Exception = System.Exception; - using IOException = System.IO.IOException; - using ITree = Antlr.Runtime.Tree.ITree; - using Math = System.Math; - using Socket = System.Net.Sockets.Socket; - using SocketException = System.Net.Sockets.SocketException; - using TextReader = System.IO.TextReader; - using TextWriter = System.IO.TextWriter; - - public class RemoteDebugEventSocketListener - { - const int MAX_EVENT_ELEMENTS = 8; - IDebugEventListener listener; - string machine; - int port; - Socket channel = null; - TextWriter @out; - TextReader @in; - string @event; - /** Version of ANTLR (dictates events) */ - public string version; - public string grammarFileName; - /** - * Track the last token index we saw during a consume. If same, then - * set a flag that we have a problem. - * - */ - int previousTokenIndex = -1; - bool tokenIndexesInvalid = false; - - public class ProxyToken : IToken - { - int index; - int type; - int channel; - int line; - int charPos; - string text; - public ProxyToken( int index ) - { - this.index = index; - } - public ProxyToken( int index, int type, int channel, - int line, int charPos, string text ) - { - this.index = index; - this.type = type; - this.channel = channel; - this.line = line; - this.charPos = charPos; - this.text = text; - } - - #region IToken Members - public string Text - { - get - { - return text; - } - set - { - text = value; - } - } - - public int Type - { - get - { - return type; - } - set - { - type = value; - } - } - - public int Line - { - get - { - return line; - } - set - { - line = value; - } - } - - public int CharPositionInLine - { - get - { - return charPos; - } - set - { - charPos = value; - } - } - - public int Channel - { - get - { - return channel; - } - set - { - channel = value; - } - } - - public int StartIndex - { - get - { - return -1; - } - set - { - } - } - - public int StopIndex - { - get - { - return -1; - } - set - { - } - } - - public int TokenIndex - { - get - { - return index; - } - set - { - index = value; - } - } - - public ICharStream InputStream - { - get - { - return null; - } - set - { - } - } - - #endregion - - public override string ToString() - { - string channelStr = ""; - if ( channel != TokenChannels.Default ) - { - channelStr = ",channel=" + channel; - } - return "[" + Text + "/<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + ",@" + index + "]"; - } - } - - public class ProxyTree : BaseTree - { - public int ID; - int type; - int line = 0; - public int charPos = -1; - public int tokenIndex = -1; - string text; - - public ProxyTree( int ID, int type, int line, int charPos, int tokenIndex, string text ) - { - this.ID = ID; - this.type = type; - this.line = line; - this.charPos = charPos; - this.tokenIndex = tokenIndex; - this.text = text; - } - - public ProxyTree( int ID ) - { - this.ID = ID; - } - - #region Properties - public override string Text - { - get - { - return text; - } - set - { - } - } - public override int TokenStartIndex - { - get - { - return tokenIndex; - } - set - { - } - } - public override int TokenStopIndex - { - get - { - return 0; - } - set - { - } - } - public override int Type - { - get - { - return type; - } - set - { - } - } - #endregion - - public override ITree DupNode() - { - return null; - } - - public override string ToString() - { - return "fix this"; - } - } - - public RemoteDebugEventSocketListener( IDebugEventListener listener, - string machine, - int port ) - { - this.listener = listener; - this.machine = machine; - this.port = port; - - if ( !OpenConnection() ) - { - throw new SocketException(); - } - } - - protected virtual void EventHandler() - { - try - { - Handshake(); - @event = @in.ReadLine(); - while ( @event != null ) - { - Dispatch( @event ); - Ack(); - @event = @in.ReadLine(); - } - } - catch ( Exception e ) - { - Console.Error.WriteLine( e ); - ExceptionExtensions.PrintStackTrace( e, Console.Error ); - } - finally - { - CloseConnection(); - } - } - - protected virtual bool OpenConnection() - { - bool success = false; - try - { - throw new System.NotImplementedException(); - //channel = new Socket( machine, port ); - //channel.setTcpNoDelay( true ); - //OutputStream os = channel.getOutputStream(); - //OutputStreamWriter osw = new OutputStreamWriter( os, "UTF8" ); - //@out = new PrintWriter( new BufferedWriter( osw ) ); - //InputStream @is = channel.getInputStream(); - //InputStreamReader isr = new InputStreamReader( @is, "UTF8" ); - //@in = new BufferedReader( isr ); - //success = true; - } - catch ( Exception e ) - { - Console.Error.WriteLine( e ); - } - return success; - } - - protected virtual void CloseConnection() - { - try - { - @in.Close(); - @in = null; - @out.Close(); - @out = null; - channel.Close(); - channel = null; - } - catch ( Exception e ) - { - Console.Error.WriteLine( e ); - ExceptionExtensions.PrintStackTrace( e, Console.Error ); - } - finally - { - if ( @in != null ) - { - try - { - @in.Close(); - } - catch ( IOException ioe ) - { - Console.Error.WriteLine( ioe ); - } - } - if ( @out != null ) - { - @out.Close(); - } - if ( channel != null ) - { - try - { - channel.Close(); - } - catch ( IOException ioe ) - { - Console.Error.WriteLine( ioe ); - } - } - } - - } - - protected virtual void Handshake() - { - string antlrLine = @in.ReadLine(); - string[] antlrElements = GetEventElements( antlrLine ); - version = antlrElements[1]; - string grammarLine = @in.ReadLine(); - string[] grammarElements = GetEventElements( grammarLine ); - grammarFileName = grammarElements[1]; - Ack(); - listener.Commence(); // inform listener after handshake - } - - protected virtual void Ack() - { - @out.WriteLine( "ack" ); - @out.Flush(); - } - - protected virtual void Dispatch( string line ) - { - //JSystem.@out.println( "event: " + line ); - string[] elements = GetEventElements( line ); - if ( elements == null || elements[0] == null ) - { - Console.Error.WriteLine( "unknown debug event: " + line ); - return; - } - if ( elements[0].Equals( "enterRule" ) ) - { - listener.EnterRule( elements[1], elements[2] ); - } - else if ( elements[0].Equals( "exitRule" ) ) - { - listener.ExitRule( elements[1], elements[2] ); - } - else if ( elements[0].Equals( "enterAlt" ) ) - { - listener.EnterAlt( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "enterSubRule" ) ) - { - listener.EnterSubRule( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "exitSubRule" ) ) - { - listener.ExitSubRule( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "enterDecision" ) ) - { - listener.EnterDecision(int.Parse(elements[1]), elements[2].Equals("true")); - } - else if ( elements[0].Equals( "exitDecision" ) ) - { - listener.ExitDecision( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "location" ) ) - { - listener.Location( int.Parse( elements[1] ), - int.Parse( elements[2] ) ); - } - else if ( elements[0].Equals( "consumeToken" ) ) - { - ProxyToken t = DeserializeToken( elements, 1 ); - if ( t.TokenIndex == previousTokenIndex ) - { - tokenIndexesInvalid = true; - } - previousTokenIndex = t.TokenIndex; - listener.ConsumeToken( t ); - } - else if ( elements[0].Equals( "consumeHiddenToken" ) ) - { - ProxyToken t = DeserializeToken( elements, 1 ); - if ( t.TokenIndex == previousTokenIndex ) - { - tokenIndexesInvalid = true; - } - previousTokenIndex = t.TokenIndex; - listener.ConsumeHiddenToken( t ); - } - else if ( elements[0].Equals( "LT" ) ) - { - IToken t = DeserializeToken( elements, 2 ); - listener.LT( int.Parse( elements[1] ), t ); - } - else if ( elements[0].Equals( "mark" ) ) - { - listener.Mark( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "rewind" ) ) - { - if ( elements[1] != null ) - { - listener.Rewind( int.Parse( elements[1] ) ); - } - else - { - listener.Rewind(); - } - } - else if ( elements[0].Equals( "beginBacktrack" ) ) - { - listener.BeginBacktrack( int.Parse( elements[1] ) ); - } - else if ( elements[0].Equals( "endBacktrack" ) ) - { - int level = int.Parse( elements[1] ); - int successI = int.Parse( elements[2] ); - listener.EndBacktrack( level, successI == DebugEventListenerConstants.True ); - } - else if ( elements[0].Equals( "exception" ) ) - { -#if true - throw new System.NotImplementedException(); -#else - string excName = elements[1]; - string indexS = elements[2]; - string lineS = elements[3]; - string posS = elements[4]; - Class excClass = null; - try - { - excClass = Class.forName( excName ); - RecognitionException e = - (RecognitionException)excClass.newInstance(); - e.index = int.Parse( indexS ); - e.line = int.Parse( lineS ); - e.charPositionInLine = int.Parse( posS ); - listener.recognitionException( e ); - } - catch ( ClassNotFoundException cnfe ) - { - Console.Error.println( "can't find class " + cnfe ); - cnfe.printStackTrace( Console.Error ); - } - catch ( InstantiationException ie ) - { - Console.Error.println( "can't instantiate class " + ie ); - ie.printStackTrace( Console.Error ); - } - catch ( IllegalAccessException iae ) - { - Console.Error.println( "can't access class " + iae ); - iae.printStackTrace( Console.Error ); - } -#endif - } - else if ( elements[0].Equals( "beginResync" ) ) - { - listener.BeginResync(); - } - else if ( elements[0].Equals( "endResync" ) ) - { - listener.EndResync(); - } - else if ( elements[0].Equals( "terminate" ) ) - { - listener.Terminate(); - } - else if ( elements[0].Equals( "semanticPredicate" ) ) - { - bool result = bool.Parse( elements[1] ); - string predicateText = elements[2]; - predicateText = UnEscapeNewlines( predicateText ); - listener.SemanticPredicate( result, - predicateText ); - } - else if ( elements[0].Equals( "consumeNode" ) ) - { - ProxyTree node = DeserializeNode( elements, 1 ); - listener.ConsumeNode( node ); - } - else if ( elements[0].Equals( "LN" ) ) - { - int i = int.Parse( elements[1] ); - ProxyTree node = DeserializeNode( elements, 2 ); - listener.LT( i, node ); - } - else if ( elements[0].Equals( "createNodeFromTokenElements" ) ) - { - int ID = int.Parse( elements[1] ); - int type = int.Parse( elements[2] ); - string text = elements[3]; - text = UnEscapeNewlines( text ); - ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); - listener.CreateNode( node ); - } - else if ( elements[0].Equals( "createNode" ) ) - { - int ID = int.Parse( elements[1] ); - int tokenIndex = int.Parse( elements[2] ); - // create dummy node/token filled with ID, tokenIndex - ProxyTree node = new ProxyTree( ID ); - ProxyToken token = new ProxyToken( tokenIndex ); - listener.CreateNode( node, token ); - } - else if ( elements[0].Equals( "nilNode" ) ) - { - int ID = int.Parse( elements[1] ); - ProxyTree node = new ProxyTree( ID ); - listener.NilNode( node ); - } - else if ( elements[0].Equals( "errorNode" ) ) - { - // TODO: do we need a special tree here? - int ID = int.Parse( elements[1] ); - int type = int.Parse( elements[2] ); - string text = elements[3]; - text = UnEscapeNewlines( text ); - ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); - listener.ErrorNode( node ); - } - else if ( elements[0].Equals( "becomeRoot" ) ) - { - int newRootID = int.Parse( elements[1] ); - int oldRootID = int.Parse( elements[2] ); - ProxyTree newRoot = new ProxyTree( newRootID ); - ProxyTree oldRoot = new ProxyTree( oldRootID ); - listener.BecomeRoot( newRoot, oldRoot ); - } - else if ( elements[0].Equals( "addChild" ) ) - { - int rootID = int.Parse( elements[1] ); - int childID = int.Parse( elements[2] ); - ProxyTree root = new ProxyTree( rootID ); - ProxyTree child = new ProxyTree( childID ); - listener.AddChild( root, child ); - } - else if ( elements[0].Equals( "setTokenBoundaries" ) ) - { - int ID = int.Parse( elements[1] ); - ProxyTree node = new ProxyTree( ID ); - listener.SetTokenBoundaries( - node, - int.Parse( elements[2] ), - int.Parse( elements[3] ) ); - } - else - { - Console.Error.WriteLine( "unknown debug event: " + line ); - } - } - - protected virtual ProxyTree DeserializeNode( string[] elements, int offset ) - { - int ID = int.Parse( elements[offset + 0] ); - int type = int.Parse( elements[offset + 1] ); - int tokenLine = int.Parse( elements[offset + 2] ); - int charPositionInLine = int.Parse( elements[offset + 3] ); - int tokenIndex = int.Parse( elements[offset + 4] ); - string text = elements[offset + 5]; - text = UnEscapeNewlines( text ); - return new ProxyTree( ID, type, tokenLine, charPositionInLine, tokenIndex, text ); - } - - protected virtual ProxyToken DeserializeToken( string[] elements, - int offset ) - { - string indexS = elements[offset + 0]; - string typeS = elements[offset + 1]; - string channelS = elements[offset + 2]; - string lineS = elements[offset + 3]; - string posS = elements[offset + 4]; - string text = elements[offset + 5]; - text = UnEscapeNewlines( text ); - int index = int.Parse( indexS ); - ProxyToken t = - new ProxyToken( index, - int.Parse( typeS ), - int.Parse( channelS ), - int.Parse( lineS ), - int.Parse( posS ), - text ); - return t; - } - - /** Create a thread to listen to the remote running recognizer */ - public virtual void Start() - { - System.Threading.Thread t = new System.Threading.Thread( Run ); - t.Start(); - } - - public virtual void Run() - { - EventHandler(); - } - - #region Misc - - public virtual string[] GetEventElements( string @event ) - { - if ( @event == null ) - { - return null; - } - string[] elements = new string[MAX_EVENT_ELEMENTS]; - string str = null; // a string element if present (must be last) - try - { - int firstQuoteIndex = @event.IndexOf( '"' ); - if ( firstQuoteIndex >= 0 ) - { - // treat specially; has a string argument like "a comment\n - // Note that the string is terminated by \n not end quote. - // Easier to parse that way. - string eventWithoutString = @event.Substring( 0, firstQuoteIndex ); - str = @event.Substring( firstQuoteIndex + 1 ); - @event = eventWithoutString; - } - - string[] tokens = @event.Split('\t'); - Array.Copy(tokens, elements, Math.Min(tokens.Length, MAX_EVENT_ELEMENTS)); - if (tokens.Length >= MAX_EVENT_ELEMENTS) - return elements; - - if ( str != null ) - { - elements[tokens.Length] = str; - } - } - catch ( Exception e ) - { - ExceptionExtensions.PrintStackTrace( e, Console.Error ); - } - return elements; - } - - protected virtual string UnEscapeNewlines( string txt ) - { - // this unescape is slow but easy to understand - txt = txt.Replace( "%0A", "\n" ); // unescape \n - txt = txt.Replace( "%0D", "\r" ); // unescape \r - txt = txt.Replace( "%25", "%" ); // undo escaped escape chars - return txt; - } - - public virtual bool TokenIndexesAreInvalid() - { - return tokenIndexesInvalid; - } - - #endregion - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs deleted file mode 100644 index c71da4f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs +++ /dev/null @@ -1,135 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Antlr.Runtime.JavaExtensions; - - using Console = System.Console; - using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; - - /** Print out (most of) the events... Useful for debugging, testing... */ - public class TraceDebugEventListener : BlankDebugEventListener - { - ITreeAdaptor adaptor; - - public TraceDebugEventListener( ITreeAdaptor adaptor ) - { - this.adaptor = adaptor; - } - - public void EnterRule( string ruleName ) - { - Console.Out.WriteLine( "enterRule " + ruleName ); - } - public void ExitRule( string ruleName ) - { - Console.Out.WriteLine( "exitRule " + ruleName ); - } - public override void EnterSubRule( int decisionNumber ) - { - Console.Out.WriteLine( "enterSubRule" ); - } - public override void ExitSubRule( int decisionNumber ) - { - Console.Out.WriteLine( "exitSubRule" ); - } - public override void Location( int line, int pos ) - { - Console.Out.WriteLine( "location " + line + ":" + pos ); - } - - #region Tree parsing stuff - - public override void ConsumeNode( object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - Console.Out.WriteLine( "consumeNode " + ID + " " + text + " " + type ); - } - - public override void LT( int i, object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - Console.Out.WriteLine( "LT " + i + " " + ID + " " + text + " " + type ); - } - - #endregion - - - #region AST stuff - - public override void NilNode( object t ) - { - Console.Out.WriteLine( "nilNode " + adaptor.GetUniqueID( t ) ); - } - - public override void CreateNode( object t ) - { - int ID = adaptor.GetUniqueID( t ); - string text = adaptor.GetText( t ); - int type = adaptor.GetType( t ); - Console.Out.WriteLine( "create " + ID + ": " + text + ", " + type ); - } - - public override void CreateNode( object node, IToken token ) - { - int ID = adaptor.GetUniqueID( node ); - string text = adaptor.GetText( node ); - int tokenIndex = token.TokenIndex; - Console.Out.WriteLine( "create " + ID + ": " + tokenIndex ); - } - - public override void BecomeRoot( object newRoot, object oldRoot ) - { - Console.Out.WriteLine( "becomeRoot " + adaptor.GetUniqueID( newRoot ) + ", " + - adaptor.GetUniqueID( oldRoot ) ); - } - - public override void AddChild( object root, object child ) - { - Console.Out.WriteLine( "addChild " + adaptor.GetUniqueID( root ) + ", " + - adaptor.GetUniqueID( child ) ); - } - - public override void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) - { - Console.Out.WriteLine( "setTokenBoundaries " + adaptor.GetUniqueID( t ) + ", " + - tokenStartIndex + ", " + tokenStopIndex ); - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs deleted file mode 100644 index c99d4f7..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - using Antlr.Runtime.JavaExtensions; - - using Console = System.Console; - - /** - * The default tracer mimics the traceParser behavior of ANTLR 2.x. - * This listens for debugging events from the parser and implies - * that you cannot debug and trace at the same time. - * - */ - public class Tracer : BlankDebugEventListener - { - public IIntStream input; - protected int level = 0; - - public Tracer( IIntStream input ) - { - this.input = input; - } - - public virtual void EnterRule( string ruleName ) - { - for ( int i = 1; i <= level; i++ ) - { - Console.Out.Write( " " ); - } - Console.Out.WriteLine( "> " + ruleName + " lookahead(1)=" + GetInputSymbol( 1 ) ); - level++; - } - - public virtual void ExitRule( string ruleName ) - { - level--; - for ( int i = 1; i <= level; i++ ) - { - Console.Out.Write( " " ); - } - Console.Out.WriteLine( "< " + ruleName + " lookahead(1)=" + GetInputSymbol( 1 ) ); - } - - public virtual object GetInputSymbol( int k ) - { - if ( input is ITokenStream ) - { - return ( (ITokenStream)input ).LT( k ); - } - return (char)input.LA( k ); - } - } -} - diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj deleted file mode 100644 index 2c90504..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {A7EEC557-EB14-451C-9616-B7A61F4ECE69} - Library - Properties - Antlr3.Runtime.JavaExtensions - Antlr3.Runtime.JavaExtensions - v3.5 - 512 - Client - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - - - ..\..\..\..\..\..\..\..\..\keys\antlr\Key.snk - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - {8FDC0A87-9005-4D5A-AB75-E55CEB575559} - Antlr3.Runtime - - - - - Key.snk - - - - - \ No newline at end of file diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc deleted file mode 100644 index b27adcc..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "relative:antlr\\main\\runtime\\CSharp3\\Sources\\Antlr3.Runtime.JavaExtensions" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs deleted file mode 100644 index cd32ce9..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs +++ /dev/null @@ -1,135 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.JavaExtensions -{ - using System.Collections.Generic; - using System.Linq; - - using IDictionary = System.Collections.IDictionary; - using ObsoleteAttribute = System.ObsoleteAttribute; - - public static class DictionaryExtensions - { - [Obsolete] - public static bool containsKey( this IDictionary map, object key ) - { - return map.Contains( key ); - } - - [Obsolete] - public static object get( this IDictionary map, object key ) - { - return map[key]; - } - - public static TValue get( this IDictionary map, TKey key ) - { - TValue value; - if ( map.TryGetValue( key, out value ) ) - return value; - - if ( typeof( TValue ).IsValueType ) - throw new KeyNotFoundException(); - - return default( TValue ); - } - - // disambiguates - public static TValue get( this Dictionary map, TKey key ) - { - TValue value; - if ( map.TryGetValue( key, out value ) ) - return value; - - if ( typeof( TValue ).IsValueType ) - throw new KeyNotFoundException(); - - return default( TValue ); - } - - public static TValue get( this SortedList map, TKey key ) - { - TValue value; - if ( map.TryGetValue( key, out value ) ) - return value; - - if ( typeof( TValue ).IsValueType ) - throw new KeyNotFoundException(); - - return default( TValue ); - } - - [Obsolete] - public static void put( this IDictionary map, object key, object value ) - { - map[key] = value; - } - - [Obsolete] - public static void put( this IDictionary map, TKey key, TValue value ) - { - map[key] = value; - } - - [Obsolete] - public static void put( this Dictionary map, TKey key, TValue value ) - { - map[key] = value; - } - - [Obsolete] - public static HashSet keySet( this IDictionary map ) - { - return new HashSet( map.Keys.Cast() ); - } - - [Obsolete] - public static HashSet keySet( this IDictionary map ) - { - return new HashSet( map.Keys ); - } - - // disambiguates for Dictionary, which implements both IDictionary and IDictionary - [Obsolete] - public static HashSet keySet( this Dictionary map ) - { - return new HashSet( map.Keys ); - } - - [Obsolete] - public static HashSet keySet( this SortedList map ) - { - return new HashSet( map.Keys.Cast() ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ExceptionExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ExceptionExtensions.cs deleted file mode 100644 index 65696c8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ExceptionExtensions.cs +++ /dev/null @@ -1,100 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Diagnostics; -using System.Linq; - -using TargetInvocationException = System.Reflection.TargetInvocationException; - -namespace Antlr.Runtime.JavaExtensions -{ - public static class ExceptionExtensions - { -#if DEBUG - [Obsolete] - public static string getMessage( this Exception e ) - { - return e.Message; - } -#endif - - public static StackFrame[] getStackTrace( this Exception e ) - { - StackTrace trace = new StackTrace( e, true ); - StackFrame[] frames = trace.GetFrames(); - if ( frames == null ) - { - // don't include this helper function in the trace - frames = new StackTrace( true ).GetFrames().Skip( 1 ).ToArray(); - } - return frames; - } - -#if DEBUG - [Obsolete] - public static string getMethodName( this StackFrame frame ) - { - return frame.GetMethod().Name; - } - - [Obsolete] - public static string getClassName( this StackFrame frame ) - { - return frame.GetMethod().DeclaringType.Name; - } -#endif - - public static void PrintStackTrace( this Exception e ) - { - e.PrintStackTrace( Console.Out ); - } - public static void PrintStackTrace( this Exception e, System.IO.TextWriter writer ) - { - writer.WriteLine( e.ToString() ); - string trace = e.StackTrace ?? string.Empty; - foreach ( string line in trace.Split( '\n', '\r' ) ) - { - if ( !string.IsNullOrEmpty( line ) ) - writer.WriteLine( " " + line ); - } - } - -#if DEBUG - [Obsolete] - public static Exception getTargetException( this TargetInvocationException e ) - { - return e.InnerException ?? e; - } -#endif - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs deleted file mode 100644 index 52b529c..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs +++ /dev/null @@ -1,90 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.JavaExtensions -{ - using System; - - using TextReader = System.IO.TextReader; - using TextWriter = System.IO.TextWriter; - - public static class IOExtensions - { - [Obsolete] - public static void close( this TextReader reader ) - { - reader.Close(); - } - - [Obsolete] - public static void close( this TextWriter writer ) - { - writer.Close(); - } - - [Obsolete] - public static void print( this TextWriter writer, T value ) - { - writer.Write( value ); - } - - [Obsolete] - public static void println( this TextWriter writer ) - { - writer.WriteLine(); - } - - [Obsolete] - public static void println( this TextWriter writer, T value ) - { - writer.WriteLine( value ); - } - - [Obsolete] - public static void write( this TextWriter writer, T value ) - { - writer.Write( value ); - } - - [Obsolete] - public static int read( this TextReader reader, char[] buffer, int index, int count ) - { - return reader.Read( buffer, index, count ); - } - - [Obsolete] - public static string readLine( this TextReader reader ) - { - return reader.ReadLine(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs deleted file mode 100644 index 1574937..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.JavaExtensions -{ - using System; - using System.IO; - - public static class JSystem - { - [Obsolete] - public static TextWriter err - { - get - { - return Console.Error; - } - } - - [Obsolete] - public static TextWriter @out - { - get - { - return Console.Out; - } - } - - [Obsolete] - public static void arraycopy( T[] sourceArray, int sourceIndex, T[] destinationArray, int destinationIndex, int length ) - { - Array.Copy( sourceArray, sourceIndex, destinationArray, destinationIndex, length ); - } - - [Obsolete] - public static string getProperty( string name ) - { - switch ( name ) - { - case "file.encoding": - return System.Text.Encoding.Default.WebName; - - case "line.separator": - return Environment.NewLine; - - case "java.io.tmpdir": - return System.IO.Path.GetTempPath(); - - case "user.home": - return Environment.GetFolderPath( Environment.SpecialFolder.Personal ); - - default: - throw new ArgumentException( string.Format( "Unknown system property: '{0}'", name ) ); - } - } - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs deleted file mode 100644 index 4300b38..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.JavaExtensions -{ - public static class LexerExtensions - { - public static void skip( this Lexer lexer ) - { - lexer.Skip(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ListExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ListExtensions.cs deleted file mode 100644 index 51c16bc..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ListExtensions.cs +++ /dev/null @@ -1,237 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Collections.Generic; -using System.Linq; - -using ICollection = System.Collections.ICollection; -using IEnumerable = System.Collections.IEnumerable; -using IList = System.Collections.IList; - -namespace Antlr.Runtime.JavaExtensions -{ - public static class ListExtensions - { -#if DEBUG - [Obsolete] - public static bool add( this IList list, object value ) - { - int count = list.Count; - list.Add( value ); - return list.Count == count + 1; - } - - [Obsolete] - public static void add( this ICollection list, T value ) - { - list.Add( value ); - } - - [Obsolete] - public static void add( this List list, T value ) - { - list.Add( value ); - } - - [Obsolete] - public static void add( this IList list, int index, object value ) - { - list.Insert( index, value ); - } - - [Obsolete] - public static void addAll( this List list, IEnumerable items ) - { - list.AddRange( items.Cast() ); - } -#endif - - public static void addAll( this IList list, IEnumerable items ) - { - foreach ( object item in items ) - list.Add( item ); - } - - public static void addAll( this ICollection list, IEnumerable items ) - { - foreach ( T item in items ) - list.Add( item ); - } - -#if DEBUG - [Obsolete] - public static void addElement( this List list, object value ) - { - list.Add( value ); - } - - [Obsolete] - public static void clear( this IList list ) - { - list.Clear(); - } - - [Obsolete] - public static bool contains( this IList list, object value ) - { - return list.Contains( value ); - } - - [Obsolete] - public static bool contains( this ICollection list, T value ) - { - return list.Contains( value ); - } - - [Obsolete] - public static T elementAt( this IList list, int index ) - { - return list[index]; - } - - [Obsolete] - public static object get( this IList list, int index ) - { - return list[index]; - } - - [Obsolete] - public static T get( this IList list, int index ) - { - return list[index]; - } - - // disambiguate - [Obsolete] - public static T get( this List list, int index ) - { - return list[index]; - } - - [Obsolete] - public static object remove( this IList list, int index ) - { - object o = list[index]; - list.RemoveAt( index ); - return o; - } - - [Obsolete] - public static void remove( this IList list, T item ) - { - list.Remove( item ); - } - - [Obsolete] - public static void set( this IList list, int index, object value ) - { - list[index] = value; - } - - [Obsolete] - public static void set( this IList list, int index, T value ) - { - list[index] = value; - } - - [Obsolete] - public static void set( this List list, int index, T value ) - { - list[index] = value; - } -#endif - - public static void setSize( this List list, int size ) - { - if ( list.Count < size ) - { - list.AddRange( Enumerable.Repeat( default( T ), size - list.Count ) ); - } - else if ( list.Count > size ) - { - list.RemoveRange(size, list.Count - size); - } - } - -#if DEBUG - [Obsolete] - public static int size( this ICollection collection ) - { - return collection.Count; - } - - [Obsolete] - public static int size( this ICollection collection ) - { - return collection.Count; - } - - [Obsolete] - public static int size( this List list ) - { - return list.Count; - } -#endif - - public static IList subList( this IList list, int fromIndex, int toIndex ) - { - return new SubList( list, fromIndex, toIndex ); - //return - // list - // .Cast() - // .Skip( fromIndex ) - // .Take( toIndex - fromIndex + 1 ) - // .ToList(); - } - - public static IList subList( this IList list, int fromIndex, int toIndex ) - { - return new SubList( list, fromIndex, toIndex ); - //return - // list - // .Skip( fromIndex ) - // .Take( toIndex - fromIndex + 1 ) - // .ToList(); - } - - public static IList subList( this List list, int fromIndex, int toIndex ) - { - return new SubList( list, fromIndex, toIndex ); - //return - // list - // .Skip( fromIndex ) - // .Take( toIndex - fromIndex + 1 ) - // .ToList(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ObjectExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ObjectExtensions.cs deleted file mode 100644 index fe6a274..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/ObjectExtensions.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; - -namespace Antlr.Runtime.JavaExtensions -{ - public static class ObjectExtensions - { -#if DEBUG - [Obsolete] - public static bool booleanValue( this bool value ) - { - return value; - } - - [Obsolete] - public static Type getClass( this object o ) - { - return o.GetType(); - } -#endif - - public static int ShiftPrimeXOR( int a, int b ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) ^ a; - hash = ( ( hash << 5 ) * 37 ) ^ b; - return hash; - } - - public static int ShiftPrimeXOR( int a, int b, int c ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) ^ a; - hash = ( ( hash << 5 ) * 37 ) ^ b; - hash = ( ( hash << 5 ) * 37 ) ^ c; - return hash; - } - - public static int ShiftPrimeXOR( int a, int b, int c, int d ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) ^ a; - hash = ( ( hash << 5 ) * 37 ) ^ b; - hash = ( ( hash << 5 ) * 37 ) ^ c; - hash = ( ( hash << 5 ) * 37 ) ^ d; - return hash; - } - - public static int ShiftPrimeXOR( params int[] a ) - { - int hash = 23; - foreach ( int i in a ) - hash = ( ( hash << 5 ) * 37 ) ^ i; - return hash; - } - - public static int ShiftPrimeAdd( int a, int b ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) + a; - hash = ( ( hash << 5 ) * 37 ) + b; - return hash; - } - - public static int ShiftPrimeAdd( int a, int b, int c ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) + a; - hash = ( ( hash << 5 ) * 37 ) + b; - hash = ( ( hash << 5 ) * 37 ) + c; - return hash; - } - - public static int ShiftPrimeAdd( int a, int b, int c, int d ) - { - int hash = 23; - hash = ( ( hash << 5 ) * 37 ) + a; - hash = ( ( hash << 5 ) * 37 ) + b; - hash = ( ( hash << 5 ) * 37 ) + c; - hash = ( ( hash << 5 ) * 37 ) + d; - return hash; - } - - public static int ShiftPrimeAdd( params int[] a ) - { - int hash = 23; - foreach ( int i in a ) - hash = ( ( hash << 5 ) * 37 ) + i; - return hash; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs deleted file mode 100644 index 00e66a9..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2010 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "Antlr3.Runtime.JavaExtensions" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "Tunnel Vision Laboratories, LLC" )] -[assembly: AssemblyProduct( "Antlr3.Runtime.JavaExtensions" )] -[assembly: AssemblyCopyright( "Copyright © Sam Harwell 2013" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] -[assembly: CLSCompliant( true )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "ad48c7f7-0b1d-4b1e-9602-83425cb5699f" )] - -/* Version information for an assembly consists of four values in the following order: - * - * Major.Minor.Build.Revision - * - * These values are updated according to the following: - * 1. Major.Minor follows the ANTLR release schedule - * 2. Build is incremented each time the C# port is packaged for release (regardless - * of whether it's an incremental or nightly). The value resets to zero whenever - * the Major or Minor version is incremented. - */ -[assembly: AssemblyVersion("3.5.0.2")] -[assembly: AssemblyFileVersion("3.5.0.2")] diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SetExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SetExtensions.cs deleted file mode 100644 index 881326e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SetExtensions.cs +++ /dev/null @@ -1,89 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Collections.Generic; -#if DEBUG -using System.Linq; -#endif - -namespace Antlr.Runtime.JavaExtensions -{ - public static class SetExtensions - { -#if DEBUG - [Obsolete] - public static bool add( this HashSet set, T item ) - { - return set.Add( item ); - } -#endif - - public static void addAll( this HashSet set, IEnumerable items ) - { - foreach ( T item in items ) - set.Add( item ); - } - -#if DEBUG - [Obsolete] - public static void clear( this HashSet set ) - { - set.Clear(); - } - - [Obsolete] - public static bool contains( this HashSet set, T value ) - { - return set.Contains( value ); - } - - [Obsolete] - public static bool remove( this HashSet set, T item ) - { - return set.Remove( item ); - } - - [Obsolete] - public static int size( this HashSet set ) - { - return set.Count; - } - - [Obsolete] - public static T[] toArray( this HashSet set ) - { - return set.ToArray(); - } -#endif - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StackExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StackExtensions.cs deleted file mode 100644 index ab9ec71..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StackExtensions.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Collections.Generic; -#if DEBUG -using System.Linq; -#endif - -namespace Antlr.Runtime.JavaExtensions -{ - public static class StackExtensions - { -#if DEBUG - [Obsolete] - public static T elementAt( this Stack stack, int index ) - { - return stack.ElementAt( index ); - } - - [Obsolete] - public static T peek( this Stack stack ) - { - return stack.Peek(); - } - - [Obsolete] - public static T pop( this Stack stack ) - { - return stack.Pop(); - } - - [Obsolete] - public static void push( this Stack stack, T obj ) - { - stack.Push( obj ); - } - - [Obsolete] - public static int size( this Stack stack ) - { - return stack.Count; - } -#endif - - public static void setSize( this Stack stack, int size ) - { - if ( size > stack.Count ) - throw new ArgumentException(); - - while ( stack.Count > size ) - stack.Pop(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringBuilderExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringBuilderExtensions.cs deleted file mode 100644 index 6ef6f27..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringBuilderExtensions.cs +++ /dev/null @@ -1,75 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; - -using StringBuilder = System.Text.StringBuilder; - -#if DEBUG - -namespace Antlr.Runtime.JavaExtensions -{ - public static class StringBuilderExtensions - { - [Obsolete] - public static void append( this StringBuilder buffer, T value ) - { - buffer.Append( value ); - } - - [Obsolete] - public static char charAt( this StringBuilder buffer, int index ) - { - return buffer[index]; - } - - [Obsolete] - public static int length( this StringBuilder buffer ) - { - return buffer.Length; - } - - [Obsolete] - public static void setCharAt( this StringBuilder buffer, int index, char c ) - { - buffer[index] = c; - } - - [Obsolete] - public static void setLength( this StringBuilder buffer, int length ) - { - buffer.Length = length; - } - } -} - -#endif diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringExtensions.cs deleted file mode 100644 index 837908a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringExtensions.cs +++ /dev/null @@ -1,151 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -#if DEBUG -namespace Antlr.Runtime.JavaExtensions -{ - using ObsoleteAttribute = System.ObsoleteAttribute; - using Regex = System.Text.RegularExpressions.Regex; - using StringBuilder = System.Text.StringBuilder; - - public static class StringExtensions - { - [Obsolete] - public static char charAt( this string str, int index ) - { - return str[index]; - } - - [Obsolete] - public static bool endsWith( this string str, string value ) - { - return str.EndsWith( value ); - } - - [Obsolete] - public static int indexOf( this string str, char value ) - { - return str.IndexOf( value ); - } - - [Obsolete] - public static int indexOf( this string str, char value, int startIndex ) - { - return str.IndexOf( value, startIndex ); - } - - [Obsolete] - public static int indexOf( this string str, string value ) - { - return str.IndexOf( value ); - } - - [Obsolete] - public static int indexOf( this string str, string value, int startIndex ) - { - return str.IndexOf( value, startIndex ); - } - - [Obsolete] - public static int lastIndexOf( this string str, char value ) - { - return str.LastIndexOf( value ); - } - - [Obsolete] - public static int lastIndexOf( this string str, string value ) - { - return str.LastIndexOf( value ); - } - - [Obsolete] - public static int length( this string str ) - { - return str.Length; - } - - [Obsolete] - public static string replace(this string str, char oldValue, char newValue) - { - return str.Replace(oldValue, newValue); - } - - [Obsolete] - public static string replaceAll( this string str, string regex, string newValue ) - { - return Regex.Replace( str, regex, newValue ); - } - - [Obsolete] - public static string replaceFirst( this string str, string regex, string replacement ) - { - return Regex.Replace( str, regex, replacement ); - } - - [Obsolete] - public static bool startsWith( this string str, string value ) - { - return str.StartsWith( value ); - } - - [Obsolete] - public static string substring( this string str, int startOffset ) - { - return str.Substring( startOffset ); - } - - [Obsolete] - public static string substring(this string str, int startOffset, int endOffset) - { - return str.Substring( startOffset, endOffset - startOffset ); - } - - [Obsolete] - public static char[] toCharArray( this string str ) - { - return str.ToCharArray(); - } - - [Obsolete] - public static string toUpperCase( this string str ) - { - return str.ToUpperInvariant(); - } - - [Obsolete] - public static string trim( this string str ) - { - return str.Trim(); - } - } -} -#endif diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringTokenizer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringTokenizer.cs deleted file mode 100644 index 0145df5..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/StringTokenizer.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Linq; - -namespace Antlr.Runtime.JavaExtensions -{ - public class StringTokenizer - { - string[] _tokens; - int _current; - - public StringTokenizer( string str, string separator ) - : this( str, separator, false ) - { - } - public StringTokenizer( string str, string separator, bool returnDelims ) - { - _tokens = str.Split( separator.ToCharArray(), StringSplitOptions.None ); - if ( returnDelims ) - { - char[] delims = separator.ToCharArray(); - _tokens = _tokens.SelectMany( ( token, i ) => - { - if ( i == _tokens.Length - 1 ) - { - if ( delims.Contains( str[str.Length - 1] ) ) - return new string[0]; - else - return new string[] { token }; - } - else if ( i == 0 ) - { - if ( delims.Contains( str[0] ) ) - return new string[] { str[0].ToString() }; - else - return new string[] { token }; - } - else - { - return new string[] { token, str[_tokens.Take( i + 1 ).Select( t => t.Length + 1 ).Sum() - 1].ToString() }; - } - } ).ToArray(); - } - } - - public bool hasMoreTokens() - { - return _current < _tokens.Length; - } - - public string nextToken() - { - return _tokens[_current++]; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SubList.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SubList.cs deleted file mode 100644 index 97025bf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/SubList.cs +++ /dev/null @@ -1,423 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Collections; - -namespace Antlr.Runtime.JavaExtensions -{ - public class SubList - : IList - { - IList _source; - int _startIndex; - int _endIndex; - - public SubList( IList source, int startIndex, int endIndex ) - { - if ( source == null ) - throw new ArgumentNullException( "source" ); - if ( startIndex < 0 || endIndex < 0 ) - throw new ArgumentOutOfRangeException(); - if ( startIndex > endIndex || endIndex >= source.Count ) - throw new ArgumentException(); - - _source = source; - _startIndex = startIndex; - _endIndex = endIndex; - } - - #region IList Members - - public int Add( object value ) - { - throw new NotSupportedException(); - } - - public void Clear() - { - throw new NotSupportedException(); - } - - public bool Contains( object value ) - { - return _source - .Cast() - .Skip( _startIndex ) - .Take( _endIndex - _startIndex + 1 ) - .Contains( value ); - } - - public int IndexOf( object value ) - { - for ( int i = 0; i < Count; i++ ) - { - if ( object.Equals( this[i], value ) ) - return i; - } - - return -1; - } - - public void Insert( int index, object value ) - { - throw new NotSupportedException(); - } - - public bool IsFixedSize - { - get - { - return true; - } - } - - public bool IsReadOnly - { - get - { - return true; - } - } - - public void Remove( object value ) - { - throw new NotSupportedException(); - } - - public void RemoveAt( int index ) - { - throw new NotSupportedException(); - } - - public object this[int index] - { - get - { - if ( index < 0 || index >= Count ) - throw new ArgumentOutOfRangeException(); - - return _source[index + _startIndex]; - } - set - { - if ( index < 0 || index >= Count ) - throw new ArgumentOutOfRangeException(); - - _source[index + _startIndex] = value; - } - } - - #endregion - - #region ICollection Members - - public void CopyTo( Array array, int index ) - { - if ( array == null ) - throw new ArgumentNullException( "array" ); - - if ( index < 0 ) - throw new ArgumentOutOfRangeException(); - - if ( index + Count > array.Length ) - throw new ArgumentException(); - - for ( int i = 0; i < Count; i++ ) - { - array.SetValue( this[i], index + i ); - } - } - - public int Count - { - get - { - return _endIndex - _startIndex + 1; - } - } - - public bool IsSynchronized - { - get - { - return false; - } - } - - public object SyncRoot - { - get - { - return _source.SyncRoot; - } - } - - #endregion - - #region IEnumerable Members - - public System.Collections.IEnumerator GetEnumerator() - { - return _source.Cast() - .Skip( _startIndex ) - .Take( _endIndex - _startIndex + 1 ) - .GetEnumerator(); - } - - #endregion - } - - public class SubList : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable - { - IList _source; - int _startIndex; - int _endIndex; - - public SubList( IList source, int startIndex, int endIndex ) - { - if ( source == null ) - throw new ArgumentNullException( "source" ); - if ( startIndex < 0 || endIndex < 0 ) - throw new ArgumentOutOfRangeException(); - if ( startIndex > endIndex || endIndex >= source.Count ) - throw new ArgumentException(); - - _source = source; - _startIndex = startIndex; - _endIndex = endIndex; - } - - #region IEnumerable Members - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - #endregion - - #region ICollection Members - - void ICollection.CopyTo( Array array, int index ) - { - if ( array == null ) - throw new ArgumentNullException( "array" ); - - if ( index < 0 ) - throw new ArgumentOutOfRangeException(); - - if ( index + Count > array.Length ) - throw new ArgumentException(); - - for ( int i = 0; i < Count; i++ ) - { - array.SetValue( this[i], index + i ); - } - } - - public int Count - { - get - { - return _endIndex - _startIndex + 1; - } - } - - public bool IsSynchronized - { - get - { - ICollection sourceCollection = _source as ICollection; - if ( sourceCollection != null ) - return sourceCollection.IsSynchronized; - - return false; - } - } - - public object SyncRoot - { - get - { - ICollection sourceCollection = _source as ICollection; - if ( sourceCollection != null ) - return sourceCollection.SyncRoot; - - return _source; - } - } - - #endregion - - #region IList Members - - int IList.Add( object value ) - { - throw new NotSupportedException(); - } - - void IList.Clear() - { - throw new NotSupportedException(); - } - - public bool Contains( object value ) - { - return _source.Cast().Skip( _startIndex ).Take( Count ).Contains( value ); - } - - public int IndexOf( object value ) - { - for ( int i = _startIndex; i <= _endIndex; i++ ) - { - if ( object.Equals( _source[i], value ) ) - return i - _startIndex; - } - - return -1; - } - - void IList.Insert( int index, object value ) - { - throw new NotSupportedException(); - } - - public bool IsFixedSize - { - get - { - var sourceCollection = _source as IList; - if ( sourceCollection != null ) - return sourceCollection.IsFixedSize; - - return false; - } - } - - public bool IsReadOnly - { - get - { - return true; - } - } - - void IList.Remove( object value ) - { - throw new NotSupportedException(); - } - - void IList.RemoveAt( int index ) - { - throw new NotSupportedException(); - } - - object IList.this[int index] - { - get - { - return this[index]; - } - set - { - this[index] = (T)value; - } - } - - #endregion - - #region IEnumerable Members - - public IEnumerator GetEnumerator() - { - return _source.Skip( _startIndex ).Take( Count ).GetEnumerator(); - } - - #endregion - - #region ICollection Members - - void ICollection.Add( T item ) - { - throw new NotSupportedException(); - } - - void ICollection.Clear() - { - throw new NotSupportedException(); - } - - public bool Contains( T item ) - { - return _source.Skip( _startIndex ).Take( Count ).Contains( item ); - } - - public void CopyTo( T[] array, int arrayIndex ) - { - if ( array == null ) - throw new ArgumentNullException( "array" ); - - if ( arrayIndex < 0 ) - throw new ArgumentOutOfRangeException(); - - if ( arrayIndex + Count > array.Length ) - throw new ArgumentException(); - - for ( int i = 0; i < Count; i++ ) - { - array[arrayIndex + i] = this[i]; - } - } - - bool ICollection.Remove( T item ) - { - throw new NotSupportedException(); - } - - #endregion - - #region IList Members - - public int IndexOf( T item ) - { - for ( int i = 0; i < Count; i++ ) - { - if ( object.Equals( this[i], item ) ) - return i; - } - - return -1; - } - - void IList.Insert( int index, T item ) - { - throw new NotSupportedException(); - } - - void IList.RemoveAt( int index ) - { - throw new NotSupportedException(); - } - - public T this[int index] - { - get - { - if ( index < 0 || index >= Count ) - throw new ArgumentOutOfRangeException(); - - return _source[index + _startIndex]; - } - set - { - if ( index < 0 || index >= Count ) - throw new ArgumentOutOfRangeException(); - - _source[index + _startIndex] = value; - } - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TreeExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TreeExtensions.cs deleted file mode 100644 index 6f7182f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TreeExtensions.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using ITree = Antlr.Runtime.Tree.ITree; - -namespace Antlr.Runtime.JavaExtensions -{ - public static class TreeExtensions - { - public static ITree getNextSibling( this ITree tree ) - { - return tree.Parent.GetChild( tree.ChildIndex + 1 ); - //throw new NotImplementedException(); - } - - public static void setFirstChild( this ITree tree, ITree child ) - { - if ( tree.ChildCount == 0 ) - tree.AddChild( child ); - else - tree.SetChild( 0, child ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TypeExtensions.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TypeExtensions.cs deleted file mode 100644 index 42c0368..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/TypeExtensions.cs +++ /dev/null @@ -1,102 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Reflection; - -#if DEBUG - -namespace Antlr.Runtime.JavaExtensions -{ - public static class TypeExtensions - { - [Obsolete] - public static object get( this FieldInfo field, object obj ) - { - return field.GetValue( obj ); - } - - [Obsolete] - public static Type getComponentType( this Type type ) - { - return type.GetElementType(); - } - - [Obsolete] - public static ConstructorInfo getConstructor( this Type type, Type[] argumentTypes ) - { - return type.GetConstructor( argumentTypes ); - } - - [Obsolete] - public static FieldInfo getField( this Type type, string name ) - { - FieldInfo field = type.GetField( name ); - if ( field == null ) - throw new TargetException(); - - return field; - } - - [Obsolete] - public static string getName( this Type type ) - { - return type.Name; - } - - [Obsolete] - public static object invoke( this MethodInfo method, object obj, params object[] parameters ) - { - return method.Invoke( obj, parameters ); - } - - [Obsolete] - public static bool isArray( this Type type ) - { - return type.IsArray; - } - - [Obsolete] - public static bool isPrimitive( this Type type ) - { - return type.IsPrimitive; - } - - [Obsolete] - public static object newInstance( this Type type ) - { - return type.GetConstructor( new Type[0] ).Invoke( new object[0] ); - } - } -} - -#endif diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj deleted file mode 100644 index 75c4cac..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj +++ /dev/null @@ -1,187 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {19B965DE-5100-4064-A580-159644F6980E} - Library - Properties - Antlr3.Runtime.Test - Antlr3.Runtime.Test - v4.0 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - 3.5 - - - - - - {B5910BE2-DE21-4AA9-95C1-486F42B9E794} - Antlr3.StringTemplate - - - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B} - Antlr3.Runtime.Debug - - - {A7EEC557-EB14-451C-9616-B7A61F4ECE69} - Antlr3.Runtime.JavaExtensions - - - {8FDC0A87-9005-4D5A-AB75-E55CEB575559} - Antlr3.Runtime - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - - - MSBuild:Compile - - - - - - - - PreprocessorLexer.g3 - - - - - SemanticPredicateReduction.g3 - - - SemanticPredicateReduction.g3 - - - SimpleExpression.g3 - - - SimpleExpression.g3 - - - FastSimpleExpression.g3 - - - FastSimpleExpression.g3 - - - DebugGrammar.g3 - - - DebugGrammar.g3 - - - DebugTreeGrammar.g3 - - - - - - - - - - - - StringTemplateOutput.g3 - - - StringTemplateOutput.g3 - - - SynpredTreeParser.g3 - - - TestActionFeatures.g3 - - - TestActionFeatures.g3 - - - - TestExpressionFeatures.g3 - - - TestExpressionFeatures.g3 - - - - - - - - - ProfileGrammar.g3 - - - ProfileGrammar.g3 - - - - - - - - - ProfileTreeGrammar.g3 - - - - - - $(ProjectDir)..\..\..\..\..\..\bin\Bootstrap - - $(ProjectDir)..\..\..\..\..\..\bin\Bootstrap\Antlr3.exe - - - - \ No newline at end of file diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc deleted file mode 100644 index 162a4c7..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "relative:antlr\\main\\runtime\\CSharp3\\Sources\\Antlr3.Runtime.Test" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 deleted file mode 100644 index 6edb6d3..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 +++ /dev/null @@ -1,103 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar DebugGrammar; - -options -{ - language=CSharp3; - output=AST; - ASTLabelType=CommonTree; -} - -tokens -{ - // define pseudo-operations - FUNC; - CALL; -} - -@lexer::namespace{Antlr3.Runtime.Test.BuildOptions} -@parser::namespace{Antlr3.Runtime.Test.BuildOptions} - -// START:stat -prog: ( stat )* - ; - -stat: expr NEWLINE -> expr - | ID '=' expr NEWLINE -> ^('=' ID expr) - | func NEWLINE -> func - | NEWLINE -> // ignore - ; - -func: ID '(' formalPar ')' '=' expr -> ^(FUNC ID formalPar expr) - ; - finally { - functionDefinitions.Add($func.tree); - } - -formalPar - : ID - | INT - ; - -// END:stat - -// START:expr -expr: multExpr (('+'^|'-'^) multExpr)* - ; - -multExpr - : atom (('*'|'/'|'%')^ atom)* - ; - -atom: INT - | ID - | '(' expr ')' -> expr - | ID '(' expr ')' -> ^(CALL ID expr) - ; -// END:expr - -// START:tokens -ID : ('a'..'z'|'A'..'Z')+ - ; - -INT : '0'..'9'+ - ; - -NEWLINE - : '\r'? '\n' - ; - -WS : (' '|'\t')+ { Skip(); } - ; -// END:tokens diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs deleted file mode 100644 index ab2235e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs +++ /dev/null @@ -1,693 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\DebugGrammar.g3 2009-09-30 13:18:14 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -using System.Collections.Generic; -using Antlr.Runtime; -using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class DebugGrammarLexer : Lexer -{ - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public DebugGrammarLexer() {} - public DebugGrammarLexer( ICharStream input ) - : this( input, new RecognizerSharedState() ) - { - } - public DebugGrammarLexer( ICharStream input, RecognizerSharedState state ) - : base( input, state ) - { - - } - public override string GrammarFileName { get { return "BuildOptions\\DebugGrammar.g3"; } } - - // $ANTLR start "T__10" - private void mT__10() - { - try - { - int _type = T__10; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:7:9: ( '-' ) - // BuildOptions\\DebugGrammar.g3:7:9: '-' - { - Match('-'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__10" - - // $ANTLR start "T__11" - private void mT__11() - { - try - { - int _type = T__11; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:8:9: ( '%' ) - // BuildOptions\\DebugGrammar.g3:8:9: '%' - { - Match('%'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__11" - - // $ANTLR start "T__12" - private void mT__12() - { - try - { - int _type = T__12; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:9:9: ( '(' ) - // BuildOptions\\DebugGrammar.g3:9:9: '(' - { - Match('('); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__12" - - // $ANTLR start "T__13" - private void mT__13() - { - try - { - int _type = T__13; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:10:9: ( ')' ) - // BuildOptions\\DebugGrammar.g3:10:9: ')' - { - Match(')'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__13" - - // $ANTLR start "T__14" - private void mT__14() - { - try - { - int _type = T__14; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:11:9: ( '*' ) - // BuildOptions\\DebugGrammar.g3:11:9: '*' - { - Match('*'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__14" - - // $ANTLR start "T__15" - private void mT__15() - { - try - { - int _type = T__15; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:12:9: ( '/' ) - // BuildOptions\\DebugGrammar.g3:12:9: '/' - { - Match('/'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__15" - - // $ANTLR start "T__16" - private void mT__16() - { - try - { - int _type = T__16; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:13:9: ( '+' ) - // BuildOptions\\DebugGrammar.g3:13:9: '+' - { - Match('+'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__16" - - // $ANTLR start "T__17" - private void mT__17() - { - try - { - int _type = T__17; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:14:9: ( '=' ) - // BuildOptions\\DebugGrammar.g3:14:9: '=' - { - Match('='); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__17" - - // $ANTLR start "ID" - private void mID() - { - try - { - int _type = ID; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:88:9: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ ) - // BuildOptions\\DebugGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ - { - // BuildOptions\\DebugGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ - int cnt1=0; - for ( ; ; ) - { - int alt1=2; - int LA1_0 = input.LA(1); - - if ( ((LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) - { - alt1=1; - } - - - switch ( alt1 ) - { - case 1: - // BuildOptions\\DebugGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt1 >= 1 ) - goto loop1; - - EarlyExitException eee1 = new EarlyExitException( 1, input ); - throw eee1; - } - cnt1++; - } - loop1: - ; - - - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "ID" - - // $ANTLR start "INT" - private void mINT() - { - try - { - int _type = INT; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:91:9: ( ( '0' .. '9' )+ ) - // BuildOptions\\DebugGrammar.g3:91:9: ( '0' .. '9' )+ - { - // BuildOptions\\DebugGrammar.g3:91:9: ( '0' .. '9' )+ - int cnt2=0; - for ( ; ; ) - { - int alt2=2; - int LA2_0 = input.LA(1); - - if ( ((LA2_0>='0' && LA2_0<='9')) ) - { - alt2=1; - } - - - switch ( alt2 ) - { - case 1: - // BuildOptions\\DebugGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt2 >= 1 ) - goto loop2; - - EarlyExitException eee2 = new EarlyExitException( 2, input ); - throw eee2; - } - cnt2++; - } - loop2: - ; - - - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "INT" - - // $ANTLR start "NEWLINE" - private void mNEWLINE() - { - try - { - int _type = NEWLINE; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:95:7: ( ( '\\r' )? '\\n' ) - // BuildOptions\\DebugGrammar.g3:95:7: ( '\\r' )? '\\n' - { - // BuildOptions\\DebugGrammar.g3:95:7: ( '\\r' )? - int alt3=2; - int LA3_0 = input.LA(1); - - if ( (LA3_0=='\r') ) - { - alt3=1; - } - switch ( alt3 ) - { - case 1: - // BuildOptions\\DebugGrammar.g3:95:0: '\\r' - { - Match('\r'); - - } - break; - - } - - Match('\n'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "NEWLINE" - - // $ANTLR start "WS" - private void mWS() - { - try - { - int _type = WS; - int _channel = DefaultTokenChannel; - // BuildOptions\\DebugGrammar.g3:98:9: ( ( ' ' | '\\t' )+ ) - // BuildOptions\\DebugGrammar.g3:98:9: ( ' ' | '\\t' )+ - { - // BuildOptions\\DebugGrammar.g3:98:9: ( ' ' | '\\t' )+ - int cnt4=0; - for ( ; ; ) - { - int alt4=2; - int LA4_0 = input.LA(1); - - if ( (LA4_0=='\t'||LA4_0==' ') ) - { - alt4=1; - } - - - switch ( alt4 ) - { - case 1: - // BuildOptions\\DebugGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt4 >= 1 ) - goto loop4; - - EarlyExitException eee4 = new EarlyExitException( 4, input ); - throw eee4; - } - cnt4++; - } - loop4: - ; - - - Skip(); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "WS" - - public override void mTokens() - { - // BuildOptions\\DebugGrammar.g3:1:10: ( T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | ID | INT | NEWLINE | WS ) - int alt5=12; - switch ( input.LA(1) ) - { - case '-': - { - alt5=1; - } - break; - case '%': - { - alt5=2; - } - break; - case '(': - { - alt5=3; - } - break; - case ')': - { - alt5=4; - } - break; - case '*': - { - alt5=5; - } - break; - case '/': - { - alt5=6; - } - break; - case '+': - { - alt5=7; - } - break; - case '=': - { - alt5=8; - } - break; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': - { - alt5=9; - } - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - alt5=10; - } - break; - case '\n': - case '\r': - { - alt5=11; - } - break; - case '\t': - case ' ': - { - alt5=12; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 5, 0, input); - - throw nvae; - } - } - - switch ( alt5 ) - { - case 1: - // BuildOptions\\DebugGrammar.g3:1:10: T__10 - { - mT__10(); - - } - break; - case 2: - // BuildOptions\\DebugGrammar.g3:1:16: T__11 - { - mT__11(); - - } - break; - case 3: - // BuildOptions\\DebugGrammar.g3:1:22: T__12 - { - mT__12(); - - } - break; - case 4: - // BuildOptions\\DebugGrammar.g3:1:28: T__13 - { - mT__13(); - - } - break; - case 5: - // BuildOptions\\DebugGrammar.g3:1:34: T__14 - { - mT__14(); - - } - break; - case 6: - // BuildOptions\\DebugGrammar.g3:1:40: T__15 - { - mT__15(); - - } - break; - case 7: - // BuildOptions\\DebugGrammar.g3:1:46: T__16 - { - mT__16(); - - } - break; - case 8: - // BuildOptions\\DebugGrammar.g3:1:52: T__17 - { - mT__17(); - - } - break; - case 9: - // BuildOptions\\DebugGrammar.g3:1:58: ID - { - mID(); - - } - break; - case 10: - // BuildOptions\\DebugGrammar.g3:1:61: INT - { - mINT(); - - } - break; - case 11: - // BuildOptions\\DebugGrammar.g3:1:65: NEWLINE - { - mNEWLINE(); - - } - break; - case 12: - // BuildOptions\\DebugGrammar.g3:1:73: WS - { - mWS(); - - } - break; - - } - - } - - - #region DFA - - protected override void InitDFAs() - { - base.InitDFAs(); - } - - - #endregion - -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs deleted file mode 100644 index 7271295..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs deleted file mode 100644 index 7274b21..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs +++ /dev/null @@ -1,1556 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\DebugGrammar.g3 2009-09-30 13:18:13 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -using System.Collections.Generic; -using Antlr.Runtime; -using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -using Antlr.Runtime.Debug; -using IOException = System.IO.IOException; - -using Antlr.Runtime.Tree; -using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream; - -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class DebugGrammarParser : DebugParser -{ - internal static readonly string[] tokenNames = new string[] { - "", "", "", "", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" - }; - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public static readonly string[] ruleNames = - new string[] - { - "invalidRule", "atom", "expr", "formalPar", "func", "multExpr", "prog", - "stat" - }; - - int ruleLevel = 0; - public virtual int RuleLevel { get { return ruleLevel; } } - public virtual void IncRuleLevel() { ruleLevel++; } - public virtual void DecRuleLevel() { ruleLevel--; } - public DebugGrammarParser( ITokenStream input ) - : this( input, DebugEventSocketProxy.DefaultDebuggerPort, new RecognizerSharedState() ) - { - } - public DebugGrammarParser( ITokenStream input, int port, RecognizerSharedState state ) - : base( input, state ) - { - InitializeTreeAdaptor(); - if ( TreeAdaptor == null ) - TreeAdaptor = new CommonTreeAdaptor(); - DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, adaptor ); - DebugListener = proxy; - TokenStream = new DebugTokenStream( input, proxy ); - try - { - proxy.Handshake(); - } - catch ( IOException ioe ) - { - ReportError( ioe ); - } - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - proxy.TreeAdaptor = adap; - } - public DebugGrammarParser( ITokenStream input, IDebugEventListener dbg ) - : base( input, dbg ) - { - InitializeTreeAdaptor(); - if ( TreeAdaptor == null ) - TreeAdaptor = new CommonTreeAdaptor(); - - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - - } - protected virtual bool EvalPredicate( bool result, string predicate ) - { - dbg.SemanticPredicate( result, predicate ); - return result; - } - - // Implement this function in your helper file to use a custom tree adaptor - partial void InitializeTreeAdaptor(); - protected DebugTreeAdaptor adaptor; - - public ITreeAdaptor TreeAdaptor - { - get - { - return adaptor; - } - set - { - this.adaptor = new DebugTreeAdaptor(dbg,adaptor); - - } - } - - - public override string[] TokenNames { get { return DebugGrammarParser.tokenNames; } } - public override string GrammarFileName { get { return "BuildOptions\\DebugGrammar.g3"; } } - - - #region Rules - public class prog_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "prog" - // BuildOptions\\DebugGrammar.g3:50:0: prog : ( stat )* ; - private DebugGrammarParser.prog_return prog( ) - { - DebugGrammarParser.prog_return retval = new DebugGrammarParser.prog_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - DebugGrammarParser.stat_return stat1 = default(DebugGrammarParser.stat_return); - - - try - { - dbg.EnterRule( GrammarFileName, "prog" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 50, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:50:7: ( ( stat )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:50:7: ( stat )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 50, 6 ); - // BuildOptions\\DebugGrammar.g3:50:7: ( stat )* - try - { - dbg.EnterSubRule( 1 ); - - for ( ; ; ) - { - int alt1=2; - try - { - dbg.EnterDecision( 1 ); - - int LA1_0 = input.LA(1); - - if ( ((LA1_0>=ID && LA1_0<=NEWLINE)||LA1_0==12) ) - { - alt1=1; - } - - - } - finally - { - dbg.ExitDecision( 1 ); - } - - switch ( alt1 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:50:9: stat - { - dbg.Location( 50, 8 ); - PushFollow(Follow._stat_in_prog53); - stat1=stat(); - - state._fsp--; - - adaptor.AddChild(root_0, stat1.Tree); - - } - break; - - default: - goto loop1; - } - } - - loop1: - ; - - } - finally - { - dbg.ExitSubRule( 1 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(51, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "prog" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "prog" - - public class stat_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "stat" - // BuildOptions\\DebugGrammar.g3:53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->); - private DebugGrammarParser.stat_return stat( ) - { - DebugGrammarParser.stat_return retval = new DebugGrammarParser.stat_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken NEWLINE3=null; - IToken ID4=null; - IToken char_literal5=null; - IToken NEWLINE7=null; - IToken NEWLINE9=null; - IToken NEWLINE10=null; - DebugGrammarParser.expr_return expr2 = default(DebugGrammarParser.expr_return); - DebugGrammarParser.expr_return expr6 = default(DebugGrammarParser.expr_return); - DebugGrammarParser.func_return func8 = default(DebugGrammarParser.func_return); - - CommonTree NEWLINE3_tree=null; - CommonTree ID4_tree=null; - CommonTree char_literal5_tree=null; - CommonTree NEWLINE7_tree=null; - CommonTree NEWLINE9_tree=null; - CommonTree NEWLINE10_tree=null; - RewriteRuleITokenStream stream_NEWLINE=new RewriteRuleITokenStream(adaptor,"token NEWLINE"); - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - RewriteRuleSubtreeStream stream_func=new RewriteRuleSubtreeStream(adaptor,"rule func"); - try - { - dbg.EnterRule( GrammarFileName, "stat" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 53, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:53:9: ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->) - int alt2=4; - try - { - dbg.EnterDecision( 2 ); - - try - { - isCyclicDecision = true; - alt2 = dfa2.Predict(input); - } - catch ( NoViableAltException nvae ) - { - dbg.RecognitionException( nvae ); - throw nvae; - } - } - finally - { - dbg.ExitDecision( 2 ); - } - - switch ( alt2 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:53:9: expr NEWLINE - { - dbg.Location( 53, 8 ); - PushFollow(Follow._expr_in_stat70); - expr2=expr(); - - state._fsp--; - - stream_expr.Add(expr2.Tree); - dbg.Location( 53, 13 ); - NEWLINE3=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat72); - stream_NEWLINE.Add(NEWLINE3); - - - - { - // AST REWRITE - // elements: expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 53:41: -> expr - { - dbg.Location( 53, 43 ); - adaptor.AddChild(root_0, stream_expr.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\DebugGrammar.g3:54:9: ID '=' expr NEWLINE - { - dbg.Location( 54, 8 ); - ID4=(IToken)Match(input,ID,Follow._ID_in_stat105); - stream_ID.Add(ID4); - - dbg.Location( 54, 11 ); - char_literal5=(IToken)Match(input,17,Follow._17_in_stat107); - stream_17.Add(char_literal5); - - dbg.Location( 54, 15 ); - PushFollow(Follow._expr_in_stat109); - expr6=expr(); - - state._fsp--; - - stream_expr.Add(expr6.Tree); - dbg.Location( 54, 20 ); - NEWLINE7=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat111); - stream_NEWLINE.Add(NEWLINE7); - - - - { - // AST REWRITE - // elements: 17, ID, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 54:41: -> ^( '=' ID expr ) - { - dbg.Location( 54, 43 ); - // BuildOptions\\DebugGrammar.g3:54:44: ^( '=' ID expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 54, 45 ); - root_1 = (CommonTree)adaptor.BecomeRoot(stream_17.NextNode(), root_1); - - dbg.Location( 54, 49 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 54, 52 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\DebugGrammar.g3:55:9: func NEWLINE - { - dbg.Location( 55, 8 ); - PushFollow(Follow._func_in_stat143); - func8=func(); - - state._fsp--; - - stream_func.Add(func8.Tree); - dbg.Location( 55, 13 ); - NEWLINE9=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat145); - stream_NEWLINE.Add(NEWLINE9); - - - - { - // AST REWRITE - // elements: func - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 55:41: -> func - { - dbg.Location( 55, 43 ); - adaptor.AddChild(root_0, stream_func.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\DebugGrammar.g3:56:9: NEWLINE - { - dbg.Location( 56, 8 ); - NEWLINE10=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat178); - stream_NEWLINE.Add(NEWLINE10); - - - - { - // AST REWRITE - // elements: - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 56:41: -> - { - dbg.Location( 57, 4 ); - root_0 = null; - } - - retval.tree = root_0; - } - - } - break; - - } - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(57, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "stat" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "stat" - - public class func_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "func" - // BuildOptions\\DebugGrammar.g3:59:0: func : ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ; - private DebugGrammarParser.func_return func( ) - { - DebugGrammarParser.func_return retval = new DebugGrammarParser.func_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken ID11=null; - IToken char_literal12=null; - IToken char_literal14=null; - IToken char_literal15=null; - DebugGrammarParser.formalPar_return formalPar13 = default(DebugGrammarParser.formalPar_return); - DebugGrammarParser.expr_return expr16 = default(DebugGrammarParser.expr_return); - - CommonTree ID11_tree=null; - CommonTree char_literal12_tree=null; - CommonTree char_literal14_tree=null; - CommonTree char_literal15_tree=null; - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); - RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); - RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); - RewriteRuleSubtreeStream stream_formalPar=new RewriteRuleSubtreeStream(adaptor,"rule formalPar"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - try - { - dbg.EnterRule( GrammarFileName, "func" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 59, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:59:9: ( ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:59:9: ID '(' formalPar ')' '=' expr - { - dbg.Location( 59, 8 ); - ID11=(IToken)Match(input,ID,Follow._ID_in_func219); - stream_ID.Add(ID11); - - dbg.Location( 59, 12 ); - char_literal12=(IToken)Match(input,12,Follow._12_in_func222); - stream_12.Add(char_literal12); - - dbg.Location( 59, 16 ); - PushFollow(Follow._formalPar_in_func224); - formalPar13=formalPar(); - - state._fsp--; - - stream_formalPar.Add(formalPar13.Tree); - dbg.Location( 59, 26 ); - char_literal14=(IToken)Match(input,13,Follow._13_in_func226); - stream_13.Add(char_literal14); - - dbg.Location( 59, 30 ); - char_literal15=(IToken)Match(input,17,Follow._17_in_func228); - stream_17.Add(char_literal15); - - dbg.Location( 59, 34 ); - PushFollow(Follow._expr_in_func230); - expr16=expr(); - - state._fsp--; - - stream_expr.Add(expr16.Tree); - - - { - // AST REWRITE - // elements: ID, formalPar, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 59:41: -> ^( FUNC ID formalPar expr ) - { - dbg.Location( 59, 43 ); - // BuildOptions\\DebugGrammar.g3:59:44: ^( FUNC ID formalPar expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 59, 45 ); - root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNC, "FUNC"), root_1); - - dbg.Location( 59, 50 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 59, 53 ); - adaptor.AddChild(root_1, stream_formalPar.NextTree()); - dbg.Location( 59, 63 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - - functionDefinitions.Add(((CommonTree)retval.Tree)); - - } - dbg.Location(60, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "func" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "func" - - public class formalPar_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "formalPar" - // BuildOptions\\DebugGrammar.g3:65:0: formalPar : ( ID | INT ); - private DebugGrammarParser.formalPar_return formalPar( ) - { - DebugGrammarParser.formalPar_return retval = new DebugGrammarParser.formalPar_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken set17=null; - - CommonTree set17_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "formalPar" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 65, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:66:9: ( ID | INT ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3: - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 66, 8 ); - set17=(IToken)input.LT(1); - if ( (input.LA(1)>=ID && input.LA(1)<=INT) ) - { - input.Consume(); - adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set17)); - state.errorRecovery=false; - } - else - { - MismatchedSetException mse = new MismatchedSetException(null,input); - dbg.RecognitionException( mse ); - throw mse; - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(68, 1); - - } - finally - { - dbg.ExitRule( GrammarFileName, "formalPar" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "formalPar" - - public class expr_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "expr" - // BuildOptions\\DebugGrammar.g3:73:0: expr : multExpr ( ( '+' | '-' ) multExpr )* ; - private DebugGrammarParser.expr_return expr( ) - { - DebugGrammarParser.expr_return retval = new DebugGrammarParser.expr_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken char_literal19=null; - IToken char_literal20=null; - DebugGrammarParser.multExpr_return multExpr18 = default(DebugGrammarParser.multExpr_return); - DebugGrammarParser.multExpr_return multExpr21 = default(DebugGrammarParser.multExpr_return); - - CommonTree char_literal19_tree=null; - CommonTree char_literal20_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "expr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 73, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:73:9: ( multExpr ( ( '+' | '-' ) multExpr )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:73:9: multExpr ( ( '+' | '-' ) multExpr )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 73, 8 ); - PushFollow(Follow._multExpr_in_expr288); - multExpr18=multExpr(); - - state._fsp--; - - adaptor.AddChild(root_0, multExpr18.Tree); - dbg.Location( 73, 17 ); - // BuildOptions\\DebugGrammar.g3:73:18: ( ( '+' | '-' ) multExpr )* - try - { - dbg.EnterSubRule( 4 ); - - for ( ; ; ) - { - int alt4=2; - try - { - dbg.EnterDecision( 4 ); - - int LA4_0 = input.LA(1); - - if ( (LA4_0==10||LA4_0==16) ) - { - alt4=1; - } - - - } - finally - { - dbg.ExitDecision( 4 ); - } - - switch ( alt4 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:73:19: ( '+' | '-' ) multExpr - { - dbg.Location( 73, 18 ); - // BuildOptions\\DebugGrammar.g3:73:19: ( '+' | '-' ) - int alt3=2; - try - { - dbg.EnterSubRule( 3 ); - try - { - dbg.EnterDecision( 3 ); - - int LA3_0 = input.LA(1); - - if ( (LA3_0==16) ) - { - alt3=1; - } - else if ( (LA3_0==10) ) - { - alt3=2; - } - else - { - NoViableAltException nvae = new NoViableAltException("", 3, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - finally - { - dbg.ExitDecision( 3 ); - } - - switch ( alt3 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:73:20: '+' - { - dbg.Location( 73, 22 ); - char_literal19=(IToken)Match(input,16,Follow._16_in_expr292); - char_literal19_tree = (CommonTree)adaptor.Create(char_literal19); - root_0 = (CommonTree)adaptor.BecomeRoot(char_literal19_tree, root_0); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\DebugGrammar.g3:73:25: '-' - { - dbg.Location( 73, 27 ); - char_literal20=(IToken)Match(input,10,Follow._10_in_expr295); - char_literal20_tree = (CommonTree)adaptor.Create(char_literal20); - root_0 = (CommonTree)adaptor.BecomeRoot(char_literal20_tree, root_0); - - - } - break; - - } - } - finally - { - dbg.ExitSubRule( 3 ); - } - - dbg.Location( 73, 30 ); - PushFollow(Follow._multExpr_in_expr299); - multExpr21=multExpr(); - - state._fsp--; - - adaptor.AddChild(root_0, multExpr21.Tree); - - } - break; - - default: - goto loop4; - } - } - - loop4: - ; - - } - finally - { - dbg.ExitSubRule( 4 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(74, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "expr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "expr" - - public class multExpr_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "multExpr" - // BuildOptions\\DebugGrammar.g3:76:0: multExpr : atom ( ( '*' | '/' | '%' ) atom )* ; - private DebugGrammarParser.multExpr_return multExpr( ) - { - DebugGrammarParser.multExpr_return retval = new DebugGrammarParser.multExpr_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken set23=null; - DebugGrammarParser.atom_return atom22 = default(DebugGrammarParser.atom_return); - DebugGrammarParser.atom_return atom24 = default(DebugGrammarParser.atom_return); - - CommonTree set23_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "multExpr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 76, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:77:9: ( atom ( ( '*' | '/' | '%' ) atom )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:77:9: atom ( ( '*' | '/' | '%' ) atom )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 77, 8 ); - PushFollow(Follow._atom_in_multExpr320); - atom22=atom(); - - state._fsp--; - - adaptor.AddChild(root_0, atom22.Tree); - dbg.Location( 77, 13 ); - // BuildOptions\\DebugGrammar.g3:77:14: ( ( '*' | '/' | '%' ) atom )* - try - { - dbg.EnterSubRule( 5 ); - - for ( ; ; ) - { - int alt5=2; - try - { - dbg.EnterDecision( 5 ); - - int LA5_0 = input.LA(1); - - if ( (LA5_0==11||(LA5_0>=14 && LA5_0<=15)) ) - { - alt5=1; - } - - - } - finally - { - dbg.ExitDecision( 5 ); - } - - switch ( alt5 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:77:15: ( '*' | '/' | '%' ) atom - { - dbg.Location( 77, 27 ); - set23=(IToken)input.LT(1); - set23=(IToken)input.LT(1); - if ( input.LA(1)==11||(input.LA(1)>=14 && input.LA(1)<=15) ) - { - input.Consume(); - root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set23), root_0); - state.errorRecovery=false; - } - else - { - MismatchedSetException mse = new MismatchedSetException(null,input); - dbg.RecognitionException( mse ); - throw mse; - } - - dbg.Location( 77, 29 ); - PushFollow(Follow._atom_in_multExpr332); - atom24=atom(); - - state._fsp--; - - adaptor.AddChild(root_0, atom24.Tree); - - } - break; - - default: - goto loop5; - } - } - - loop5: - ; - - } - finally - { - dbg.ExitSubRule( 5 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(78, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "multExpr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "multExpr" - - public class atom_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "atom" - // BuildOptions\\DebugGrammar.g3:80:0: atom : ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ); - private DebugGrammarParser.atom_return atom( ) - { - DebugGrammarParser.atom_return retval = new DebugGrammarParser.atom_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken INT25=null; - IToken ID26=null; - IToken char_literal27=null; - IToken char_literal29=null; - IToken ID30=null; - IToken char_literal31=null; - IToken char_literal33=null; - DebugGrammarParser.expr_return expr28 = default(DebugGrammarParser.expr_return); - DebugGrammarParser.expr_return expr32 = default(DebugGrammarParser.expr_return); - - CommonTree INT25_tree=null; - CommonTree ID26_tree=null; - CommonTree char_literal27_tree=null; - CommonTree char_literal29_tree=null; - CommonTree ID30_tree=null; - CommonTree char_literal31_tree=null; - CommonTree char_literal33_tree=null; - RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); - RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - try - { - dbg.EnterRule( GrammarFileName, "atom" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 80, -1 ); - - try - { - // BuildOptions\\DebugGrammar.g3:80:9: ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ) - int alt6=4; - try - { - dbg.EnterDecision( 6 ); - - switch ( input.LA(1) ) - { - case INT: - { - alt6=1; - } - break; - case ID: - { - int LA6_2 = input.LA(2); - - if ( (LA6_2==12) ) - { - alt6=4; - } - else if ( (LA6_2==NEWLINE||(LA6_2>=10 && LA6_2<=11)||(LA6_2>=13 && LA6_2<=16)) ) - { - alt6=2; - } - else - { - NoViableAltException nvae = new NoViableAltException("", 6, 2, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - break; - case 12: - { - alt6=3; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 6, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 6 ); - } - - switch ( alt6 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugGrammar.g3:80:9: INT - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 80, 8 ); - INT25=(IToken)Match(input,INT,Follow._INT_in_atom348); - INT25_tree = (CommonTree)adaptor.Create(INT25); - adaptor.AddChild(root_0, INT25_tree); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\DebugGrammar.g3:81:9: ID - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 81, 8 ); - ID26=(IToken)Match(input,ID,Follow._ID_in_atom358); - ID26_tree = (CommonTree)adaptor.Create(ID26); - adaptor.AddChild(root_0, ID26_tree); - - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\DebugGrammar.g3:82:9: '(' expr ')' - { - dbg.Location( 82, 8 ); - char_literal27=(IToken)Match(input,12,Follow._12_in_atom368); - stream_12.Add(char_literal27); - - dbg.Location( 82, 12 ); - PushFollow(Follow._expr_in_atom370); - expr28=expr(); - - state._fsp--; - - stream_expr.Add(expr28.Tree); - dbg.Location( 82, 17 ); - char_literal29=(IToken)Match(input,13,Follow._13_in_atom372); - stream_13.Add(char_literal29); - - - - { - // AST REWRITE - // elements: expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 82:25: -> expr - { - dbg.Location( 82, 27 ); - adaptor.AddChild(root_0, stream_expr.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\DebugGrammar.g3:83:9: ID '(' expr ')' - { - dbg.Location( 83, 8 ); - ID30=(IToken)Match(input,ID,Follow._ID_in_atom389); - stream_ID.Add(ID30); - - dbg.Location( 83, 11 ); - char_literal31=(IToken)Match(input,12,Follow._12_in_atom391); - stream_12.Add(char_literal31); - - dbg.Location( 83, 15 ); - PushFollow(Follow._expr_in_atom393); - expr32=expr(); - - state._fsp--; - - stream_expr.Add(expr32.Tree); - dbg.Location( 83, 20 ); - char_literal33=(IToken)Match(input,13,Follow._13_in_atom395); - stream_13.Add(char_literal33); - - - - { - // AST REWRITE - // elements: ID, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 83:25: -> ^( CALL ID expr ) - { - dbg.Location( 83, 27 ); - // BuildOptions\\DebugGrammar.g3:83:28: ^( CALL ID expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 83, 29 ); - root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(CALL, "CALL"), root_1); - - dbg.Location( 83, 34 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 83, 37 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - break; - - } - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(84, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "atom" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "atom" - #endregion Rules - - - #region DFA - DFA2 dfa2; - - protected override void InitDFAs() - { - base.InitDFAs(); - dfa2 = new DFA2( this ); - } - - class DFA2 : DFA - { - - const string DFA2_eotS = - "\xA\xFFFF"; - const string DFA2_eofS = - "\xA\xFFFF"; - const string DFA2_minS = - "\x1\x6\x1\xFFFF\x1\x8\x1\xFFFF\x1\x6\x1\xFFFF\x2\xA\x1\x8\x1\xFFFF"; - const string DFA2_maxS = - "\x1\xC\x1\xFFFF\x1\x11\x1\xFFFF\x1\xC\x1\xFFFF\x2\x10\x1\x11\x1\xFFFF"; - const string DFA2_acceptS = - "\x1\xFFFF\x1\x1\x1\xFFFF\x1\x4\x1\xFFFF\x1\x2\x3\xFFFF\x1\x3"; - const string DFA2_specialS = - "\xA\xFFFF}>"; - static readonly string[] DFA2_transitionS = - { - "\x1\x2\x1\x1\x1\x3\x3\xFFFF\x1\x1", - "", - "\x1\x1\x1\xFFFF\x2\x1\x1\x4\x1\xFFFF\x3\x1\x1\x5", - "", - "\x1\x7\x1\x6\x4\xFFFF\x1\x1", - "", - "\x2\x1\x1\xFFFF\x1\x8\x3\x1", - "\x3\x1\x1\x8\x3\x1", - "\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x3\x1\x1\x9", - "" - }; - - static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS); - static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS); - static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS); - static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS); - static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS); - static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS); - static readonly short[][] DFA2_transition; - - static DFA2() - { - int numStates = DFA2_transitionS.Length; - DFA2_transition = new short[numStates][]; - for ( int i=0; i < numStates; i++ ) - { - DFA2_transition[i] = DFA.UnpackEncodedString(DFA2_transitionS[i]); - } - } - - public DFA2( BaseRecognizer recognizer ) - { - this.recognizer = recognizer; - this.decisionNumber = 2; - this.eot = DFA2_eot; - this.eof = DFA2_eof; - this.min = DFA2_min; - this.max = DFA2_max; - this.accept = DFA2_accept; - this.special = DFA2_special; - this.transition = DFA2_transition; - } - public override string GetDescription() - { - return "53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->);"; - } - public override void Error( NoViableAltException nvae ) - { - ((DebugParser)recognizer).dbg.RecognitionException( nvae ); - } - } - - - #endregion DFA - - #region Follow sets - private static class Follow - { - public static readonly BitSet _stat_in_prog53 = new BitSet(new ulong[]{0x11C2UL}); - public static readonly BitSet _expr_in_stat70 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat72 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_stat105 = new BitSet(new ulong[]{0x20000UL}); - public static readonly BitSet _17_in_stat107 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_stat109 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat111 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _func_in_stat143 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat145 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _NEWLINE_in_stat178 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_func219 = new BitSet(new ulong[]{0x1000UL}); - public static readonly BitSet _12_in_func222 = new BitSet(new ulong[]{0xC0UL}); - public static readonly BitSet _formalPar_in_func224 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_func226 = new BitSet(new ulong[]{0x20000UL}); - public static readonly BitSet _17_in_func228 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_func230 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _set_in_formalPar267 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _multExpr_in_expr288 = new BitSet(new ulong[]{0x10402UL}); - public static readonly BitSet _16_in_expr292 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _10_in_expr295 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _multExpr_in_expr299 = new BitSet(new ulong[]{0x10402UL}); - public static readonly BitSet _atom_in_multExpr320 = new BitSet(new ulong[]{0xC802UL}); - public static readonly BitSet _set_in_multExpr323 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _atom_in_multExpr332 = new BitSet(new ulong[]{0xC802UL}); - public static readonly BitSet _INT_in_atom348 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_atom358 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _12_in_atom368 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_atom370 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_atom372 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_atom389 = new BitSet(new ulong[]{0x1000UL}); - public static readonly BitSet _12_in_atom391 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_atom393 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_atom395 = new BitSet(new ulong[]{0x2UL}); - - } - #endregion Follow sets -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs deleted file mode 100644 index 638100e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test.BuildOptions -{ - using System.Collections.Generic; - using Antlr.Runtime.Tree; - - partial class DebugGrammarParser - { - /** List of function definitions. Must point at the FUNC nodes. */ - List functionDefinitions = new List(); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs deleted file mode 100644 index c9122e5..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs +++ /dev/null @@ -1,845 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\DebugTreeGrammar.g3 2009-09-30 13:18:15 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -//import java.util.Map; -//import java.util.HashMap; -using BigInteger = java.math.BigInteger; -using Console = System.Console; - - -using System.Collections.Generic; -using Antlr.Runtime; -using Antlr.Runtime.Tree; -using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream;using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -using Antlr.Runtime.Debug; -using IOException = System.IO.IOException; -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class DebugTreeGrammar : DebugTreeParser -{ - internal static readonly string[] tokenNames = new string[] { - "", "", "", "", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" - }; - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public static readonly string[] ruleNames = - new string[] - { - "invalidRule", "call", "expr", "prog", "stat" - }; - - int ruleLevel = 0; - public virtual int RuleLevel { get { return ruleLevel; } } - public virtual void IncRuleLevel() { ruleLevel++; } - public virtual void DecRuleLevel() { ruleLevel--; } - public DebugTreeGrammar( ITreeNodeStream input ) - : this( input, DebugEventSocketProxy.DefaultDebuggerPort, new RecognizerSharedState() ) - { - } - public DebugTreeGrammar( ITreeNodeStream input, int port, RecognizerSharedState state ) - : base( input, state ) - { - DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, input.TreeAdaptor ); - DebugListener = proxy; - try - { - proxy.Handshake(); - } - catch ( IOException ioe ) - { - ReportError( ioe ); - } - } - public DebugTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg ) - : base( input, dbg, new RecognizerSharedState() ) - { - - } - protected virtual bool EvalPredicate( bool result, string predicate ) - { - dbg.SemanticPredicate( result, predicate ); - return result; - } - - - public override string[] TokenNames { get { return DebugTreeGrammar.tokenNames; } } - public override string GrammarFileName { get { return "BuildOptions\\DebugTreeGrammar.g3"; } } - - - #region Rules - - // $ANTLR start "prog" - // BuildOptions\\DebugTreeGrammar.g3:53:0: prog : ( stat )* ; - private void prog( ) - { - try - { - dbg.EnterRule( GrammarFileName, "prog" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 53, -1 ); - - try - { - // BuildOptions\\DebugTreeGrammar.g3:53:9: ( ( stat )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:53:9: ( stat )* - { - dbg.Location( 53, 8 ); - // BuildOptions\\DebugTreeGrammar.g3:53:9: ( stat )* - try - { - dbg.EnterSubRule( 1 ); - - for ( ; ; ) - { - int alt1=2; - try - { - dbg.EnterDecision( 1 ); - - int LA1_0 = input.LA(1); - - if ( ((LA1_0>=CALL && LA1_0<=INT)||(LA1_0>=10 && LA1_0<=11)||(LA1_0>=14 && LA1_0<=17)) ) - { - alt1=1; - } - - - } - finally - { - dbg.ExitDecision( 1 ); - } - - switch ( alt1 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:53:0: stat - { - dbg.Location( 53, 8 ); - PushFollow(Follow._stat_in_prog48); - stat(); - - state._fsp--; - - - } - break; - - default: - goto loop1; - } - } - - loop1: - ; - - } - finally - { - dbg.ExitSubRule( 1 ); - } - - - } - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(54, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "prog" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return ; - } - // $ANTLR end "prog" - - - // $ANTLR start "stat" - // BuildOptions\\DebugTreeGrammar.g3:56:0: stat : ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ); - private void stat( ) - { - CommonTree ID2=null; - BigInteger expr1 = default(BigInteger); - BigInteger expr3 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "stat" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 56, -1 ); - - try - { - // BuildOptions\\DebugTreeGrammar.g3:56:9: ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ) - int alt3=3; - try - { - dbg.EnterDecision( 3 ); - - switch ( input.LA(1) ) - { - case CALL: - case ID: - case INT: - case 10: - case 11: - case 14: - case 15: - case 16: - { - alt3=1; - } - break; - case 17: - { - alt3=2; - } - break; - case FUNC: - { - alt3=3; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 3, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 3 ); - } - - switch ( alt3 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:56:9: expr - { - dbg.Location( 56, 8 ); - PushFollow(Follow._expr_in_stat63); - expr1=expr(); - - state._fsp--; - - dbg.Location( 56, 35 ); - string result = expr1.ToString(); - Console.Out.WriteLine(expr1 + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\DebugTreeGrammar.g3:59:9: ^( '=' ID expr ) - { - dbg.Location( 59, 8 ); - dbg.Location( 59, 10 ); - Match(input,17,Follow._17_in_stat98); - - Match(input, TokenTypes.Down, null); - dbg.Location( 59, 14 ); - ID2=(CommonTree)Match(input,ID,Follow._ID_in_stat100); - dbg.Location( 59, 17 ); - PushFollow(Follow._expr_in_stat102); - expr3=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 59, 35 ); - globalMemory[(ID2!=null?ID2.Text:null)] = expr3; - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\DebugTreeGrammar.g3:60:9: ^( FUNC ( . )+ ) - { - dbg.Location( 60, 8 ); - dbg.Location( 60, 10 ); - Match(input,FUNC,Follow._FUNC_in_stat128); - - Match(input, TokenTypes.Down, null); - dbg.Location( 60, 15 ); - // BuildOptions\\DebugTreeGrammar.g3:60:16: ( . )+ - int cnt2=0; - try - { - dbg.EnterSubRule( 2 ); - - for ( ; ; ) - { - int alt2=2; - try - { - dbg.EnterDecision( 2 ); - - int LA2_0 = input.LA(1); - - if ( ((LA2_0>=CALL && LA2_0<=17)) ) - { - alt2=1; - } - else if ( (LA2_0==UP) ) - { - alt2=2; - } - - - } - finally - { - dbg.ExitDecision( 2 ); - } - - switch ( alt2 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:60:0: . - { - dbg.Location( 60, 15 ); - MatchAny(input); - - } - break; - - default: - if ( cnt2 >= 1 ) - goto loop2; - - EarlyExitException eee2 = new EarlyExitException( 2, input ); - dbg.RecognitionException( eee2 ); - - throw eee2; - } - cnt2++; - } - loop2: - ; - - } - finally - { - dbg.ExitSubRule( 2 ); - } - - - Match(input, TokenTypes.Up, null); - - } - break; - - } - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(61, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "stat" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return ; - } - // $ANTLR end "stat" - - - // $ANTLR start "expr" - // BuildOptions\\DebugTreeGrammar.g3:63:0: expr returns [BigInteger value] : ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ); - private BigInteger expr( ) - { - BigInteger value = default(BigInteger); - - CommonTree ID4=null; - CommonTree INT5=null; - BigInteger a = default(BigInteger); - BigInteger b = default(BigInteger); - BigInteger call6 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "expr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 63, -1 ); - - try - { - // BuildOptions\\DebugTreeGrammar.g3:64:9: ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ) - int alt4=8; - try - { - dbg.EnterDecision( 4 ); - - switch ( input.LA(1) ) - { - case 16: - { - alt4=1; - } - break; - case 10: - { - alt4=2; - } - break; - case 14: - { - alt4=3; - } - break; - case 15: - { - alt4=4; - } - break; - case 11: - { - alt4=5; - } - break; - case ID: - { - alt4=6; - } - break; - case INT: - { - alt4=7; - } - break; - case CALL: - { - alt4=8; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 4, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 4 ); - } - - switch ( alt4 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:64:9: ^( '+' a= expr b= expr ) - { - dbg.Location( 64, 8 ); - dbg.Location( 64, 10 ); - Match(input,16,Follow._16_in_expr172); - - Match(input, TokenTypes.Down, null); - dbg.Location( 64, 15 ); - PushFollow(Follow._expr_in_expr176); - a=expr(); - - state._fsp--; - - dbg.Location( 64, 22 ); - PushFollow(Follow._expr_in_expr180); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 64, 35 ); - value = a.add(b); - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\DebugTreeGrammar.g3:65:9: ^( '-' a= expr b= expr ) - { - dbg.Location( 65, 8 ); - dbg.Location( 65, 10 ); - Match(input,10,Follow._10_in_expr200); - - Match(input, TokenTypes.Down, null); - dbg.Location( 65, 15 ); - PushFollow(Follow._expr_in_expr204); - a=expr(); - - state._fsp--; - - dbg.Location( 65, 22 ); - PushFollow(Follow._expr_in_expr208); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 65, 35 ); - value = a.subtract(b); - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\DebugTreeGrammar.g3:66:9: ^( '*' a= expr b= expr ) - { - dbg.Location( 66, 8 ); - dbg.Location( 66, 10 ); - Match(input,14,Follow._14_in_expr228); - - Match(input, TokenTypes.Down, null); - dbg.Location( 66, 15 ); - PushFollow(Follow._expr_in_expr232); - a=expr(); - - state._fsp--; - - dbg.Location( 66, 22 ); - PushFollow(Follow._expr_in_expr236); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 66, 35 ); - value = a.multiply(b); - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\DebugTreeGrammar.g3:67:9: ^( '/' a= expr b= expr ) - { - dbg.Location( 67, 8 ); - dbg.Location( 67, 10 ); - Match(input,15,Follow._15_in_expr256); - - Match(input, TokenTypes.Down, null); - dbg.Location( 67, 15 ); - PushFollow(Follow._expr_in_expr260); - a=expr(); - - state._fsp--; - - dbg.Location( 67, 22 ); - PushFollow(Follow._expr_in_expr264); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 67, 35 ); - value = a.divide(b); - - } - break; - case 5: - dbg.EnterAlt( 5 ); - - // BuildOptions\\DebugTreeGrammar.g3:68:9: ^( '%' a= expr b= expr ) - { - dbg.Location( 68, 8 ); - dbg.Location( 68, 10 ); - Match(input,11,Follow._11_in_expr284); - - Match(input, TokenTypes.Down, null); - dbg.Location( 68, 15 ); - PushFollow(Follow._expr_in_expr288); - a=expr(); - - state._fsp--; - - dbg.Location( 68, 22 ); - PushFollow(Follow._expr_in_expr292); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 68, 35 ); - value = a.remainder(b); - - } - break; - case 6: - dbg.EnterAlt( 6 ); - - // BuildOptions\\DebugTreeGrammar.g3:69:9: ID - { - dbg.Location( 69, 8 ); - ID4=(CommonTree)Match(input,ID,Follow._ID_in_expr311); - dbg.Location( 69, 35 ); - value = getValue((ID4!=null?ID4.Text:null)); - - } - break; - case 7: - dbg.EnterAlt( 7 ); - - // BuildOptions\\DebugTreeGrammar.g3:70:9: INT - { - dbg.Location( 70, 8 ); - INT5=(CommonTree)Match(input,INT,Follow._INT_in_expr347); - dbg.Location( 70, 35 ); - value = new BigInteger((INT5!=null?INT5.Text:null)); - - } - break; - case 8: - dbg.EnterAlt( 8 ); - - // BuildOptions\\DebugTreeGrammar.g3:71:9: call - { - dbg.Location( 71, 8 ); - PushFollow(Follow._call_in_expr382); - call6=call(); - - state._fsp--; - - dbg.Location( 71, 35 ); - value = call6; - - } - break; - - } - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(72, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "expr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return value; - } - // $ANTLR end "expr" - - - // $ANTLR start "call" - // BuildOptions\\DebugTreeGrammar.g3:74:0: call returns [BigInteger value] : ^( CALL ID expr ) ; - private BigInteger call( ) - { - BigInteger value = default(BigInteger); - - CommonTree ID8=null; - BigInteger expr7 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "call" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 74, -1 ); - - try - { - // BuildOptions\\DebugTreeGrammar.g3:75:9: ( ^( CALL ID expr ) ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\DebugTreeGrammar.g3:75:9: ^( CALL ID expr ) - { - dbg.Location( 75, 8 ); - dbg.Location( 75, 10 ); - Match(input,CALL,Follow._CALL_in_call430); - - Match(input, TokenTypes.Down, null); - dbg.Location( 75, 15 ); - ID8=(CommonTree)Match(input,ID,Follow._ID_in_call432); - dbg.Location( 75, 18 ); - PushFollow(Follow._expr_in_call434); - expr7=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 75, 35 ); - BigInteger p = expr7; - CommonTree funcRoot = findFunction((ID8!=null?ID8.Text:null), p); - if (funcRoot == null) { - Console.Error.WriteLine("No match found for " + (ID8!=null?ID8.Text:null) + "(" + p + ")"); - } else { - // Here we set up the local evaluator to run over the - // function definition with the parameter value. - // This re-reads a sub-AST of our input AST! - DebugTreeGrammar e = new DebugTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); - value = e.expr(); - } - - - } - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(87, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "call" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return value; - } - // $ANTLR end "call" - #endregion Rules - - - #region Follow sets - private static class Follow - { - public static readonly BitSet _stat_in_prog48 = new BitSet(new ulong[]{0x3CCF2UL}); - public static readonly BitSet _expr_in_stat63 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _17_in_stat98 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _ID_in_stat100 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_stat102 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _FUNC_in_stat128 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _16_in_expr172 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr176 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr180 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _10_in_expr200 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr204 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr208 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _14_in_expr228 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr232 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr236 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _15_in_expr256 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr260 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr264 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _11_in_expr284 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr288 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr292 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _ID_in_expr311 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _INT_in_expr347 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _call_in_expr382 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _CALL_in_call430 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _ID_in_call432 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_call434 = new BitSet(new ulong[]{0x8UL}); - - } - #endregion Follow sets -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 deleted file mode 100644 index 40ee359..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 +++ /dev/null @@ -1,90 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -tree grammar DebugTreeGrammar; - -options -{ - language=CSharp3; - tokenVocab=DebugGrammar; - ASTLabelType=CommonTree; -} - -// START:members -@header -{ -//import java.util.Map; -//import java.util.HashMap; -using BigInteger = System.Numerics.BigInteger; -using Console = System.Console; -} -// END:members - -@namespace{Antlr3.Runtime.Test.BuildOptions} - -// START:rules -prog: stat* - ; - -stat: expr { string result = $expr.value.ToString(); - Console.Out.WriteLine($expr.value + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); - } - | ^('=' ID expr) { globalMemory[$ID.text] = $expr.value; } - | ^(FUNC .+) // ignore FUNCs - we added them to functionDefinitions already in parser. - ; - -expr returns [BigInteger value] - : ^('+' a=expr b=expr) { $value = $a.value + $b.value; } - | ^('-' a=expr b=expr) { $value = $a.value - $b.value; } - | ^('*' a=expr b=expr) { $value = $a.value * $b.value; } - | ^('/' a=expr b=expr) { $value = $a.value / $b.value; } - | ^('%' a=expr b=expr) { $value = $a.value \% $b.value; } - | ID { $value = getValue($ID.text); } - | INT { $value = BigInteger.Parse($INT.text); } - | call { $value = $call.value; } - ; - -call returns [BigInteger value] - : ^(CALL ID expr) { BigInteger p = $expr.value; - CommonTree funcRoot = findFunction($ID.text, p); - if (funcRoot == null) { - Console.Error.WriteLine("No match found for " + $ID.text + "(" + p + ")"); - } else { - // Here we set up the local evaluator to run over the - // function definition with the parameter value. - // This re-reads a sub-AST of our input AST! - DebugTreeGrammar e = new DebugTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); - $value = e.expr(); - } - } - ; -// END:rules diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs deleted file mode 100644 index c139aff..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs +++ /dev/null @@ -1,119 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test.BuildOptions -{ - using System.Collections.Generic; - using Antlr.Runtime.Tree; - - using BigInteger = System.Numerics.BigInteger; - using Console = System.Console; - - partial class DebugTreeGrammar - { - /** Points to functions tracked by tree builder. */ - private List functionDefinitions; - - /** Remember local variables. Currently, this is only the function parameter. - */ - private readonly IDictionary localMemory = new Dictionary(); - - /** Remember global variables set by =. */ - private IDictionary globalMemory = new Dictionary(); - - /** Set up an evaluator with a node stream; and a set of function definition ASTs. */ - public DebugTreeGrammar(CommonTreeNodeStream nodes, List functionDefinitions) - : this(nodes) - { - this.functionDefinitions = functionDefinitions; - } - - /** Set up a local evaluator for a nested function call. The evaluator gets the definition - * tree of the function; the set of all defined functions (to find locally called ones); a - * pointer to the global variable memory; and the value of the function parameter to be - * added to the local memory. - */ - private DebugTreeGrammar(CommonTree function, - List functionDefinitions, - IDictionary globalMemory, - BigInteger paramValue) - // Expected tree for function: ^(FUNC ID ( INT | ID ) expr) - : this(new CommonTreeNodeStream(function.GetChild(2)), functionDefinitions) - { - this.globalMemory = globalMemory; - localMemory[function.GetChild(1).Text] = paramValue; - } - - /** Find matching function definition for a function name and parameter - * value. The first definition is returned where (a) the name matches - * and (b) the formal parameter agrees if it is defined as constant. - */ - private CommonTree findFunction(string name, BigInteger paramValue) - { - foreach (CommonTree f in functionDefinitions) - { - // Expected tree for f: ^(FUNC ID (ID | INT) expr) - if (f.GetChild(0).Text.Equals(name)) - { - // Check whether parameter matches - CommonTree formalPar = (CommonTree)f.GetChild(1); - if (formalPar.Token.Type == INT - && !BigInteger.Parse(formalPar.Token.Text).Equals(paramValue)) - { - // Constant in formalPar list does not match actual value -> no match. - continue; - } - // Parameter (value for INT formal arg) as well as fct name agrees! - return f; - } - } - return null; - } - - /** Get value of name up call stack. */ - internal BigInteger getValue(string name) - { - BigInteger value; - if (localMemory.TryGetValue(name, out value) && value != null) - { - return value; - } - if (globalMemory.TryGetValue(name, out value) && value != null) - { - return value; - } - // not found in local memory or global memory - Console.Error.WriteLine("undefined variable " + name); - return BigInteger.Zero; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 deleted file mode 100644 index 9230134..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 +++ /dev/null @@ -1,103 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar ProfileGrammar; - -options -{ - language=CSharp3; - output=AST; - ASTLabelType=CommonTree; -} - -tokens -{ - // define pseudo-operations - FUNC; - CALL; -} - -@lexer::namespace{Antlr3.Runtime.Test.BuildOptions} -@parser::namespace{Antlr3.Runtime.Test.BuildOptions} - -// START:stat -prog: ( stat )* - ; - -stat: expr NEWLINE -> expr - | ID '=' expr NEWLINE -> ^('=' ID expr) - | func NEWLINE -> func - | NEWLINE -> // ignore - ; - -func: ID '(' formalPar ')' '=' expr -> ^(FUNC ID formalPar expr) - ; - finally { - functionDefinitions.Add($func.tree); - } - -formalPar - : ID - | INT - ; - -// END:stat - -// START:expr -expr: multExpr (('+'^|'-'^) multExpr)* - ; - -multExpr - : atom (('*'|'/'|'%')^ atom)* - ; - -atom: INT - | ID - | '(' expr ')' -> expr - | ID '(' expr ')' -> ^(CALL ID expr) - ; -// END:expr - -// START:tokens -ID : ('a'..'z'|'A'..'Z')+ - ; - -INT : '0'..'9'+ - ; - -NEWLINE - : '\r'? '\n' - ; - -WS : (' '|'\t')+ { Skip(); } - ; -// END:tokens diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs deleted file mode 100644 index dae1ef4..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs +++ /dev/null @@ -1,693 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\ProfileGrammar.g3 2009-09-30 13:18:18 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -using System.Collections.Generic; -using Antlr.Runtime; -using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class ProfileGrammarLexer : Lexer -{ - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public ProfileGrammarLexer() {} - public ProfileGrammarLexer( ICharStream input ) - : this( input, new RecognizerSharedState() ) - { - } - public ProfileGrammarLexer( ICharStream input, RecognizerSharedState state ) - : base( input, state ) - { - - } - public override string GrammarFileName { get { return "BuildOptions\\ProfileGrammar.g3"; } } - - // $ANTLR start "T__10" - private void mT__10() - { - try - { - int _type = T__10; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:7:9: ( '-' ) - // BuildOptions\\ProfileGrammar.g3:7:9: '-' - { - Match('-'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__10" - - // $ANTLR start "T__11" - private void mT__11() - { - try - { - int _type = T__11; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:8:9: ( '%' ) - // BuildOptions\\ProfileGrammar.g3:8:9: '%' - { - Match('%'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__11" - - // $ANTLR start "T__12" - private void mT__12() - { - try - { - int _type = T__12; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:9:9: ( '(' ) - // BuildOptions\\ProfileGrammar.g3:9:9: '(' - { - Match('('); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__12" - - // $ANTLR start "T__13" - private void mT__13() - { - try - { - int _type = T__13; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:10:9: ( ')' ) - // BuildOptions\\ProfileGrammar.g3:10:9: ')' - { - Match(')'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__13" - - // $ANTLR start "T__14" - private void mT__14() - { - try - { - int _type = T__14; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:11:9: ( '*' ) - // BuildOptions\\ProfileGrammar.g3:11:9: '*' - { - Match('*'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__14" - - // $ANTLR start "T__15" - private void mT__15() - { - try - { - int _type = T__15; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:12:9: ( '/' ) - // BuildOptions\\ProfileGrammar.g3:12:9: '/' - { - Match('/'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__15" - - // $ANTLR start "T__16" - private void mT__16() - { - try - { - int _type = T__16; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:13:9: ( '+' ) - // BuildOptions\\ProfileGrammar.g3:13:9: '+' - { - Match('+'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__16" - - // $ANTLR start "T__17" - private void mT__17() - { - try - { - int _type = T__17; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:14:9: ( '=' ) - // BuildOptions\\ProfileGrammar.g3:14:9: '=' - { - Match('='); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "T__17" - - // $ANTLR start "ID" - private void mID() - { - try - { - int _type = ID; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:88:9: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ ) - // BuildOptions\\ProfileGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ - { - // BuildOptions\\ProfileGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ - int cnt1=0; - for ( ; ; ) - { - int alt1=2; - int LA1_0 = input.LA(1); - - if ( ((LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) - { - alt1=1; - } - - - switch ( alt1 ) - { - case 1: - // BuildOptions\\ProfileGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt1 >= 1 ) - goto loop1; - - EarlyExitException eee1 = new EarlyExitException( 1, input ); - throw eee1; - } - cnt1++; - } - loop1: - ; - - - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "ID" - - // $ANTLR start "INT" - private void mINT() - { - try - { - int _type = INT; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:91:9: ( ( '0' .. '9' )+ ) - // BuildOptions\\ProfileGrammar.g3:91:9: ( '0' .. '9' )+ - { - // BuildOptions\\ProfileGrammar.g3:91:9: ( '0' .. '9' )+ - int cnt2=0; - for ( ; ; ) - { - int alt2=2; - int LA2_0 = input.LA(1); - - if ( ((LA2_0>='0' && LA2_0<='9')) ) - { - alt2=1; - } - - - switch ( alt2 ) - { - case 1: - // BuildOptions\\ProfileGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt2 >= 1 ) - goto loop2; - - EarlyExitException eee2 = new EarlyExitException( 2, input ); - throw eee2; - } - cnt2++; - } - loop2: - ; - - - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "INT" - - // $ANTLR start "NEWLINE" - private void mNEWLINE() - { - try - { - int _type = NEWLINE; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:95:7: ( ( '\\r' )? '\\n' ) - // BuildOptions\\ProfileGrammar.g3:95:7: ( '\\r' )? '\\n' - { - // BuildOptions\\ProfileGrammar.g3:95:7: ( '\\r' )? - int alt3=2; - int LA3_0 = input.LA(1); - - if ( (LA3_0=='\r') ) - { - alt3=1; - } - switch ( alt3 ) - { - case 1: - // BuildOptions\\ProfileGrammar.g3:95:0: '\\r' - { - Match('\r'); - - } - break; - - } - - Match('\n'); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "NEWLINE" - - // $ANTLR start "WS" - private void mWS() - { - try - { - int _type = WS; - int _channel = DefaultTokenChannel; - // BuildOptions\\ProfileGrammar.g3:98:9: ( ( ' ' | '\\t' )+ ) - // BuildOptions\\ProfileGrammar.g3:98:9: ( ' ' | '\\t' )+ - { - // BuildOptions\\ProfileGrammar.g3:98:9: ( ' ' | '\\t' )+ - int cnt4=0; - for ( ; ; ) - { - int alt4=2; - int LA4_0 = input.LA(1); - - if ( (LA4_0=='\t'||LA4_0==' ') ) - { - alt4=1; - } - - - switch ( alt4 ) - { - case 1: - // BuildOptions\\ProfileGrammar.g3: - { - input.Consume(); - - - } - break; - - default: - if ( cnt4 >= 1 ) - goto loop4; - - EarlyExitException eee4 = new EarlyExitException( 4, input ); - throw eee4; - } - cnt4++; - } - loop4: - ; - - - Skip(); - - } - - state.type = _type; - state.channel = _channel; - } - finally - { - } - } - // $ANTLR end "WS" - - public override void mTokens() - { - // BuildOptions\\ProfileGrammar.g3:1:10: ( T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | ID | INT | NEWLINE | WS ) - int alt5=12; - switch ( input.LA(1) ) - { - case '-': - { - alt5=1; - } - break; - case '%': - { - alt5=2; - } - break; - case '(': - { - alt5=3; - } - break; - case ')': - { - alt5=4; - } - break; - case '*': - { - alt5=5; - } - break; - case '/': - { - alt5=6; - } - break; - case '+': - { - alt5=7; - } - break; - case '=': - { - alt5=8; - } - break; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': - { - alt5=9; - } - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - alt5=10; - } - break; - case '\n': - case '\r': - { - alt5=11; - } - break; - case '\t': - case ' ': - { - alt5=12; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 5, 0, input); - - throw nvae; - } - } - - switch ( alt5 ) - { - case 1: - // BuildOptions\\ProfileGrammar.g3:1:10: T__10 - { - mT__10(); - - } - break; - case 2: - // BuildOptions\\ProfileGrammar.g3:1:16: T__11 - { - mT__11(); - - } - break; - case 3: - // BuildOptions\\ProfileGrammar.g3:1:22: T__12 - { - mT__12(); - - } - break; - case 4: - // BuildOptions\\ProfileGrammar.g3:1:28: T__13 - { - mT__13(); - - } - break; - case 5: - // BuildOptions\\ProfileGrammar.g3:1:34: T__14 - { - mT__14(); - - } - break; - case 6: - // BuildOptions\\ProfileGrammar.g3:1:40: T__15 - { - mT__15(); - - } - break; - case 7: - // BuildOptions\\ProfileGrammar.g3:1:46: T__16 - { - mT__16(); - - } - break; - case 8: - // BuildOptions\\ProfileGrammar.g3:1:52: T__17 - { - mT__17(); - - } - break; - case 9: - // BuildOptions\\ProfileGrammar.g3:1:58: ID - { - mID(); - - } - break; - case 10: - // BuildOptions\\ProfileGrammar.g3:1:61: INT - { - mINT(); - - } - break; - case 11: - // BuildOptions\\ProfileGrammar.g3:1:65: NEWLINE - { - mNEWLINE(); - - } - break; - case 12: - // BuildOptions\\ProfileGrammar.g3:1:73: WS - { - mWS(); - - } - break; - - } - - } - - - #region DFA - - protected override void InitDFAs() - { - base.InitDFAs(); - } - - - #endregion - -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs deleted file mode 100644 index 7271295..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs deleted file mode 100644 index 5cc9872..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs +++ /dev/null @@ -1,1560 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\ProfileGrammar.g3 2009-09-30 13:18:17 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -using System.Collections.Generic; -using Antlr.Runtime; -using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -using Antlr.Runtime.Debug; -using IOException = System.IO.IOException; - -using Antlr.Runtime.Tree; -using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream; - -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class ProfileGrammarParser : DebugParser -{ - internal static readonly string[] tokenNames = new string[] { - "", "", "", "", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" - }; - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public static readonly string[] ruleNames = - new string[] - { - "invalidRule", "atom", "expr", "formalPar", "func", "multExpr", "prog", - "stat" - }; - - int ruleLevel = 0; - public virtual int RuleLevel { get { return ruleLevel; } } - public virtual void IncRuleLevel() { ruleLevel++; } - public virtual void DecRuleLevel() { ruleLevel--; } - public ProfileGrammarParser( ITokenStream input ) - : this( input, new Profiler(null), new RecognizerSharedState() ) - { - } - public ProfileGrammarParser( ITokenStream input, IDebugEventListener dbg, RecognizerSharedState state ) - : base( input, dbg, state ) - { - Profiler p = (Profiler)dbg; - p.setParser(this); - InitializeTreeAdaptor(); - if ( TreeAdaptor == null ) - TreeAdaptor = new CommonTreeAdaptor(); - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - proxy.TreeAdaptor = adap; - } - - public ProfileGrammarParser( ITokenStream input, IDebugEventListener dbg ) - : base( input, dbg ) - { - Profiler p = (Profiler)dbg; - p.setParser(this);InitializeTreeAdaptor(); - if ( TreeAdaptor == null ) - TreeAdaptor = new CommonTreeAdaptor(); - - ITreeAdaptor adap = new CommonTreeAdaptor(); - TreeAdaptor = adap; - - } - public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) - { - ((Profiler)dbg).ExamineRuleMemoization(input, ruleIndex, ProfileGrammarParser.ruleNames[ruleIndex]); - return super.AlreadyParsedRule(input, ruleIndex); - } - - public virtual void Memoize( IIntStream input, int ruleIndex, int ruleStartIndex ) - { - ((Profiler)dbg).Memoize(input, ruleIndex, ruleStartIndex, ProfileGrammarParser.ruleNames[ruleIndex]); - super.Memoize(input, ruleIndex, ruleStartIndex); - } - protected virtual bool EvalPredicate( bool result, string predicate ) - { - dbg.SemanticPredicate( result, predicate ); - return result; - } - - // Implement this function in your helper file to use a custom tree adaptor - partial void InitializeTreeAdaptor(); - protected DebugTreeAdaptor adaptor; - - public ITreeAdaptor TreeAdaptor - { - get - { - return adaptor; - } - set - { - this.adaptor = new DebugTreeAdaptor(dbg,adaptor); - - } - } - - - public override string[] TokenNames { get { return ProfileGrammarParser.tokenNames; } } - public override string GrammarFileName { get { return "BuildOptions\\ProfileGrammar.g3"; } } - - - #region Rules - public class prog_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "prog" - // BuildOptions\\ProfileGrammar.g3:50:0: prog : ( stat )* ; - private ProfileGrammarParser.prog_return prog( ) - { - ProfileGrammarParser.prog_return retval = new ProfileGrammarParser.prog_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - ProfileGrammarParser.stat_return stat1 = default(ProfileGrammarParser.stat_return); - - - try - { - dbg.EnterRule( GrammarFileName, "prog" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 50, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:50:7: ( ( stat )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:50:7: ( stat )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 50, 6 ); - // BuildOptions\\ProfileGrammar.g3:50:7: ( stat )* - try - { - dbg.EnterSubRule( 1 ); - - for ( ; ; ) - { - int alt1=2; - try - { - dbg.EnterDecision( 1 ); - - int LA1_0 = input.LA(1); - - if ( ((LA1_0>=ID && LA1_0<=NEWLINE)||LA1_0==12) ) - { - alt1=1; - } - - - } - finally - { - dbg.ExitDecision( 1 ); - } - - switch ( alt1 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:50:9: stat - { - dbg.Location( 50, 8 ); - PushFollow(Follow._stat_in_prog53); - stat1=stat(); - - state._fsp--; - - adaptor.AddChild(root_0, stat1.Tree); - - } - break; - - default: - goto loop1; - } - } - - loop1: - ; - - } - finally - { - dbg.ExitSubRule( 1 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(51, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "prog" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "prog" - - public class stat_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "stat" - // BuildOptions\\ProfileGrammar.g3:53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->); - private ProfileGrammarParser.stat_return stat( ) - { - ProfileGrammarParser.stat_return retval = new ProfileGrammarParser.stat_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken NEWLINE3=null; - IToken ID4=null; - IToken char_literal5=null; - IToken NEWLINE7=null; - IToken NEWLINE9=null; - IToken NEWLINE10=null; - ProfileGrammarParser.expr_return expr2 = default(ProfileGrammarParser.expr_return); - ProfileGrammarParser.expr_return expr6 = default(ProfileGrammarParser.expr_return); - ProfileGrammarParser.func_return func8 = default(ProfileGrammarParser.func_return); - - CommonTree NEWLINE3_tree=null; - CommonTree ID4_tree=null; - CommonTree char_literal5_tree=null; - CommonTree NEWLINE7_tree=null; - CommonTree NEWLINE9_tree=null; - CommonTree NEWLINE10_tree=null; - RewriteRuleITokenStream stream_NEWLINE=new RewriteRuleITokenStream(adaptor,"token NEWLINE"); - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - RewriteRuleSubtreeStream stream_func=new RewriteRuleSubtreeStream(adaptor,"rule func"); - try - { - dbg.EnterRule( GrammarFileName, "stat" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 53, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:53:9: ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->) - int alt2=4; - try - { - dbg.EnterDecision( 2 ); - - try - { - isCyclicDecision = true; - alt2 = dfa2.Predict(input); - } - catch ( NoViableAltException nvae ) - { - dbg.RecognitionException( nvae ); - throw nvae; - } - } - finally - { - dbg.ExitDecision( 2 ); - } - - switch ( alt2 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:53:9: expr NEWLINE - { - dbg.Location( 53, 8 ); - PushFollow(Follow._expr_in_stat70); - expr2=expr(); - - state._fsp--; - - stream_expr.Add(expr2.Tree); - dbg.Location( 53, 13 ); - NEWLINE3=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat72); - stream_NEWLINE.Add(NEWLINE3); - - - - { - // AST REWRITE - // elements: expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 53:41: -> expr - { - dbg.Location( 53, 43 ); - adaptor.AddChild(root_0, stream_expr.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\ProfileGrammar.g3:54:9: ID '=' expr NEWLINE - { - dbg.Location( 54, 8 ); - ID4=(IToken)Match(input,ID,Follow._ID_in_stat105); - stream_ID.Add(ID4); - - dbg.Location( 54, 11 ); - char_literal5=(IToken)Match(input,17,Follow._17_in_stat107); - stream_17.Add(char_literal5); - - dbg.Location( 54, 15 ); - PushFollow(Follow._expr_in_stat109); - expr6=expr(); - - state._fsp--; - - stream_expr.Add(expr6.Tree); - dbg.Location( 54, 20 ); - NEWLINE7=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat111); - stream_NEWLINE.Add(NEWLINE7); - - - - { - // AST REWRITE - // elements: 17, ID, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 54:41: -> ^( '=' ID expr ) - { - dbg.Location( 54, 43 ); - // BuildOptions\\ProfileGrammar.g3:54:44: ^( '=' ID expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 54, 45 ); - root_1 = (CommonTree)adaptor.BecomeRoot(stream_17.NextNode(), root_1); - - dbg.Location( 54, 49 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 54, 52 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\ProfileGrammar.g3:55:9: func NEWLINE - { - dbg.Location( 55, 8 ); - PushFollow(Follow._func_in_stat143); - func8=func(); - - state._fsp--; - - stream_func.Add(func8.Tree); - dbg.Location( 55, 13 ); - NEWLINE9=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat145); - stream_NEWLINE.Add(NEWLINE9); - - - - { - // AST REWRITE - // elements: func - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 55:41: -> func - { - dbg.Location( 55, 43 ); - adaptor.AddChild(root_0, stream_func.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\ProfileGrammar.g3:56:9: NEWLINE - { - dbg.Location( 56, 8 ); - NEWLINE10=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat178); - stream_NEWLINE.Add(NEWLINE10); - - - - { - // AST REWRITE - // elements: - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 56:41: -> - { - dbg.Location( 57, 4 ); - root_0 = null; - } - - retval.tree = root_0; - } - - } - break; - - } - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(57, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "stat" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "stat" - - public class func_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "func" - // BuildOptions\\ProfileGrammar.g3:59:0: func : ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ; - private ProfileGrammarParser.func_return func( ) - { - ProfileGrammarParser.func_return retval = new ProfileGrammarParser.func_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken ID11=null; - IToken char_literal12=null; - IToken char_literal14=null; - IToken char_literal15=null; - ProfileGrammarParser.formalPar_return formalPar13 = default(ProfileGrammarParser.formalPar_return); - ProfileGrammarParser.expr_return expr16 = default(ProfileGrammarParser.expr_return); - - CommonTree ID11_tree=null; - CommonTree char_literal12_tree=null; - CommonTree char_literal14_tree=null; - CommonTree char_literal15_tree=null; - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); - RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); - RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); - RewriteRuleSubtreeStream stream_formalPar=new RewriteRuleSubtreeStream(adaptor,"rule formalPar"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - try - { - dbg.EnterRule( GrammarFileName, "func" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 59, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:59:9: ( ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:59:9: ID '(' formalPar ')' '=' expr - { - dbg.Location( 59, 8 ); - ID11=(IToken)Match(input,ID,Follow._ID_in_func219); - stream_ID.Add(ID11); - - dbg.Location( 59, 12 ); - char_literal12=(IToken)Match(input,12,Follow._12_in_func222); - stream_12.Add(char_literal12); - - dbg.Location( 59, 16 ); - PushFollow(Follow._formalPar_in_func224); - formalPar13=formalPar(); - - state._fsp--; - - stream_formalPar.Add(formalPar13.Tree); - dbg.Location( 59, 26 ); - char_literal14=(IToken)Match(input,13,Follow._13_in_func226); - stream_13.Add(char_literal14); - - dbg.Location( 59, 30 ); - char_literal15=(IToken)Match(input,17,Follow._17_in_func228); - stream_17.Add(char_literal15); - - dbg.Location( 59, 34 ); - PushFollow(Follow._expr_in_func230); - expr16=expr(); - - state._fsp--; - - stream_expr.Add(expr16.Tree); - - - { - // AST REWRITE - // elements: ID, formalPar, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 59:41: -> ^( FUNC ID formalPar expr ) - { - dbg.Location( 59, 43 ); - // BuildOptions\\ProfileGrammar.g3:59:44: ^( FUNC ID formalPar expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 59, 45 ); - root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNC, "FUNC"), root_1); - - dbg.Location( 59, 50 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 59, 53 ); - adaptor.AddChild(root_1, stream_formalPar.NextTree()); - dbg.Location( 59, 63 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - - functionDefinitions.Add(((CommonTree)retval.Tree)); - - } - dbg.Location(60, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "func" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "func" - - public class formalPar_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "formalPar" - // BuildOptions\\ProfileGrammar.g3:65:0: formalPar : ( ID | INT ); - private ProfileGrammarParser.formalPar_return formalPar( ) - { - ProfileGrammarParser.formalPar_return retval = new ProfileGrammarParser.formalPar_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken set17=null; - - CommonTree set17_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "formalPar" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 65, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:66:9: ( ID | INT ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3: - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 66, 8 ); - set17=(IToken)input.LT(1); - if ( (input.LA(1)>=ID && input.LA(1)<=INT) ) - { - input.Consume(); - adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set17)); - state.errorRecovery=false; - } - else - { - MismatchedSetException mse = new MismatchedSetException(null,input); - dbg.RecognitionException( mse ); - throw mse; - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(68, 1); - - } - finally - { - dbg.ExitRule( GrammarFileName, "formalPar" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "formalPar" - - public class expr_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "expr" - // BuildOptions\\ProfileGrammar.g3:73:0: expr : multExpr ( ( '+' | '-' ) multExpr )* ; - private ProfileGrammarParser.expr_return expr( ) - { - ProfileGrammarParser.expr_return retval = new ProfileGrammarParser.expr_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken char_literal19=null; - IToken char_literal20=null; - ProfileGrammarParser.multExpr_return multExpr18 = default(ProfileGrammarParser.multExpr_return); - ProfileGrammarParser.multExpr_return multExpr21 = default(ProfileGrammarParser.multExpr_return); - - CommonTree char_literal19_tree=null; - CommonTree char_literal20_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "expr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 73, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:73:9: ( multExpr ( ( '+' | '-' ) multExpr )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:73:9: multExpr ( ( '+' | '-' ) multExpr )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 73, 8 ); - PushFollow(Follow._multExpr_in_expr288); - multExpr18=multExpr(); - - state._fsp--; - - adaptor.AddChild(root_0, multExpr18.Tree); - dbg.Location( 73, 17 ); - // BuildOptions\\ProfileGrammar.g3:73:18: ( ( '+' | '-' ) multExpr )* - try - { - dbg.EnterSubRule( 4 ); - - for ( ; ; ) - { - int alt4=2; - try - { - dbg.EnterDecision( 4 ); - - int LA4_0 = input.LA(1); - - if ( (LA4_0==10||LA4_0==16) ) - { - alt4=1; - } - - - } - finally - { - dbg.ExitDecision( 4 ); - } - - switch ( alt4 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:73:19: ( '+' | '-' ) multExpr - { - dbg.Location( 73, 18 ); - // BuildOptions\\ProfileGrammar.g3:73:19: ( '+' | '-' ) - int alt3=2; - try - { - dbg.EnterSubRule( 3 ); - try - { - dbg.EnterDecision( 3 ); - - int LA3_0 = input.LA(1); - - if ( (LA3_0==16) ) - { - alt3=1; - } - else if ( (LA3_0==10) ) - { - alt3=2; - } - else - { - NoViableAltException nvae = new NoViableAltException("", 3, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - finally - { - dbg.ExitDecision( 3 ); - } - - switch ( alt3 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:73:20: '+' - { - dbg.Location( 73, 22 ); - char_literal19=(IToken)Match(input,16,Follow._16_in_expr292); - char_literal19_tree = (CommonTree)adaptor.Create(char_literal19); - root_0 = (CommonTree)adaptor.BecomeRoot(char_literal19_tree, root_0); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\ProfileGrammar.g3:73:25: '-' - { - dbg.Location( 73, 27 ); - char_literal20=(IToken)Match(input,10,Follow._10_in_expr295); - char_literal20_tree = (CommonTree)adaptor.Create(char_literal20); - root_0 = (CommonTree)adaptor.BecomeRoot(char_literal20_tree, root_0); - - - } - break; - - } - } - finally - { - dbg.ExitSubRule( 3 ); - } - - dbg.Location( 73, 30 ); - PushFollow(Follow._multExpr_in_expr299); - multExpr21=multExpr(); - - state._fsp--; - - adaptor.AddChild(root_0, multExpr21.Tree); - - } - break; - - default: - goto loop4; - } - } - - loop4: - ; - - } - finally - { - dbg.ExitSubRule( 4 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(74, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "expr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "expr" - - public class multExpr_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "multExpr" - // BuildOptions\\ProfileGrammar.g3:76:0: multExpr : atom ( ( '*' | '/' | '%' ) atom )* ; - private ProfileGrammarParser.multExpr_return multExpr( ) - { - ProfileGrammarParser.multExpr_return retval = new ProfileGrammarParser.multExpr_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken set23=null; - ProfileGrammarParser.atom_return atom22 = default(ProfileGrammarParser.atom_return); - ProfileGrammarParser.atom_return atom24 = default(ProfileGrammarParser.atom_return); - - CommonTree set23_tree=null; - - try - { - dbg.EnterRule( GrammarFileName, "multExpr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 76, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:77:9: ( atom ( ( '*' | '/' | '%' ) atom )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:77:9: atom ( ( '*' | '/' | '%' ) atom )* - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 77, 8 ); - PushFollow(Follow._atom_in_multExpr320); - atom22=atom(); - - state._fsp--; - - adaptor.AddChild(root_0, atom22.Tree); - dbg.Location( 77, 13 ); - // BuildOptions\\ProfileGrammar.g3:77:14: ( ( '*' | '/' | '%' ) atom )* - try - { - dbg.EnterSubRule( 5 ); - - for ( ; ; ) - { - int alt5=2; - try - { - dbg.EnterDecision( 5 ); - - int LA5_0 = input.LA(1); - - if ( (LA5_0==11||(LA5_0>=14 && LA5_0<=15)) ) - { - alt5=1; - } - - - } - finally - { - dbg.ExitDecision( 5 ); - } - - switch ( alt5 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:77:15: ( '*' | '/' | '%' ) atom - { - dbg.Location( 77, 27 ); - set23=(IToken)input.LT(1); - set23=(IToken)input.LT(1); - if ( input.LA(1)==11||(input.LA(1)>=14 && input.LA(1)<=15) ) - { - input.Consume(); - root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set23), root_0); - state.errorRecovery=false; - } - else - { - MismatchedSetException mse = new MismatchedSetException(null,input); - dbg.RecognitionException( mse ); - throw mse; - } - - dbg.Location( 77, 29 ); - PushFollow(Follow._atom_in_multExpr332); - atom24=atom(); - - state._fsp--; - - adaptor.AddChild(root_0, atom24.Tree); - - } - break; - - default: - goto loop5; - } - } - - loop5: - ; - - } - finally - { - dbg.ExitSubRule( 5 ); - } - - - } - - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(78, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "multExpr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "multExpr" - - public class atom_return : ParserRuleReturnScope - { - internal CommonTree tree; - public override object Tree { get { return tree; } } - } - - // $ANTLR start "atom" - // BuildOptions\\ProfileGrammar.g3:80:0: atom : ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ); - private ProfileGrammarParser.atom_return atom( ) - { - ProfileGrammarParser.atom_return retval = new ProfileGrammarParser.atom_return(); - retval.start = input.LT(1); - - CommonTree root_0 = null; - - IToken INT25=null; - IToken ID26=null; - IToken char_literal27=null; - IToken char_literal29=null; - IToken ID30=null; - IToken char_literal31=null; - IToken char_literal33=null; - ProfileGrammarParser.expr_return expr28 = default(ProfileGrammarParser.expr_return); - ProfileGrammarParser.expr_return expr32 = default(ProfileGrammarParser.expr_return); - - CommonTree INT25_tree=null; - CommonTree ID26_tree=null; - CommonTree char_literal27_tree=null; - CommonTree char_literal29_tree=null; - CommonTree ID30_tree=null; - CommonTree char_literal31_tree=null; - CommonTree char_literal33_tree=null; - RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); - RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); - RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); - RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); - try - { - dbg.EnterRule( GrammarFileName, "atom" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 80, -1 ); - - try - { - // BuildOptions\\ProfileGrammar.g3:80:9: ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ) - int alt6=4; - try - { - dbg.EnterDecision( 6 ); - - switch ( input.LA(1) ) - { - case INT: - { - alt6=1; - } - break; - case ID: - { - int LA6_2 = input.LA(2); - - if ( (LA6_2==12) ) - { - alt6=4; - } - else if ( (LA6_2==NEWLINE||(LA6_2>=10 && LA6_2<=11)||(LA6_2>=13 && LA6_2<=16)) ) - { - alt6=2; - } - else - { - NoViableAltException nvae = new NoViableAltException("", 6, 2, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - break; - case 12: - { - alt6=3; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 6, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 6 ); - } - - switch ( alt6 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileGrammar.g3:80:9: INT - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 80, 8 ); - INT25=(IToken)Match(input,INT,Follow._INT_in_atom348); - INT25_tree = (CommonTree)adaptor.Create(INT25); - adaptor.AddChild(root_0, INT25_tree); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\ProfileGrammar.g3:81:9: ID - { - root_0 = (CommonTree)adaptor.Nil(); - - dbg.Location( 81, 8 ); - ID26=(IToken)Match(input,ID,Follow._ID_in_atom358); - ID26_tree = (CommonTree)adaptor.Create(ID26); - adaptor.AddChild(root_0, ID26_tree); - - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\ProfileGrammar.g3:82:9: '(' expr ')' - { - dbg.Location( 82, 8 ); - char_literal27=(IToken)Match(input,12,Follow._12_in_atom368); - stream_12.Add(char_literal27); - - dbg.Location( 82, 12 ); - PushFollow(Follow._expr_in_atom370); - expr28=expr(); - - state._fsp--; - - stream_expr.Add(expr28.Tree); - dbg.Location( 82, 17 ); - char_literal29=(IToken)Match(input,13,Follow._13_in_atom372); - stream_13.Add(char_literal29); - - - - { - // AST REWRITE - // elements: expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 82:25: -> expr - { - dbg.Location( 82, 27 ); - adaptor.AddChild(root_0, stream_expr.NextTree()); - - } - - retval.tree = root_0; - } - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\ProfileGrammar.g3:83:9: ID '(' expr ')' - { - dbg.Location( 83, 8 ); - ID30=(IToken)Match(input,ID,Follow._ID_in_atom389); - stream_ID.Add(ID30); - - dbg.Location( 83, 11 ); - char_literal31=(IToken)Match(input,12,Follow._12_in_atom391); - stream_12.Add(char_literal31); - - dbg.Location( 83, 15 ); - PushFollow(Follow._expr_in_atom393); - expr32=expr(); - - state._fsp--; - - stream_expr.Add(expr32.Tree); - dbg.Location( 83, 20 ); - char_literal33=(IToken)Match(input,13,Follow._13_in_atom395); - stream_13.Add(char_literal33); - - - - { - // AST REWRITE - // elements: ID, expr - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (CommonTree)adaptor.Nil(); - // 83:25: -> ^( CALL ID expr ) - { - dbg.Location( 83, 27 ); - // BuildOptions\\ProfileGrammar.g3:83:28: ^( CALL ID expr ) - { - CommonTree root_1 = (CommonTree)adaptor.Nil(); - dbg.Location( 83, 29 ); - root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(CALL, "CALL"), root_1); - - dbg.Location( 83, 34 ); - adaptor.AddChild(root_1, stream_ID.NextNode()); - dbg.Location( 83, 37 ); - adaptor.AddChild(root_1, stream_expr.NextTree()); - - adaptor.AddChild(root_0, root_1); - } - - } - - retval.tree = root_0; - } - - } - break; - - } - retval.stop = input.LT(-1); - - retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); - adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); - - } - finally - { - } - dbg.Location(84, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "atom" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return retval; - } - // $ANTLR end "atom" - #endregion Rules - - - #region DFA - DFA2 dfa2; - - protected override void InitDFAs() - { - base.InitDFAs(); - dfa2 = new DFA2( this ); - } - - class DFA2 : DFA - { - - const string DFA2_eotS = - "\xA\xFFFF"; - const string DFA2_eofS = - "\xA\xFFFF"; - const string DFA2_minS = - "\x1\x6\x1\xFFFF\x1\x8\x1\xFFFF\x1\x6\x1\xFFFF\x2\xA\x1\x8\x1\xFFFF"; - const string DFA2_maxS = - "\x1\xC\x1\xFFFF\x1\x11\x1\xFFFF\x1\xC\x1\xFFFF\x2\x10\x1\x11\x1\xFFFF"; - const string DFA2_acceptS = - "\x1\xFFFF\x1\x1\x1\xFFFF\x1\x4\x1\xFFFF\x1\x2\x3\xFFFF\x1\x3"; - const string DFA2_specialS = - "\xA\xFFFF}>"; - static readonly string[] DFA2_transitionS = - { - "\x1\x2\x1\x1\x1\x3\x3\xFFFF\x1\x1", - "", - "\x1\x1\x1\xFFFF\x2\x1\x1\x4\x1\xFFFF\x3\x1\x1\x5", - "", - "\x1\x7\x1\x6\x4\xFFFF\x1\x1", - "", - "\x2\x1\x1\xFFFF\x1\x8\x3\x1", - "\x3\x1\x1\x8\x3\x1", - "\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x3\x1\x1\x9", - "" - }; - - static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS); - static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS); - static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS); - static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS); - static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS); - static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS); - static readonly short[][] DFA2_transition; - - static DFA2() - { - int numStates = DFA2_transitionS.Length; - DFA2_transition = new short[numStates][]; - for ( int i=0; i < numStates; i++ ) - { - DFA2_transition[i] = DFA.UnpackEncodedString(DFA2_transitionS[i]); - } - } - - public DFA2( BaseRecognizer recognizer ) - { - this.recognizer = recognizer; - this.decisionNumber = 2; - this.eot = DFA2_eot; - this.eof = DFA2_eof; - this.min = DFA2_min; - this.max = DFA2_max; - this.accept = DFA2_accept; - this.special = DFA2_special; - this.transition = DFA2_transition; - } - public override string GetDescription() - { - return "53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->);"; - } - public override void Error( NoViableAltException nvae ) - { - ((DebugParser)recognizer).dbg.RecognitionException( nvae ); - } - } - - - #endregion DFA - - #region Follow sets - private static class Follow - { - public static readonly BitSet _stat_in_prog53 = new BitSet(new ulong[]{0x11C2UL}); - public static readonly BitSet _expr_in_stat70 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat72 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_stat105 = new BitSet(new ulong[]{0x20000UL}); - public static readonly BitSet _17_in_stat107 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_stat109 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat111 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _func_in_stat143 = new BitSet(new ulong[]{0x100UL}); - public static readonly BitSet _NEWLINE_in_stat145 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _NEWLINE_in_stat178 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_func219 = new BitSet(new ulong[]{0x1000UL}); - public static readonly BitSet _12_in_func222 = new BitSet(new ulong[]{0xC0UL}); - public static readonly BitSet _formalPar_in_func224 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_func226 = new BitSet(new ulong[]{0x20000UL}); - public static readonly BitSet _17_in_func228 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_func230 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _set_in_formalPar267 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _multExpr_in_expr288 = new BitSet(new ulong[]{0x10402UL}); - public static readonly BitSet _16_in_expr292 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _10_in_expr295 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _multExpr_in_expr299 = new BitSet(new ulong[]{0x10402UL}); - public static readonly BitSet _atom_in_multExpr320 = new BitSet(new ulong[]{0xC802UL}); - public static readonly BitSet _set_in_multExpr323 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _atom_in_multExpr332 = new BitSet(new ulong[]{0xC802UL}); - public static readonly BitSet _INT_in_atom348 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_atom358 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _12_in_atom368 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_atom370 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_atom372 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _ID_in_atom389 = new BitSet(new ulong[]{0x1000UL}); - public static readonly BitSet _12_in_atom391 = new BitSet(new ulong[]{0x10C0UL}); - public static readonly BitSet _expr_in_atom393 = new BitSet(new ulong[]{0x2000UL}); - public static readonly BitSet _13_in_atom395 = new BitSet(new ulong[]{0x2UL}); - - } - #endregion Follow sets -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs deleted file mode 100644 index 205a088..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test.BuildOptions -{ - using System.Collections.Generic; - using Antlr.Runtime.Tree; - - partial class ProfileGrammarParser - { - /** List of function definitions. Must point at the FUNC nodes. */ - List functionDefinitions = new List(); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs deleted file mode 100644 index 3608faf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs +++ /dev/null @@ -1,850 +0,0 @@ -// $ANTLR 3.1.2 BuildOptions\\ProfileTreeGrammar.g3 2009-09-30 13:18:19 - -// The variable 'variable' is assigned but its value is never used. -#pragma warning disable 219 -// Unreachable code detected. -#pragma warning disable 162 - - -//import java.util.Map; -//import java.util.HashMap; -using BigInteger = java.math.BigInteger; -using Console = System.Console; - - -using System.Collections.Generic; -using Antlr.Runtime; -using Antlr.Runtime.Tree; -using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream;using Stack = System.Collections.Generic.Stack; -using List = System.Collections.IList; -using ArrayList = System.Collections.Generic.List; - -using Antlr.Runtime.Debug; -using IOException = System.IO.IOException; -[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.1.2")] -[System.CLSCompliant(false)] -public partial class ProfileTreeGrammar : DebugTreeParser -{ - internal static readonly string[] tokenNames = new string[] { - "", "", "", "", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" - }; - public const int EOF=-1; - public const int T__10=10; - public const int T__11=11; - public const int T__12=12; - public const int T__13=13; - public const int T__14=14; - public const int T__15=15; - public const int T__16=16; - public const int T__17=17; - public const int CALL=4; - public const int FUNC=5; - public const int ID=6; - public const int INT=7; - public const int NEWLINE=8; - public const int WS=9; - - // delegates - // delegators - - public static readonly string[] ruleNames = - new string[] - { - "invalidRule", "call", "expr", "prog", "stat" - }; - - int ruleLevel = 0; - public virtual int RuleLevel { get { return ruleLevel; } } - public virtual void IncRuleLevel() { ruleLevel++; } - public virtual void DecRuleLevel() { ruleLevel--; } - public ProfileTreeGrammar( ITreeNodeStream input ) - : this( input, new Profiler(null), new RecognizerSharedState() ) - { - } - public ProfileTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state ) - : base( input, dbg, state ) - { - Profiler p = (Profiler)dbg; - p.setParser(this); - } - - public ProfileTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg ) - : base( input, dbg, new RecognizerSharedState() ) - { - Profiler p = (Profiler)dbg; - p.setParser(this); - } - public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) - { - ((Profiler)dbg).ExamineRuleMemoization(input, ruleIndex, ProfileTreeGrammar.ruleNames[ruleIndex]); - return super.AlreadyParsedRule(input, ruleIndex); - } - - public virtual void Memoize( IIntStream input, int ruleIndex, int ruleStartIndex ) - { - ((Profiler)dbg).Memoize(input, ruleIndex, ruleStartIndex, ProfileTreeGrammar.ruleNames[ruleIndex]); - super.Memoize(input, ruleIndex, ruleStartIndex); - } - protected virtual bool EvalPredicate( bool result, string predicate ) - { - dbg.SemanticPredicate( result, predicate ); - return result; - } - - - public override string[] TokenNames { get { return ProfileTreeGrammar.tokenNames; } } - public override string GrammarFileName { get { return "BuildOptions\\ProfileTreeGrammar.g3"; } } - - - #region Rules - - // $ANTLR start "prog" - // BuildOptions\\ProfileTreeGrammar.g3:53:0: prog : ( stat )* ; - private void prog( ) - { - try - { - dbg.EnterRule( GrammarFileName, "prog" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 53, -1 ); - - try - { - // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( ( stat )* ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( stat )* - { - dbg.Location( 53, 8 ); - // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( stat )* - try - { - dbg.EnterSubRule( 1 ); - - for ( ; ; ) - { - int alt1=2; - try - { - dbg.EnterDecision( 1 ); - - int LA1_0 = input.LA(1); - - if ( ((LA1_0>=CALL && LA1_0<=INT)||(LA1_0>=10 && LA1_0<=11)||(LA1_0>=14 && LA1_0<=17)) ) - { - alt1=1; - } - - - } - finally - { - dbg.ExitDecision( 1 ); - } - - switch ( alt1 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:53:0: stat - { - dbg.Location( 53, 8 ); - PushFollow(Follow._stat_in_prog48); - stat(); - - state._fsp--; - - - } - break; - - default: - goto loop1; - } - } - - loop1: - ; - - } - finally - { - dbg.ExitSubRule( 1 ); - } - - - } - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(54, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "prog" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return ; - } - // $ANTLR end "prog" - - - // $ANTLR start "stat" - // BuildOptions\\ProfileTreeGrammar.g3:56:0: stat : ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ); - private void stat( ) - { - CommonTree ID2=null; - BigInteger expr1 = default(BigInteger); - BigInteger expr3 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "stat" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 56, -1 ); - - try - { - // BuildOptions\\ProfileTreeGrammar.g3:56:9: ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ) - int alt3=3; - try - { - dbg.EnterDecision( 3 ); - - switch ( input.LA(1) ) - { - case CALL: - case ID: - case INT: - case 10: - case 11: - case 14: - case 15: - case 16: - { - alt3=1; - } - break; - case 17: - { - alt3=2; - } - break; - case FUNC: - { - alt3=3; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 3, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 3 ); - } - - switch ( alt3 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:56:9: expr - { - dbg.Location( 56, 8 ); - PushFollow(Follow._expr_in_stat63); - expr1=expr(); - - state._fsp--; - - dbg.Location( 56, 35 ); - string result = expr1.ToString(); - Console.Out.WriteLine(expr1 + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); - - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\ProfileTreeGrammar.g3:59:9: ^( '=' ID expr ) - { - dbg.Location( 59, 8 ); - dbg.Location( 59, 10 ); - Match(input,17,Follow._17_in_stat98); - - Match(input, TokenTypes.Down, null); - dbg.Location( 59, 14 ); - ID2=(CommonTree)Match(input,ID,Follow._ID_in_stat100); - dbg.Location( 59, 17 ); - PushFollow(Follow._expr_in_stat102); - expr3=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 59, 35 ); - globalMemory[(ID2!=null?ID2.Text:null)] = expr3; - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\ProfileTreeGrammar.g3:60:9: ^( FUNC ( . )+ ) - { - dbg.Location( 60, 8 ); - dbg.Location( 60, 10 ); - Match(input,FUNC,Follow._FUNC_in_stat128); - - Match(input, TokenTypes.Down, null); - dbg.Location( 60, 15 ); - // BuildOptions\\ProfileTreeGrammar.g3:60:16: ( . )+ - int cnt2=0; - try - { - dbg.EnterSubRule( 2 ); - - for ( ; ; ) - { - int alt2=2; - try - { - dbg.EnterDecision( 2 ); - - int LA2_0 = input.LA(1); - - if ( ((LA2_0>=CALL && LA2_0<=17)) ) - { - alt2=1; - } - else if ( (LA2_0==UP) ) - { - alt2=2; - } - - - } - finally - { - dbg.ExitDecision( 2 ); - } - - switch ( alt2 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:60:0: . - { - dbg.Location( 60, 15 ); - MatchAny(input); - - } - break; - - default: - if ( cnt2 >= 1 ) - goto loop2; - - EarlyExitException eee2 = new EarlyExitException( 2, input ); - dbg.RecognitionException( eee2 ); - - throw eee2; - } - cnt2++; - } - loop2: - ; - - } - finally - { - dbg.ExitSubRule( 2 ); - } - - - Match(input, TokenTypes.Up, null); - - } - break; - - } - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(61, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "stat" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return ; - } - // $ANTLR end "stat" - - - // $ANTLR start "expr" - // BuildOptions\\ProfileTreeGrammar.g3:63:0: expr returns [BigInteger value] : ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ); - private BigInteger expr( ) - { - BigInteger value = default(BigInteger); - - CommonTree ID4=null; - CommonTree INT5=null; - BigInteger a = default(BigInteger); - BigInteger b = default(BigInteger); - BigInteger call6 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "expr" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 63, -1 ); - - try - { - // BuildOptions\\ProfileTreeGrammar.g3:64:9: ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ) - int alt4=8; - try - { - dbg.EnterDecision( 4 ); - - switch ( input.LA(1) ) - { - case 16: - { - alt4=1; - } - break; - case 10: - { - alt4=2; - } - break; - case 14: - { - alt4=3; - } - break; - case 15: - { - alt4=4; - } - break; - case 11: - { - alt4=5; - } - break; - case ID: - { - alt4=6; - } - break; - case INT: - { - alt4=7; - } - break; - case CALL: - { - alt4=8; - } - break; - default: - { - NoViableAltException nvae = new NoViableAltException("", 4, 0, input); - - dbg.RecognitionException( nvae ); - throw nvae; - } - } - - } - finally - { - dbg.ExitDecision( 4 ); - } - - switch ( alt4 ) - { - case 1: - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:64:9: ^( '+' a= expr b= expr ) - { - dbg.Location( 64, 8 ); - dbg.Location( 64, 10 ); - Match(input,16,Follow._16_in_expr172); - - Match(input, TokenTypes.Down, null); - dbg.Location( 64, 15 ); - PushFollow(Follow._expr_in_expr176); - a=expr(); - - state._fsp--; - - dbg.Location( 64, 22 ); - PushFollow(Follow._expr_in_expr180); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 64, 35 ); - value = a.add(b); - - } - break; - case 2: - dbg.EnterAlt( 2 ); - - // BuildOptions\\ProfileTreeGrammar.g3:65:9: ^( '-' a= expr b= expr ) - { - dbg.Location( 65, 8 ); - dbg.Location( 65, 10 ); - Match(input,10,Follow._10_in_expr200); - - Match(input, TokenTypes.Down, null); - dbg.Location( 65, 15 ); - PushFollow(Follow._expr_in_expr204); - a=expr(); - - state._fsp--; - - dbg.Location( 65, 22 ); - PushFollow(Follow._expr_in_expr208); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 65, 35 ); - value = a.subtract(b); - - } - break; - case 3: - dbg.EnterAlt( 3 ); - - // BuildOptions\\ProfileTreeGrammar.g3:66:9: ^( '*' a= expr b= expr ) - { - dbg.Location( 66, 8 ); - dbg.Location( 66, 10 ); - Match(input,14,Follow._14_in_expr228); - - Match(input, TokenTypes.Down, null); - dbg.Location( 66, 15 ); - PushFollow(Follow._expr_in_expr232); - a=expr(); - - state._fsp--; - - dbg.Location( 66, 22 ); - PushFollow(Follow._expr_in_expr236); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 66, 35 ); - value = a.multiply(b); - - } - break; - case 4: - dbg.EnterAlt( 4 ); - - // BuildOptions\\ProfileTreeGrammar.g3:67:9: ^( '/' a= expr b= expr ) - { - dbg.Location( 67, 8 ); - dbg.Location( 67, 10 ); - Match(input,15,Follow._15_in_expr256); - - Match(input, TokenTypes.Down, null); - dbg.Location( 67, 15 ); - PushFollow(Follow._expr_in_expr260); - a=expr(); - - state._fsp--; - - dbg.Location( 67, 22 ); - PushFollow(Follow._expr_in_expr264); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 67, 35 ); - value = a.divide(b); - - } - break; - case 5: - dbg.EnterAlt( 5 ); - - // BuildOptions\\ProfileTreeGrammar.g3:68:9: ^( '%' a= expr b= expr ) - { - dbg.Location( 68, 8 ); - dbg.Location( 68, 10 ); - Match(input,11,Follow._11_in_expr284); - - Match(input, TokenTypes.Down, null); - dbg.Location( 68, 15 ); - PushFollow(Follow._expr_in_expr288); - a=expr(); - - state._fsp--; - - dbg.Location( 68, 22 ); - PushFollow(Follow._expr_in_expr292); - b=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 68, 35 ); - value = a.remainder(b); - - } - break; - case 6: - dbg.EnterAlt( 6 ); - - // BuildOptions\\ProfileTreeGrammar.g3:69:9: ID - { - dbg.Location( 69, 8 ); - ID4=(CommonTree)Match(input,ID,Follow._ID_in_expr311); - dbg.Location( 69, 35 ); - value = getValue((ID4!=null?ID4.Text:null)); - - } - break; - case 7: - dbg.EnterAlt( 7 ); - - // BuildOptions\\ProfileTreeGrammar.g3:70:9: INT - { - dbg.Location( 70, 8 ); - INT5=(CommonTree)Match(input,INT,Follow._INT_in_expr347); - dbg.Location( 70, 35 ); - value = new BigInteger((INT5!=null?INT5.Text:null)); - - } - break; - case 8: - dbg.EnterAlt( 8 ); - - // BuildOptions\\ProfileTreeGrammar.g3:71:9: call - { - dbg.Location( 71, 8 ); - PushFollow(Follow._call_in_expr382); - call6=call(); - - state._fsp--; - - dbg.Location( 71, 35 ); - value = call6; - - } - break; - - } - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(72, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "expr" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return value; - } - // $ANTLR end "expr" - - - // $ANTLR start "call" - // BuildOptions\\ProfileTreeGrammar.g3:74:0: call returns [BigInteger value] : ^( CALL ID expr ) ; - private BigInteger call( ) - { - BigInteger value = default(BigInteger); - - CommonTree ID8=null; - BigInteger expr7 = default(BigInteger); - - try - { - dbg.EnterRule( GrammarFileName, "call" ); - if ( RuleLevel == 0 ) - { - dbg.Commence(); - } - IncRuleLevel(); - dbg.Location( 74, -1 ); - - try - { - // BuildOptions\\ProfileTreeGrammar.g3:75:9: ( ^( CALL ID expr ) ) - dbg.EnterAlt( 1 ); - - // BuildOptions\\ProfileTreeGrammar.g3:75:9: ^( CALL ID expr ) - { - dbg.Location( 75, 8 ); - dbg.Location( 75, 10 ); - Match(input,CALL,Follow._CALL_in_call430); - - Match(input, TokenTypes.Down, null); - dbg.Location( 75, 15 ); - ID8=(CommonTree)Match(input,ID,Follow._ID_in_call432); - dbg.Location( 75, 18 ); - PushFollow(Follow._expr_in_call434); - expr7=expr(); - - state._fsp--; - - - Match(input, TokenTypes.Up, null); - dbg.Location( 75, 35 ); - BigInteger p = expr7; - CommonTree funcRoot = findFunction((ID8!=null?ID8.Text:null), p); - if (funcRoot == null) { - Console.Error.WriteLine("No match found for " + (ID8!=null?ID8.Text:null) + "(" + p + ")"); - } else { - // Here we set up the local evaluator to run over the - // function definition with the parameter value. - // This re-reads a sub-AST of our input AST! - ProfileTreeGrammar e = new ProfileTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); - value = e.expr(); - } - - - } - - } - catch ( RecognitionException re ) - { - ReportError(re); - Recover(input,re); - } - finally - { - } - dbg.Location(87, 4); - - } - finally - { - dbg.ExitRule( GrammarFileName, "call" ); - DecRuleLevel(); - if ( RuleLevel == 0 ) - { - dbg.Terminate(); - } - } - - return value; - } - // $ANTLR end "call" - #endregion Rules - - - #region Follow sets - private static class Follow - { - public static readonly BitSet _stat_in_prog48 = new BitSet(new ulong[]{0x3CCF2UL}); - public static readonly BitSet _expr_in_stat63 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _17_in_stat98 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _ID_in_stat100 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_stat102 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _FUNC_in_stat128 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _16_in_expr172 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr176 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr180 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _10_in_expr200 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr204 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr208 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _14_in_expr228 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr232 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr236 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _15_in_expr256 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr260 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr264 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _11_in_expr284 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _expr_in_expr288 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_expr292 = new BitSet(new ulong[]{0x8UL}); - public static readonly BitSet _ID_in_expr311 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _INT_in_expr347 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _call_in_expr382 = new BitSet(new ulong[]{0x2UL}); - public static readonly BitSet _CALL_in_call430 = new BitSet(new ulong[]{0x4UL}); - public static readonly BitSet _ID_in_call432 = new BitSet(new ulong[]{0x1CCD0UL}); - public static readonly BitSet _expr_in_call434 = new BitSet(new ulong[]{0x8UL}); - - } - #endregion Follow sets -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 deleted file mode 100644 index 5bf107b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 +++ /dev/null @@ -1,90 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -tree grammar ProfileTreeGrammar; - -options -{ - language=CSharp3; - tokenVocab=ProfileGrammar; - ASTLabelType=CommonTree; -} - -// START:members -@header -{ -//import java.util.Map; -//import java.util.HashMap; -using BigInteger = java.math.BigInteger; -using Console = System.Console; -} -// END:members - -@namespace{Antlr3.Runtime.Test.BuildOptions} - -// START:rules -prog: stat* - ; - -stat: expr { string result = $expr.value.ToString(); - Console.Out.WriteLine($expr.value + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); - } - | ^('=' ID expr) { globalMemory[$ID.text] = $expr.value; } - | ^(FUNC .+) // ignore FUNCs - we added them to functionDefinitions already in parser. - ; - -expr returns [BigInteger value] - : ^('+' a=expr b=expr) { $value = $a.value.add($b.value); } - | ^('-' a=expr b=expr) { $value = $a.value.subtract($b.value); } - | ^('*' a=expr b=expr) { $value = $a.value.multiply($b.value); } - | ^('/' a=expr b=expr) { $value = $a.value.divide($b.value); } - | ^('%' a=expr b=expr) { $value = $a.value.remainder($b.value); } - | ID { $value = getValue($ID.text); } - | INT { $value = new BigInteger($INT.text); } - | call { $value = $call.value; } - ; - -call returns [BigInteger value] - : ^(CALL ID expr) { BigInteger p = $expr.value; - CommonTree funcRoot = findFunction($ID.text, p); - if (funcRoot == null) { - Console.Error.WriteLine("No match found for " + $ID.text + "(" + p + ")"); - } else { - // Here we set up the local evaluator to run over the - // function definition with the parameter value. - // This re-reads a sub-AST of our input AST! - ProfileTreeGrammar e = new ProfileTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); - $value = e.expr(); - } - } - ; -// END:rules diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs deleted file mode 100644 index 06d678a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs +++ /dev/null @@ -1,119 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test.BuildOptions -{ - using System.Collections.Generic; - using Antlr.Runtime.Tree; - - using BigInteger = java.math.BigInteger; - using Console = System.Console; - - partial class ProfileTreeGrammar - { - /** Points to functions tracked by tree builder. */ - private List functionDefinitions; - - /** Remember local variables. Currently, this is only the function parameter. - */ - private readonly IDictionary localMemory = new Dictionary(); - - /** Remember global variables set by =. */ - private IDictionary globalMemory = new Dictionary(); - - /** Set up an evaluator with a node stream; and a set of function definition ASTs. */ - public ProfileTreeGrammar(CommonTreeNodeStream nodes, List functionDefinitions) - : this(nodes) - { - this.functionDefinitions = functionDefinitions; - } - - /** Set up a local evaluator for a nested function call. The evaluator gets the definition - * tree of the function; the set of all defined functions (to find locally called ones); a - * pointer to the global variable memory; and the value of the function parameter to be - * added to the local memory. - */ - private ProfileTreeGrammar(CommonTree function, - List functionDefinitions, - IDictionary globalMemory, - BigInteger paramValue) - // Expected tree for function: ^(FUNC ID ( INT | ID ) expr) - : this(new CommonTreeNodeStream(function.GetChild(2)), functionDefinitions) - { - this.globalMemory = globalMemory; - localMemory[function.GetChild(1).Text] = paramValue; - } - - /** Find matching function definition for a function name and parameter - * value. The first definition is returned where (a) the name matches - * and (b) the formal parameter agrees if it is defined as constant. - */ - private CommonTree findFunction(string name, BigInteger paramValue) - { - foreach (CommonTree f in functionDefinitions) - { - // Expected tree for f: ^(FUNC ID (ID | INT) expr) - if (f.GetChild(0).Text.Equals(name)) - { - // Check whether parameter matches - CommonTree formalPar = (CommonTree)f.GetChild(1); - if (formalPar.Token.Type == INT - && !new BigInteger(formalPar.Token.Text).Equals(paramValue)) - { - // Constant in formalPar list does not match actual value -> no match. - continue; - } - // Parameter (value for INT formal arg) as well as fct name agrees! - return f; - } - } - return null; - } - - /** Get value of name up call stack. */ - public BigInteger getValue(string name) - { - BigInteger value; - if (localMemory.TryGetValue(name, out value) && value != null) - { - return value; - } - if (globalMemory.TryGetValue(name, out value) && value != null) - { - return value; - } - // not found in local memory or global memory - Console.Error.WriteLine("undefined variable " + name); - return new BigInteger("0"); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Program.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Program.cs deleted file mode 100644 index c2aaf02..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Program.cs +++ /dev/null @@ -1,54 +0,0 @@ -namespace Antlr3.Runtime.Test.Composition -{ - using System; - using Antlr.Runtime; - using Antlr.Runtime.Tree; - - internal class Program - { - private static void _Main(string[] args) - { - // input "x = 2*(3+3)" - - ICharStream input; - if (args.Length > 0) - { - if (args[0].Equals("-i")) - { - if (args.Length > 1) - { - input = new ANTLRFileStream(args[1]); - } - else - { - throw new Exception("No input file specified."); - } - } - else - { - input = new ANTLRStringStream(args[0]); - } - } - else - { - input = new ANTLRInputStream(Console.OpenStandardInput()); - } - - var lex = new VecMathLexer(input); - var tokens = new CommonTokenStream(lex); - var g = new VecMathParser(tokens); - IAstRuleReturnScope r = g.prog(); - CommonTree t = r.Tree; - Console.WriteLine("Original tree: " + t.ToStringTree()); - - var simplify = new Simplify(new CommonTreeNodeStream(t)); - t = (CommonTree)simplify.Downup(t); - - var reduce = new Reduce(new CommonTreeNodeStream(t)); - t = (CommonTree)reduce.Downup(t); - - Console.WriteLine("Simplified tree: " + t.ToStringTree()); - Console.ReadKey(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Reduce.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Reduce.g3 deleted file mode 100644 index db61e42..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Reduce.g3 +++ /dev/null @@ -1,20 +0,0 @@ -tree grammar Reduce; - -options -{ - tokenVocab=VecMath; - ASTLabelType=CommonTree; - output=AST; - filter=true; - language=CSharp3; -} - -@namespace{Antlr3.Runtime.Test.Composition} - -/** Rewrite: x+x to be 2*x, 2*x to be x<<1, x< ^(MULT["*"] INT["2"] $j) - | ^(MULT x=INT {$x.int==2}? y=.) -> ^(SHIFT["<<"] $y INT["1"]) - | ^(SHIFT ^(SHIFT e=. n=INT) m=INT) - -> ^(SHIFT["<<"] $e INT[($n.int+$m.int).ToString()]) - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Simplify.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Simplify.g3 deleted file mode 100644 index f1c2550..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/Simplify.g3 +++ /dev/null @@ -1,20 +0,0 @@ -tree grammar Simplify; - -options { - tokenVocab=VecMath; - ASTLabelType=CommonTree; - output=AST; - language=CSharp3; - filter=true; - //rewrite=true; -} - -@namespace{Antlr3.Runtime.Test.Composition} - -topdown - : ^( MULT INT ^(VEC (e+=.)+) ) -> ^(VEC ^(MULT INT $e)+) - ; - -bottomup - : ^(MULT a=. b=INT {$b.int==0}?) -> $b // x*0 -> 0 - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath.g3 deleted file mode 100644 index f61a7f8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath.g3 +++ /dev/null @@ -1,22 +0,0 @@ -grammar VecMath; - -options -{ - ASTLabelType=CommonTree; - output=AST; - language=CSharp3; -} - -import VecMath_Lexer, VecMath_Parser; - -@lexer::namespace{Antlr3.Runtime.Test.Composition} -@parser::namespace{Antlr3.Runtime.Test.Composition} - -public -main - : prog - ; - -dummy - : 'DUMMY' // 1. If the parser or the composite grammar does not contain a token, no lexer is generated. - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Lexer.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Lexer.g3 deleted file mode 100644 index fde3390..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Lexer.g3 +++ /dev/null @@ -1,17 +0,0 @@ -lexer grammar VecMath_Lexer; - - -PRINT : 'print'; -ID : 'a'..'z'+ ; -INT : '0'..'9'+ ; -WS : (' '|'\r'|'\n')+ {Skip();} ; -PLUS : '+'; -MINUS : '-'; -MULT : '*'; -EQUAL : '='; -DOT : '.'; -OPEN_BRACE : '('; -OPEN_SQUARE : '['; -CLOSE_BRACE : ')'; -CLOSE_SQUARE : ']'; -COMMA : ','; \ No newline at end of file diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Parser.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Parser.g3 deleted file mode 100644 index 406ec13..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Composition/VecMath_Parser.g3 +++ /dev/null @@ -1,35 +0,0 @@ -parser grammar VecMath_Parser; - -options { - output=AST; -} - -tokens { - SHIFT; - VEC; -} - -public -prog - : stat+ ; - -stat - : ID EQUAL expr -> ^( EQUAL ID expr ) - | PRINT^ expr - ; - -expr - : multExpr ( PLUS^ multExpr )* - ; - -multExpr - : primary ( ( MULT^ | DOT^ ) primary )* - ; - -primary - : INT - | ID - | OPEN_SQUARE expr ( COMMA expr )* CLOSE_SQUARE -> ^( VEC expr+ ) - | OPEN_BRACE expr CLOSE_BRACE -> expr - ; - diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpression.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpression.g3 deleted file mode 100644 index b0d5dfd..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpression.g3 +++ /dev/null @@ -1,88 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar FastSimpleExpression; - -options -{ - language=CSharp3; - //slim=true; - output=AST; - ASTLabelType=CommonTree; -} - -@lexer::superClass{Antlr.Runtime.SlimLexer} -@lexer::namespace{Antlr3.Runtime.Test} -@parser::namespace{Antlr3.Runtime.Test} - -public -expression - : additive_expression - EOF - ; - -additive_expression - : multiplicative_expression - ( ('+'^ | '-'^) - multiplicative_expression - )* - ; - -multiplicative_expression - : atom - ( ('*'^ | '/'^ | '%'^) - atom - )* - ; - -atom - : IDENTIFIER - | NUMBER - ; - -// -// LEXER -// - -IDENTIFIER - : ('a'..'z' | 'A'..'Z' | '_') - ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')* - ; - -NUMBER - : '0'..'9'+ - ; - -WS - : (' ' | '\t' | '\n' | '\r' | '\f') - {$channel = Hidden;} - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionLexerHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionLexerHelper.cs deleted file mode 100644 index 414c260..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionLexerHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionParserHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionParserHelper.cs deleted file mode 100644 index 414c260..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/FastSimpleExpressionParserHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 deleted file mode 100644 index 78c79cc..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 +++ /dev/null @@ -1,113 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar Expr; - -/* - I had to make the following changes to the basic Expr grammar to make it work with the CSharp3 target in "Java compatibility mode". - For reference, see http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator. - - Add an options section to set the language to CSharp3. - - In the @header section, add: - // 'member' is obsolete - #pragma warning disable 612 - using Antlr.Runtime.JavaExtensions; - - In the @header section, replace: - import java.util.HashMap; - with: - using HashMap = System.Collections.Generic.Dictionary; - - Change all instances of "System.out" with "JSystem.@out". - - Change all instances of "System.err" with "JSystem.err". - - Change all instances of "skip()" with "Skip()". - */ - -options -{ - language=CSharp3; -} - -@header { -// 'member' is obsolete -#pragma warning disable 612 - -using Antlr.Runtime.JavaExtensions; -using HashMap = System.Collections.Generic.Dictionary; -using Integer = java.lang.Integer; -} - -@members { -/** Map variable name to Integer object holding value */ -HashMap memory = new HashMap(); -} - -@lexer::namespace{Antlr3.Runtime.Test.JavaCompat} -@parser::namespace{Antlr3.Runtime.Test.JavaCompat} - -prog: stat+ ; - -stat: expr NEWLINE {JSystem.@out.println($expr.value);} - | ID '=' expr NEWLINE - {memory.put($ID.text, new Integer($expr.value));} - | NEWLINE - ; - -expr returns [int value] - : e=multExpr {$value = $e.value;} - ( '+' e=multExpr {$value += $e.value;} - | '-' e=multExpr {$value -= $e.value;} - )* - ; - -multExpr returns [int value] - : e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})* - ; - -atom returns [int value] - : INT {$value = Integer.parseInt($INT.text);} - | ID - { - Integer v = (Integer)memory.get($ID.text); - if ( v!=null ) $value = v.intValue(); - else JSystem.err.println("undefined variable "+$ID.text); - } - | '(' expr ')' {$value = $expr.value;} - ; - -ID : ('a'..'z'|'A'..'Z')+ ; -INT : '0'..'9'+ ; -NEWLINE:'\r'? '\n' ; -WS : (' '|'\t')+ {Skip();} ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3 deleted file mode 100644 index 29655ef..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3 +++ /dev/null @@ -1,69 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -lexer grammar PreprocessorLexer; - -options -{ - language=CSharp3; -} - -@namespace{Antlr3.Runtime.Test} - -PP_SKIPPED_CHARACTERS - : {false}? => ~(F_NEW_LINE_CHARACTER | F_PP_POUND_SIGN) F_INPUT_CHARACTER* - ; - -DELIMITED_COMMENT - : {true}? => '/*' .* '*/' - ; - -WHITESPACE - : F_WHITESPACE {Skip();} - ; - -fragment F_WHITESPACE - : (' ' | '\t' | '\v' | '\f')+ - ; - -fragment F_NEW_LINE_CHARACTER - : '\r' - | '\n' - ; - -fragment F_PP_POUND_SIGN - : '#' - ; - -fragment F_INPUT_CHARACTER - : ~F_NEW_LINE_CHARACTER - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3.cs deleted file mode 100644 index e095fbf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorLexer.g3.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - partial class PreprocessorLexer - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorTests.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorTests.cs deleted file mode 100644 index 967f668..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/PreprocessorTests.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - using System.Collections.Generic; - using Antlr.Runtime; - using Microsoft.VisualStudio.TestTools.UnitTesting; - - [TestClass] - public class PreprocessorTests - { - [TestMethod] - public void TestEmptyComment() - { - string inputText = "/**/ "; - var input = new ANTLRStringStream(inputText); - var lexer = new PreprocessorLexer(input); - var tokenStream = new CommonTokenStream(lexer); - tokenStream.Fill(); - - List tokens = tokenStream.GetTokens(); - Assert.AreEqual(2, tokens.Count); - Assert.AreEqual(PreprocessorLexer.DELIMITED_COMMENT, tokens[0].Type); - Assert.AreEqual("/**/", tokens[0].Text); - Assert.AreEqual(PreprocessorLexer.EOF, tokens[1].Type); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs deleted file mode 100644 index 1e0fc38..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "Antlr3.Runtime.Test" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "Pixel Mine, Inc." )] -[assembly: AssemblyProduct( "Antlr3.Runtime.Test" )] -[assembly: AssemblyCopyright("Copyright © Sam Harwell 2013")] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] -[assembly: CLSCompliant( true )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "1352b15b-eded-4380-9122-acde32f7ff38" )] - -/* Version information for an assembly consists of four values in the following order: - * - * Major.Minor.Build.Revision - * - * These values are updated according to the following: - * 1. Major.Minor follows the ANTLR release schedule - * 2. Build is incremented each time the C# port is packaged for release (regardless - * of whether it's an incremental or nightly). The value resets to zero whenever - * the Major or Minor version is incremented. - * 3. Revision is the Perforce changelist number associated with the release. - */ -[assembly: AssemblyVersion("3.5.0.2")] -[assembly: AssemblyFileVersion("3.5.0.2")] diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3 deleted file mode 100644 index 6593039..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3 +++ /dev/null @@ -1,23 +0,0 @@ -grammar SemanticPredicateReduction; - -options { - language=CSharp3; - TokenLabelType=CommonToken; -} - -@lexer::namespace{Antlr3.Runtime.Test} -@parser::namespace{Antlr3.Runtime.Test} - -start : mainprog optional? EOF; - -mainprog : '(' args ')'; -args : ID ID*; - -optional: ':' args element ':' args element2; -element : {true}?=>args2; -element2: {false}?=>args3; -args2 : ID ID*; -args3 : ID ID* ; - -WS : (' '|'\t'|'\n'|'\r')+; -ID : ('a'..'z')+; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.lexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.lexer.cs deleted file mode 100644 index 14e37f3..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.lexer.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class SemanticPredicateReductionLexer - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.parser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.parser.cs deleted file mode 100644 index 2bb542a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SemanticPredicateReduction.g3.parser.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class SemanticPredicateReductionParser - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpression.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpression.g3 deleted file mode 100644 index d5eb359..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpression.g3 +++ /dev/null @@ -1,83 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar SimpleExpression; - -options -{ - language=CSharp3; - output=AST; - ASTLabelType=CommonTree; -} - -public -expression - : additive_expression - EOF - ; - -additive_expression - : multiplicative_expression - ( ('+'^ | '-'^) - multiplicative_expression - )* - ; - -multiplicative_expression - : atom - ( ('*'^ | '/'^ | '%'^) - atom - )* - ; - -atom - : IDENTIFIER - | NUMBER - ; - -// -// LEXER -// - -IDENTIFIER - : ('a'..'z' | 'A'..'Z' | '_') - ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')* - ; - -NUMBER - : '0'..'9'+ - ; - -WS - : (' ' | '\t' | '\n' | '\r' | '\f') - {$channel = Hidden;} - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionLexerHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionLexerHelper.cs deleted file mode 100644 index 414c260..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionLexerHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionParserHelper.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionParserHelper.cs deleted file mode 100644 index 414c260..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SimpleExpressionParserHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenSource`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenSource`1.cs deleted file mode 100644 index 569c05f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenSource`1.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public interface ITokenSource - : ITokenSource - where T : IToken - { - new T NextToken(); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenStream`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenStream`1.cs deleted file mode 100644 index a8faca6..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/ITokenStream`1.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ -namespace Antlr.Runtime -{ - public interface ITokenStream - where T : IToken - { - T LT(int k); - - T Get(int i); - - ITokenSource TokenSource - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimLexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimLexer.cs deleted file mode 100644 index 3b2ec7f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimLexer.cs +++ /dev/null @@ -1,445 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public abstract class SlimLexer - : BaseRecognizer - , ITokenSource - { - /** Where is the lexer drawing characters from? */ - protected SlimStringStream input; - SlimToken _token; - bool _emitted; - bool _skip; - - public SlimLexer() - { - } - - public SlimLexer( ICharStream input ) - { - this.input = (SlimStringStream)input; - } - - public SlimLexer( ICharStream input, RecognizerSharedState state ) - : base( state ) - { - this.input = (SlimStringStream)input; - } - - #region Properties - public string Text - { - /** Return the text matched so far for the current token or any text override. */ - get - { - if ( state.text != null ) - { - return state.text; - } - return input.Substring( state.tokenStartCharIndex, CharIndex - state.tokenStartCharIndex ); - } - /** Set the complete text of this token; it wipes any previous changes to the text. */ - set - { - state.text = value; - } - } - public int Line - { - get - { - return input.Line; - } - set - { - input.Line = value; - } - } - public int CharPositionInLine - { - get - { - return input.CharPositionInLine; - } - set - { - input.CharPositionInLine = value; - } - } - #endregion - - public override void Reset() - { - base.Reset(); // reset all recognizer state variables - // wack Lexer state variables - if ( input != null ) - { - input.Seek( 0 ); // rewind the input - } - if ( state == null ) - { - return; // no shared state work to do - } - _token = default( SlimToken ); - _emitted = false; - _skip = false; - //state.token = null; - state.type = TokenTypes.Invalid; - state.channel = TokenChannels.Default; - state.tokenStartCharIndex = -1; -#if TRACK_POSITION - state.tokenStartCharPositionInLine = -1; - state.tokenStartLine = -1; -#endif - state.text = null; - } - - /** Return a token from this source; i.e., match a token on the char stream. */ - public virtual SlimToken NextToken() - { - for ( ; ; ) - { - _token = default( SlimToken ); - _emitted = false; - _skip = false; - //state.token = null; - state.channel = TokenChannels.Default; - state.tokenStartCharIndex = input.Index; -#if TRACK_POSITION - state.tokenStartCharPositionInLine = input.CharPositionInLine; - state.tokenStartLine = input.Line; -#endif - state.text = null; - if ( input.LA( 1 ) == CharStreamConstants.EndOfFile ) - { - return new SlimToken(TokenTypes.EndOfFile); - } - try - { - mTokens(); - if ( _skip ) - { - continue; - } - else if ( !_emitted ) - { - Emit(); - } - - return _token; - } - catch ( NoViableAltException nva ) - { - ReportError( nva ); - Recover( nva ); // throw out current char and try again - } - catch ( RecognitionException re ) - { - ReportError( re ); - // match() routine has already called recover() - } - } - } - IToken ITokenSource.NextToken() - { - return NextToken(); - } - - /** - * Instruct the lexer to skip creating a token for current lexer rule - * and look for another token. nextToken() knows to keep looking when - * a lexer rule finishes with token set to SKIP_TOKEN. Recall that - * if token==null at end of any token rule, it creates one for you - * and emits it. - * - */ - public virtual void Skip() - { - _skip = true; - //state.token = Tokens.Skip; - } - - /** This is the lexer entry point that sets instance var 'token' */ - public abstract void mTokens(); - - public ICharStream CharStream - { - get - { - return input; - } - /** Set the char stream and reset the lexer */ - set - { - input = null; - Reset(); - input = (SlimStringStream)value; - } - } - - public override string SourceName - { - get - { - return input.SourceName; - } - } - - ///** - // * Currently does not support multiple emits per nextToken invocation - // * for efficiency reasons. Subclass and override this method and - // * nextToken (to push tokens into a list and pull from that list rather - // * than a single variable as this implementation does). - // * - // */ - //public void Emit( T token ) - //{ - // _token = token; - //} - - /** - * The standard method called to automatically emit a token at the - * outermost lexical rule. The token object should point into the - * char buffer start..stop. If there is a text override in 'text', - * use that to set the token's text. Override this method to emit - * custom Token objects. - * - * - * - * If you are building trees, then you should also override - * Parser or TreeParser.getMissingSymbol(). - * - */ - public void Emit() - { - _token = new SlimToken() - { - //InputStream = input, - Type = state.type, - Channel = state.channel, - //CharPositionInLine = state.tokenStartCharPositionInLine, - //Line = state.tokenStartLine, - //Text = state.text - }; - //Emit( t ); - //return t; - - //IToken t = new CommonToken( input, state.type, state.channel, state.tokenStartCharIndex, CharIndex - 1 ); - //t.Line = state.tokenStartLine; - //t.Text = state.text; - //t.CharPositionInLine = state.tokenStartCharPositionInLine; - //Emit( t ); - //return t; - } - - public void Match( string s ) - { - int i = 0; - while ( i < s.Length ) - { - if ( input.LA( 1 ) != s[i] ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedTokenException mte = new MismatchedTokenException(s[i], input, TokenNames); - Recover( mte ); - throw mte; - } - i++; - input.Consume(); - state.failed = false; - } - } - - public void MatchAny() - { - input.Consume(); - } - - public void Match( int c ) - { - if ( input.LA( 1 ) != c ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedTokenException mte = new MismatchedTokenException(c, input, TokenNames); - Recover( mte ); // don't really recover; just consume in lexer - throw mte; - } - input.Consume(); - state.failed = false; - } - - public void MatchRange( int a, int b ) - { - if ( input.LA( 1 ) < a || input.LA( 1 ) > b ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedRangeException mre = - new MismatchedRangeException( a, b, input ); - Recover( mre ); - throw mre; - } - input.Consume(); - state.failed = false; - } - - /** What is the index of the current character of lookahead? */ - public int CharIndex - { - get - { - return input.Index; - } - } - - public override void ReportError( RecognitionException e ) - { - /** TODO: not thought about recovery in lexer yet. - * - // if we've already reported an error and have not matched a token - // yet successfully, don't report any errors. - if ( errorRecovery ) { - //System.err.print("[SPURIOUS] "); - return; - } - errorRecovery = true; - */ - - DisplayRecognitionError( this.TokenNames, e ); - } - - public override string GetErrorMessage( RecognitionException e, string[] tokenNames ) - { - string msg = null; - if ( e is MismatchedTokenException ) - { - MismatchedTokenException mte = (MismatchedTokenException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting " + GetCharErrorDisplay( mte.Expecting ); - } - else if ( e is NoViableAltException ) - { - NoViableAltException nvae = (NoViableAltException)e; - // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" - // and "(decision="+nvae.decisionNumber+") and - // "state "+nvae.stateNumber - msg = "no viable alternative at character " + GetCharErrorDisplay( e.Character ); - } - else if ( e is EarlyExitException ) - { - EarlyExitException eee = (EarlyExitException)e; - // for development, can add "(decision="+eee.decisionNumber+")" - msg = "required (...)+ loop did not match anything at character " + GetCharErrorDisplay( e.Character ); - } - else if ( e is MismatchedNotSetException ) - { - MismatchedNotSetException mse = (MismatchedNotSetException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + mse.Expecting; - } - else if ( e is MismatchedSetException ) - { - MismatchedSetException mse = (MismatchedSetException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + mse.Expecting; - } - else if ( e is MismatchedRangeException ) - { - MismatchedRangeException mre = (MismatchedRangeException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + - GetCharErrorDisplay( mre.A ) + ".." + GetCharErrorDisplay( mre.B ); - } - else - { - msg = base.GetErrorMessage( e, tokenNames ); - } - return msg; - } - - public virtual string GetCharErrorDisplay( int c ) - { - string s = ( (char)c ).ToString(); - switch ( c ) - { - case TokenTypes.EndOfFile: - s = ""; - break; - case '\n': - s = "\\n"; - break; - case '\t': - s = "\\t"; - break; - case '\r': - s = "\\r"; - break; - } - return "'" + s + "'"; - } - - /** - * Lexers can normally match any char in it's vocabulary after matching - * a token, so do the easy thing and just kill a character and hope - * it all works out. You can instead use the rule invocation stack - * to do sophisticated error recovery if you are in a fragment rule. - * - */ - public virtual void Recover( RecognitionException re ) - { - //System.out.println("consuming char "+(char)input.LA(1)+" during recovery"); - //re.printStackTrace(); - input.Consume(); - } - - public virtual void TraceIn( string ruleName, int ruleIndex ) - { - string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; - base.TraceIn( ruleName, ruleIndex, inputSymbol ); - } - - public virtual void TraceOut( string ruleName, int ruleIndex ) - { - string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; - base.TraceOut( ruleName, ruleIndex, inputSymbol ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimStringStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimStringStream.cs deleted file mode 100644 index b2c5d54..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimStringStream.cs +++ /dev/null @@ -1,334 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -// #define TRACK_POSITION - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - /** - * A pretty quick CharStream that pulls all data from an array - * directly. Every method call counts in the lexer. Java's - * strings aren't very good so I'm avoiding. - * - */ - [System.Serializable] - public class SlimStringStream : ICharStream - { - /** The data being scanned */ - protected string data; - //protected char[] data; - - /** How many characters are actually in the buffer */ - protected int n; - - /** 0..n-1 index into string of next char */ - protected int p = 0; - -#if TRACK_POSITION - /** line number 1..n within the input */ - protected int line = 1; - - /** The index of the character relative to the beginning of the line 0..n-1 */ - protected int charPositionInLine = 0; -#endif - - /** tracks how deep mark() calls are nested */ - protected int markDepth = 0; - - /** - * A list of CharStreamState objects that tracks the stream state - * values line, charPositionInLine, and p that can change as you - * move through the input stream. Indexed from 1..markDepth. - * A null is kept @ index 0. Create upon first call to mark(). - * - */ - protected IList markers; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - /** What is name or source of this char stream? */ - public string name; - - public SlimStringStream() - { - } - - /** Copy data in string to a local char array */ - public SlimStringStream( string input ) - : this( input, null ) - { - } - - public SlimStringStream( string input, string sourceName ) - : this( input.ToCharArray(), input.Length, sourceName ) - { - } - - /** This is the preferred constructor as no data is copied */ - public SlimStringStream( char[] data, int numberOfActualCharsInArray ) - : this( data, numberOfActualCharsInArray, null ) - { - } - - public SlimStringStream( char[] data, int numberOfActualCharsInArray, string sourceName ) - : this() - { - //this.data = data; - this.data = new string( data ); - this.n = numberOfActualCharsInArray; - this.name = sourceName; - } - - /** - * Return the current input symbol index 0..n where n indicates the - * last symbol has been read. The index is the index of char to - * be returned from LA(1). - * - */ - public int Index - { - get - { - return p; - } - } -#if TRACK_POSITION - public int Line - { - get - { - return line; - } - set - { - line = value; - } - } - public int CharPositionInLine - { - get - { - return charPositionInLine; - } - set - { - charPositionInLine = value; - } - } -#else - public int Line - { - get - { - return -1; - } - set - { - } - } - public int CharPositionInLine - { - get - { - return -1; - } - set - { - } - } -#endif - - /** - * Reset the stream so that it's in the same state it was - * when the object was created *except* the data array is not - * touched. - * - */ - public void Reset() - { - p = 0; -#if TRACK_POSITION - line = 1; - charPositionInLine = 0; -#endif - markDepth = 0; - } - - public void Consume() - { - //System.out.println("prev p="+p+", c="+(char)data[p]); - if ( p < n ) - { -#if TRACK_POSITION - charPositionInLine++; - if ( data[p] == '\n' ) - { - /* - System.out.println("newline char found on line: "+line+ - "@ pos="+charPositionInLine); - */ - line++; - charPositionInLine = 0; - } -#endif - p++; - //System.out.println("p moves to "+p+" (c='"+(char)data[p]+"')"); - } - } - - public int LA( int i ) - { - if ( i == 0 ) - { - return 0; // undefined - } - if ( i < 0 ) - { - i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] - if ( ( p + i - 1 ) < 0 ) - { - return CharStreamConstants.EndOfFile; // invalid; no char before first char - } - } - - if ( ( p + i - 1 ) >= n ) - { - //System.out.println("char LA("+i+")=EOF; p="+p); - return CharStreamConstants.EndOfFile; - } - //System.out.println("char LA("+i+")="+(char)data[p+i-1]+"; p="+p); - //System.out.println("LA("+i+"); p="+p+" n="+n+" data.length="+data.length); - return data[p + i - 1]; - } - - public int LT( int i ) - { - return LA( i ); - } - - public int Count - { - get - { - return n; - } - } - - public int Mark() - { - if ( markers == null ) - { - markers = new List(); - markers.Add( null ); // depth 0 means no backtracking, leave blank - } - markDepth++; - CharStreamState state = null; - if ( markDepth >= markers.Count ) - { - state = new CharStreamState(); - markers.Add( state ); - } - else - { - state = markers[markDepth]; - } - state.p = p; -#if TRACK_POSITION - state.line = line; - state.charPositionInLine = charPositionInLine; -#endif - lastMarker = markDepth; - return markDepth; - } - - public void Rewind( int m ) - { - CharStreamState state = markers[m]; - // restore stream state - Seek( state.p ); -#if TRACK_POSITION - line = state.line; - charPositionInLine = state.charPositionInLine; -#endif - Release( m ); - } - - public void Rewind() - { - Rewind( lastMarker ); - } - - public void Release( int marker ) - { - // unwind any other markers made after m and release m - markDepth = marker; - // release this marker - markDepth--; - } - - /** - * consume() ahead until p==index; can't just set p=index as we must - * update line and charPositionInLine. - * - */ - public void Seek( int index ) - { - if ( index <= p ) - { - p = index; // just jump; don't update stream state (line, ...) - return; - } - // seek forward, consume until p hits index - while ( p < index ) - { - Consume(); - } - } - - public string Substring( int start, int length ) - { - return data.Substring( start, length ); - //return new string( data, start, stop - start + 1 ); - } - - public string SourceName - { - get - { - return name; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimToken.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimToken.cs deleted file mode 100644 index d850958..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimToken.cs +++ /dev/null @@ -1,160 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System; - using System.Runtime.InteropServices; - - [StructLayout( LayoutKind.Sequential, Pack = 2 )] - public struct SlimToken - : IToken - { - private short _type; - private short _channel; - private short _startIndex; - private short _stopIndex; - - public SlimToken(int type) - : this() - { - _type = (short)type; - } - - #region IToken Members - - string IToken.Text - { - get - { - return string.Empty; - } - set - { - } - } - - public int Type - { - get - { - return _type; - } - set - { - _type = (short)value; - } - } - - int IToken.Line - { - get - { - return 0; - } - set - { - } - } - - int IToken.CharPositionInLine - { - get - { - return 0; - } - set - { - } - } - - public int Channel - { - get - { - return _channel; - } - set - { - _channel = (short)value; - } - } - - public int StartIndex - { - get - { - return _startIndex; - } - set - { - _startIndex = (short)value; - } - } - - public int StopIndex - { - get - { - return _stopIndex; - } - set - { - _stopIndex = (short)value; - } - } - - int IToken.TokenIndex - { - get - { - return 0; - } - set - { - } - } - - ICharStream IToken.InputStream - { - get - { - return null; - } - set - { - } - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimTokenStream.cs deleted file mode 100644 index 50da1ed..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/SlimTokenStream.cs +++ /dev/null @@ -1,438 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using System; - using System.Text; - - /** - * A pretty quick CharStream that pulls all data from an array - * directly. Every method call counts in the lexer. Java's - * strings aren't very good so I'm avoiding. - * - */ - [System.Serializable] - public class FastTokenStream - : ITokenStream - { - [System.NonSerialized] - ITokenSource _tokenSource; - - /** - * Record every single token pulled from the source so we can reproduce - * chunks of it later. - * - */ - protected List tokens; - - /** Skip tokens on any channel but this one; this is how we skip whitespace... */ - protected int channel = TokenChannels.Default; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - /** - * The index into the tokens list of the current token (next token - * to consume). p==-1 indicates that the tokens list is empty - * - */ - protected int p = -1; - - public FastTokenStream() - { - tokens = new List( 500 ); - } - - public FastTokenStream( ITokenSource tokenSource ) - : this() - { - this._tokenSource = tokenSource; - } - - public FastTokenStream( ITokenSource tokenSource, int channel ) - : this( tokenSource ) - { - this.channel = channel; - } - - public int Index - { - get - { - return p; - } - } - - /** Reset this token stream by setting its token source. */ - public void SetTokenSource( ITokenSource tokenSource ) - { - this._tokenSource = tokenSource; - tokens.Clear(); - p = -1; - channel = TokenChannels.Default; - } - - /** - * Load all tokens from the token source and put in tokens. - * This is done upon first LT request because you might want to - * set some token type / channel overrides before filling buffer. - * - */ - public void FillBuffer() - { - // fast return if the buffer is already full - if ( p != -1 ) - return; - - int index = 0; - SlimToken t = _tokenSource.NextToken(); - while ( t.Type != CharStreamConstants.EndOfFile ) - { - //t.TokenIndex = index; - tokens.Add( t ); - index++; - - t = _tokenSource.NextToken(); - } - // leave p pointing at first token on channel - p = 0; - p = SkipOffTokenChannels( p ); - } - - /** - * Move the input pointer to the next incoming token. The stream - * must become active with LT(1) available. consume() simply - * moves the input pointer so that LT(1) points at the next - * input symbol. Consume at least one token. - * - * - * - * Walk past any token not on the channel the parser is listening to. - * - */ - public void Consume() - { - if ( p < tokens.Count ) - { - p++; - p = SkipOffTokenChannels( p ); // leave p on valid token - } - } - - /** Given a starting index, return the index of the first on-channel token. */ - protected int SkipOffTokenChannels( int i ) - { - int n = tokens.Count; - while ( i < n && tokens[i].Channel != channel ) - { - i++; - } - return i; - } - - protected int SkipOffTokenChannelsReverse( int i ) - { - while ( i >= 0 && tokens[i].Channel != channel ) - { - i--; - } - return i; - } - - public IList GetTokens() - { - if ( p == -1 ) - { - FillBuffer(); - } - return tokens; - } - - public IList GetTokens( int start, int stop ) - { - return GetTokens( start, stop, (BitSet)null ); - } - - /** - * Given a start and stop index, return a List of all tokens in - * the token type BitSet. Return null if no tokens were found. This - * method looks at both on and off channel tokens. - * - */ - public IList GetTokens( int start, int stop, BitSet types ) - { - if ( p == -1 ) - { - FillBuffer(); - } - if ( stop >= tokens.Count ) - { - stop = tokens.Count - 1; - } - if ( start < 0 ) - { - start = 0; - } - if ( start > stop ) - { - return null; - } - - // list = tokens[start:stop]:{Token t, t.getType() in types} - List filteredTokens = new List(); - for ( int i = start; i <= stop; i++ ) - { - SlimToken t = tokens[i]; - if ( types == null || types.Member( t.Type ) ) - { - filteredTokens.Add( t ); - } - } - if ( filteredTokens.Count == 0 ) - { - filteredTokens = null; - } - return filteredTokens; - } - - public IList GetTokens( int start, int stop, IList types ) - { - return GetTokens( start, stop, new BitSet( types ) ); - } - - public IList GetTokens( int start, int stop, int ttype ) - { - return GetTokens( start, stop, BitSet.Of( ttype ) ); - } - - /** - * Get the ith token from the current position 1..n where k=1 is the - * first symbol of lookahead. - * - */ - public SlimToken LT( int k ) - { - if ( p == -1 ) - { - FillBuffer(); - } - if ( k == 0 ) - { - return default( SlimToken ); - } - if ( k < 0 ) - { - return LB( -k ); - } - //System.out.print("LT(p="+p+","+k+")="); - if ( ( p + k - 1 ) >= tokens.Count ) - { - return new SlimToken(TokenTypes.EndOfFile); - } - //System.out.println(tokens.get(p+k-1)); - int i = p; - int n = 1; - // find k good tokens - while ( n < k ) - { - // skip off-channel tokens - i = SkipOffTokenChannels( i + 1 ); // leave p on valid token - n++; - } - if ( i >= tokens.Count ) - { - return new SlimToken(TokenTypes.EndOfFile); - } - return tokens[i]; - } - - /** Look backwards k tokens on-channel tokens */ - protected SlimToken LB( int k ) - { - //System.out.print("LB(p="+p+","+k+") "); - if ( p == -1 ) - { - FillBuffer(); - } - if ( k == 0 ) - { - return default( SlimToken ); - } - if ( ( p - k ) < 0 ) - { - return default( SlimToken ); - } - - int i = p; - int n = 1; - // find k good tokens looking backwards - while ( n <= k ) - { - // skip off-channel tokens - i = SkipOffTokenChannelsReverse( i - 1 ); // leave p on valid token - n++; - } - if ( i < 0 ) - { - return default( SlimToken ); - } - return tokens[i]; - } - - /** - * Return absolute token i; ignore which channel the tokens are on; - * that is, count all tokens not just on-channel tokens. - * - */ - public SlimToken Get( int i ) - { - return tokens[i]; - } - - public int LA( int i ) - { - return LT( i ).Type; - } - - public int Mark() - { - if ( p == -1 ) - { - FillBuffer(); - } - lastMarker = Index; - return lastMarker; - } - - public void Release( int marker ) - { - // no resources to release - } - - public int Count - { - get - { - return tokens.Count; - } - } - - public void Rewind( int marker ) - { - Seek( marker ); - } - - public void Rewind() - { - Seek( lastMarker ); - } - - public void Reset() - { - p = 0; - lastMarker = 0; - } - - public void Seek( int index ) - { - p = index; - } - - public ITokenSource TokenSource - { - get - { - return _tokenSource; - } - } - - public string SourceName - { - get - { - return TokenSource.SourceName; - } - } - - public override string ToString() - { - if ( p == -1 ) - { - throw new InvalidOperationException( "Buffer is not yet filled." ); - } - return ToString( 0, tokens.Count - 1 ); - } - - public virtual string ToString( int start, int stop ) - { - if ( start < 0 || stop < 0 ) - { - return null; - } - if ( p == -1 ) - { - throw new InvalidOperationException( "Buffer is not yet filled." ); - } - if ( stop >= tokens.Count ) - { - stop = tokens.Count - 1; - } - StringBuilder buf = new StringBuilder(); - for ( int i = start; i <= stop; i++ ) - { - SlimToken t = tokens[i]; - SlimLexer lexer = _tokenSource as SlimLexer; - if ( lexer != null ) - { - SlimStringStream input = lexer.CharStream as SlimStringStream; - if ( input != null ) - { - string text = input.Substring( t.StartIndex, t.StopIndex - t.StartIndex + 1 ); - buf.Append( text ); - } - } - } - return buf.ToString(); - } - - public virtual string ToString( IToken start, IToken stop ) - { - if ( start != null && stop != null ) - { - return ToString( start.TokenIndex, stop.TokenIndex ); - } - return null; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeAdaptor`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeAdaptor`1.cs deleted file mode 100644 index dfb2ecf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeAdaptor`1.cs +++ /dev/null @@ -1,314 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - public interface ITreeAdaptor - { - #region Construction - - /** - * Create a tree node from Token object; for CommonTree type trees, - * then the token just becomes the payload. This is the most - * common create call. - * - * - * - * Override if you want another kind of node to be built. - * - */ - T Create(IToken payload); - - /** Duplicate a single tree node. - * Override if you want another kind of node to be built. - */ - T DupNode(T treeNode); - - /** Duplicate tree recursively, using dupNode() for each node */ - T DupTree(T tree); - - /** - * Return a nil node (an empty but non-null node) that can hold - * a list of element as the children. If you want a flat tree (a list) - * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" - * - */ - T Nil(); - - /** - * Return a tree node representing an error. This node records the - * tokens consumed during error recovery. The start token indicates the - * input symbol at which the error was detected. The stop token indicates - * the last symbol consumed during recovery. - * - * - * - * You must specify the input stream so that the erroneous text can - * be packaged up in the error node. The exception could be useful - * to some applications; default implementation stores ptr to it in - * the CommonErrorNode. - * - * This only makes sense during token parsing, not tree parsing. - * Tree parsing should happen only when parsing and tree construction - * succeed. - * - */ - T ErrorNode(ITokenStream input, IToken start, IToken stop, RecognitionException e); - - /** Is tree considered a nil node used to make lists of child nodes? */ - bool IsNil(T tree); - - /** - * Add a child to the tree t. If child is a flat tree (a list), make all - * in list children of t. Warning: if t has no children, but child does - * and child isNil then you can decide it is ok to move children to t via - * t.children = child.children; i.e., without copying the array. Just - * make sure that this is consistent with have the user will build - * ASTs. Do nothing if t or child is null. - * - */ - void AddChild(T t, T child); - - /** - * If oldRoot is a nil root, just copy or move the children to newRoot. - * If not a nil root, make oldRoot a child of newRoot. - * - * - * - * old=^(nil a b c), new=r yields ^(r a b c) - * old=^(a b c), new=r yields ^(r ^(a b c)) - * - * If newRoot is a nil-rooted single child tree, use the single - * child as the new root node. - * - * old=^(nil a b c), new=^(nil r) yields ^(r a b c) - * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) - * - * If oldRoot was null, it's ok, just return newRoot (even if isNil). - * - * old=null, new=r yields r - * old=null, new=^(nil r) yields ^(nil r) - * - * Return newRoot. Throw an exception if newRoot is not a - * simple node or nil root with a single child node--it must be a root - * node. If newRoot is ^(nil x) return x as newRoot. - * - * Be advised that it's ok for newRoot to point at oldRoot's - * children; i.e., you don't have to copy the list. We are - * constructing these nodes so we should have this control for - * efficiency. - * - */ - T BecomeRoot(T newRoot, T oldRoot); - - /** - * Given the root of the subtree created for this rule, post process - * it to do any simplifications or whatever you want. A required - * behavior is to convert ^(nil singleSubtree) to singleSubtree - * as the setting of start/stop indexes relies on a single non-nil root - * for non-flat trees. - * - * - * - * Flat trees such as for lists like "idlist : ID+ ;" are left alone - * unless there is only one ID. For a list, the start/stop indexes - * are set in the nil node. - * - * This method is executed after all rule tree construction and right - * before setTokenBoundaries(). - * - */ - T RulePostProcessing(T root); - - /** For identifying trees. - * - * - * How to identify nodes so we can say "add node to a prior node"? - * Even becomeRoot is an issue. Use System.identityHashCode(node) - * usually. - * - */ - int GetUniqueID(T node); - - - // R e w r i t e R u l e s - - /** - * Create a node for newRoot make it the root of oldRoot. - * If oldRoot is a nil root, just copy or move the children to newRoot. - * If not a nil root, make oldRoot a child of newRoot. - * - * - * - * Return node created for newRoot. - * - * - * - * Be advised: when debugging ASTs, the DebugTreeAdaptor manually - * calls create(Token child) and then plain becomeRoot(node, node) - * because it needs to trap calls to create, but it can't since it delegates - * to not inherits from the TreeAdaptor. - * - */ - T BecomeRoot(IToken newRoot, T oldRoot); - - /** - * Create a new node derived from a token, with a new token type. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG[$tokenLabel]. - * - * - * - * This should invoke createToken(Token). - * - */ - T Create(int tokenType, IToken fromToken); - - /** - * Same as create(tokenType,fromToken) except set the text too. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG[$tokenLabel, "IMAG"]. - * - * - * - * This should invoke createToken(Token). - * - */ - T Create(int tokenType, IToken fromToken, string text); - - /** - * Create a new node derived from a token, with a new token type. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG["IMAG"]. - * - * - * - * This should invoke createToken(int,String). - * - */ - T Create(int tokenType, string text); - - #endregion - - - #region Content - - /** For tree parsing, I need to know the token type of a node */ - int GetType(T t); - - /** Node constructors can set the type of a node */ - void SetType(T t, int type); - - string GetText(T t); - - /** Node constructors can set the text of a node */ - void SetText(T t, string text); - - /** - * Return the token object from which this node was created. - * Currently used only for printing an error message. - * The error display routine in BaseRecognizer needs to - * display where the input the error occurred. If your - * tree of limitation does not store information that can - * lead you to the token, you can create a token filled with - * the appropriate information and pass that back. See - * BaseRecognizer.getErrorMessage(). - * - */ - IToken GetToken(T t); - - /** - * Where are the bounds in the input token stream for this node and - * all children? Each rule that creates AST nodes will call this - * method right before returning. Flat trees (i.e., lists) will - * still usually have a nil root node just to hold the children list. - * That node would contain the start/stop indexes then. - * - */ - void SetTokenBoundaries(T t, IToken startToken, IToken stopToken); - - /** Get the token start index for this subtree; return -1 if no such index */ - int GetTokenStartIndex(T t); - - /** Get the token stop index for this subtree; return -1 if no such index */ - int GetTokenStopIndex(T t); - - #endregion - - - #region Navigation / Tree Parsing - - /** Get a child 0..n-1 node */ - T GetChild(T t, int i); - - /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ - void SetChild(T t, int i, T child); - - /** Remove ith child and shift children down from right. */ - T DeleteChild(T t, int i); - - /** How many children? If 0, then this is a leaf node */ - int GetChildCount(T t); - - /** - * Who is the parent node of this node; if null, implies node is root. - * If your node type doesn't handle this, it's ok but the tree rewrites - * in tree parsers need this functionality. - * - */ - T GetParent(T t); - void SetParent(T t, T parent); - - /** - * What index is this node in the child list? Range: 0..n-1 - * If your node type doesn't handle this, it's ok but the tree rewrites - * in tree parsers need this functionality. - * - */ - int GetChildIndex(T t); - void SetChildIndex(T t, int index); - - /** - * Replace from start to stop child index of parent with t, which might - * be a list. Number of children may be different after this call. - * - * - * - * If parent is null, don't do anything; must be at root of overall tree. - * Can't replace whatever points to the parent externally. Do nothing. - * - */ - void ReplaceChildren(T parent, int startChildIndex, int stopChildIndex, T t); - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeFactory.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeFactory.cs deleted file mode 100644 index 4b17634..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeFactory.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - public interface ITreeFactory - where TToken : IToken - where TTree : ITree - { - TTree Create( TToken payload ); - - TTree CloneTree( TTree tree ); - - TTree CloneNode( TTree node ); - - TTree Nil(); - - TTree CreateErrorNode( ITokenStream input, TToken start, TToken stop, RecognitionException e ); - } - - public interface ITreeFactory - : ITreeFactory - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeNodeStream`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeNodeStream`1.cs deleted file mode 100644 index f23183f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SlimParsing/Tree/ITreeNodeStream`1.cs +++ /dev/null @@ -1,142 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - public interface ITreeNodeStream - { - /** - * Get a tree node at an absolute index i; 0..n-1. - * If you don't want to buffer up nodes, then this method makes no - * sense for you. - * - */ - T this[int i] - { - get; - } - - /** - * Get tree node at current input pointer + i ahead where i=1 is next node. - * i<0 indicates nodes in the past. So LT(-1) is previous node, but - * implementations are not required to provide results for k < -1. - * LT(0) is undefined. For i>=n, return null. - * Return null for LT(0) and any index that results in an absolute address - * that is negative. - * - * - * - * This is analogus to the LT() method of the TokenStream, but this - * returns a tree node instead of a token. Makes code gen identical - * for both parser and tree grammars. :) - * - */ - T LT(int k); - - /** - * Where is this stream pulling nodes from? This is not the name, but - * the object that provides node objects. - * - */ - object TreeSource - { - get; - } - - /** - * If the tree associated with this stream was created from a TokenStream, - * you can specify it here. Used to do rule $text attribute in tree - * parser. Optional unless you use tree parser rule text attribute - * or output=template and rewrite=true options. - * - */ - ITokenStream TokenStream - { - get; - } - - /** - * What adaptor can tell me how to interpret/navigate nodes and - * trees. E.g., get text of a node. - * - */ - ITreeAdaptor TreeAdaptor - { - get; - } - - /** - * As we flatten the tree, we use UP, DOWN nodes to represent - * the tree structure. When debugging we need unique nodes - * so we have to instantiate new ones. When doing normal tree - * parsing, it's slow and a waste of memory to create unique - * navigation nodes. Default should be false; - * - */ - bool UniqueNavigationNodes - { - get; - set; - } - - /** - * Return the text of all nodes from start to stop, inclusive. - * If the stream does not buffer all the nodes then it can still - * walk recursively from start until stop. You can always return - * null or "" too, but users should not access $ruleLabel.text in - * an action of course in that case. - * - */ - string ToString(T start, T stop); - - - #region REWRITING TREES (used by tree parser) - - /** - * Replace from start to stop child index of parent with t, which might - * be a list. Number of children may be different - * after this call. The stream is notified because it is walking the - * tree and might need to know you are monkeying with the underlying - * tree. Also, it might be able to modify the node stream to avoid - * restreaming for future phases. - * - * - * - * If parent is null, don't do anything; must be at root of overall tree. - * Can't replace whatever points to the parent externally. Do nothing. - * - */ - void ReplaceChildren(T parent, int startChildIndex, int stopChildIndex, T t); - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3 deleted file mode 100644 index 886e48a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3 +++ /dev/null @@ -1,36 +0,0 @@ -grammar StringTemplateOutput; - -options { - language=CSharp3; - TokenLabelType=CommonToken; - output=template; -} - -@lexer::namespace{Antlr3.Runtime.Test} -@parser::namespace{Antlr3.Runtime.Test} - -/* - * Parser Rules - */ - -public -compileUnit - : ID integer EOF - -> new(id={$ID.text}, value={$integer.st}) - ; - -integer - : i='int' -> {%{$i.text}} - ; - -/* - * Lexer Rules - */ - -ID - : 'a'..'z'* - ; - -WS - : ' ' - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.lexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.lexer.cs deleted file mode 100644 index 181f982..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.lexer.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class StringTemplateOutputLexer - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.parser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.parser.cs deleted file mode 100644 index 5a419b2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/StringTemplateOutput.g3.parser.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class StringTemplateOutputParser - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3 deleted file mode 100644 index 6bb7df4..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3 +++ /dev/null @@ -1,47 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -tree grammar SynpredTreeParser; - -options -{ - language=CSharp3; - ASTLabelType=ITree; - output=AST; -} - -@namespace{Antlr3.Runtime.Test} - -enterInsertOrDeleteData - : ^( INSERT ( (DATA)=>DATA { _value = true; } | { _value = true; } ) .* ) - | ^( DELETE ( (DATA)=>DATA { _value = false; } | { _value = false; } ) .* ) - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3.cs deleted file mode 100644 index f127aad..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/SynpredTreeParser.g3.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -#pragma warning disable 414 // The field 'fieldname' is assigned but its value is never used - -namespace Antlr3.Runtime.Test -{ - partial class SynpredTreeParser - { - private bool _value; - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3 deleted file mode 100644 index 174526f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3 +++ /dev/null @@ -1,65 +0,0 @@ -grammar TestActionFeatures; - -options { - language=CSharp3; - TokenLabelType=CommonToken; - output=AST; - ASTLabelType=CommonTree; -} - -@lexer::namespace{Antlr3.Runtime.Test} -@parser::namespace{Antlr3.Runtime.Test} - -@parser::header{using Console = System.Console;} - -/* - * Parser Rules - */ - -public -compileUnit - : EOF - ; - -// SET_DYNAMIC_SCOPE_ATTR - -setDynamicScopeAttr -scope {int i;} - : EOF {$setDynamicScopeAttr::i=3; $setDynamicScopeAttr[0]::i=3; $setDynamicScopeAttr[-0]::i=3;} - ; - -// DYNAMIC_SCOPE_ATTR - -dynamicScopeAttr -scope {int i;} - : EOF {Console.WriteLine($dynamicScopeAttr::i);} - ; - -// DYNAMIC_NEGATIVE_INDEXED_SCOPE_ATTR - -dynamicNegativeIndexedScopeAttr -scope {int i;} - : EOF {Console.WriteLine($dynamicNegativeIndexedScopeAttr[-1]::i);} - ; - -// DYNAMIC_ABSOLUTE_INDEXED_SCOPE_ATTR - -dynamicAbsoluteIndexedScopeAttr -scope {int i;} - : EOF {Console.WriteLine($dynamicNegativeIndexedScopeAttr[0]::i);} - ; - -// ISOLATED_DYNAMIC_SCOPE - -isolatedDynamicScope -scope {int i;} - : EOF {Console.WriteLine($isolatedDynamicScope.Count);} - ; - -/* - * Lexer Rules - */ - -WS - : ' ' - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.lexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.lexer.cs deleted file mode 100644 index e474324..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.lexer.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class TestActionFeaturesLexer - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.parser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.parser.cs deleted file mode 100644 index cedcf79..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestActionFeatures.g3.parser.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Antlr3.Runtime.Test -{ - partial class TestActionFeaturesParser - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestDotTreeGenerator.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestDotTreeGenerator.cs deleted file mode 100644 index b784f08..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestDotTreeGenerator.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - using System; - using Antlr.Runtime; - using Antlr.Runtime.Tree; - using Microsoft.VisualStudio.TestTools.UnitTesting; - - [TestClass] - public class TestDotTreeGenerator - { - [TestMethod] - public void TestCreateDot() - { - ANTLRStringStream input = new ANTLRStringStream( "3 * x" ); - SimpleExpressionLexer lexer = new SimpleExpressionLexer( input ); - CommonTokenStream tokens = new CommonTokenStream( lexer ); - SimpleExpressionParser parser = new SimpleExpressionParser( tokens ); - var result = parser.expression(); - - var tree = result.Tree; - var adaptor = parser.TreeAdaptor; - - DotTreeGenerator gen = new DotTreeGenerator(); - string output = gen.ToDot( tree, adaptor ); - string newline = Environment.NewLine; - string expected = - @"digraph {" + newline - + newline - + @" ordering=out;" + newline - + @" ranksep=.4;" + newline - + @" bgcolor=""lightgrey""; node [shape=box, fixedsize=false, fontsize=12, fontname=""Helvetica-bold"", fontcolor=""blue""" + newline - + @" width=.25, height=.25, color=""black"", fillcolor=""white"", style=""filled, solid, bold""];" + newline - + @" edge [arrowsize=.5, color=""black"", style=""bold""]" + newline - + newline - + @" n0 [label=""""];" + newline - + @" n1 [label=""*""];" + newline - + @" n1 [label=""*""];" + newline - + @" n2 [label=""3""];" + newline - + @" n3 [label=""x""];" + newline - + @" n4 [label=""""];" + newline - + newline - + @" n0 -> n1 // """" -> ""*""" + newline - + @" n1 -> n2 // ""*"" -> ""3""" + newline - + @" n1 -> n3 // ""*"" -> ""x""" + newline - + @" n0 -> n4 // """" -> """"" + newline - + newline - + @"}" + newline - + @""; - - Assert.AreEqual( expected, output ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3 b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3 deleted file mode 100644 index 4fb0ae2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3 +++ /dev/null @@ -1,160 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -grammar TestExpressionFeatures; - -options { - language=CSharp3; - TokenLabelType=CommonToken; - output=AST; - ASTLabelType=CommonTree; -} - -tokens { - LPAREN = '('; - RPAREN = ')'; - DOT = '.'; - LBRACK = '['; - RBRACK = ']'; - INC = '++'; - DEC = '--'; - PLUS = '+'; - MINUS = '-'; - TILDE = '~'; - NOT = '!'; - //LSHIFT = '<<'; - //RSHIFT = '>>'; - //RUSHIFT = '>>>'; - EQUALS = '=='; - NOTEQ = '!='; - MOD = '%'; - CARET = '^'; - GT = '>'; - LT = '<'; - GE = '>='; - LE = '<='; - BITAND = '&'; - BITOR = '|'; - AND = '&&'; - OR = '||'; - - KW_THIS = 'this'; - KW_SUPER = 'super'; - KW_CLASS = 'class'; - KW_NEW = 'new'; - KW_INSTANCEOF = 'instanceof'; - KW_INT = 'int'; -} - -@lexer::namespace{Antlr3.Runtime.Test} -@parser::namespace{Antlr3.Runtime.Test} - -@parser::header{using Console = System.Console;} - -/* - * Parser Rules - */ - -public -compileUnit - : e EOF - ; - -e : '('! e ')'! - | 'this' - | 'super' - | INT - | ID - | type '.'^ 'class' - | e '.'^ ID - | e '.'^ 'this' - | e '.'^ 'super' '('^ expressionList? ')'! - | e '.'^ 'new'^ ID '('! expressionList? ')'! - | 'new'^ type ( '(' expressionList? ')'! | (options {k=1;}:'[' e ']'!)+) - | e '['^ e ']'! - | '('^ type ')'! 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 - ; - -expressionList - : e (','! e)* - ; - -type: ID - | ID '['^ ']'! - | 'int' - | 'int' '['^ ']'! - ; - -/* - * Lexer Rules - */ - -WS - : (' ' | '\t' | '\n' | '\r') {Skip();} - ; - -ID - : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')* - ; - -INT - : '0'..'9'+ - ; diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.lexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.lexer.cs deleted file mode 100644 index 3ad3d8e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.lexer.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - partial class TestExpressionFeaturesLexer - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.parser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.parser.cs deleted file mode 100644 index e452e7c..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestExpressionFeatures.g3.parser.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - partial class TestExpressionFeaturesParser - { - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestFastLexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestFastLexer.cs deleted file mode 100644 index 4edc329..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.Test/TestFastLexer.cs +++ /dev/null @@ -1,94 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr3.Runtime.Test -{ - using System; - using Antlr.Runtime; - using Antlr.Runtime.Tree; - using Microsoft.VisualStudio.TestTools.UnitTesting; - using System.Text; - - [TestClass] - public class TestFastLexer - { - [TestMethod] - public void TestBasicFastLexer() - { - string inputElement = "x-2356*Abte+32+eno/6623+y"; - StringBuilder builder = new StringBuilder( inputElement, 1000000 * inputElement.Length ); - for ( int i = 0; i < 999999; i++ ) - builder.Append( inputElement ); - - string text = builder.ToString(); - int iterations = 5; - // warmup - IterateFast( text, iterations ); - Iterate( text, iterations ); - - var time = Iterate( text, iterations ); - var timeFast = IterateFast( text, iterations ); - - Console.WriteLine( "Elapsed time (norm): {0} seconds.", time.TotalSeconds ); - Console.WriteLine( "Elapsed time (fast): {0} seconds.", timeFast.TotalSeconds ); - } - - TimeSpan Iterate( string text, int count ) - { - DateTime start = DateTime.Now; - - for ( int i = 0; i < count; i++ ) - { - SimpleExpressionLexer lexer = new SimpleExpressionLexer( new ANTLRStringStream( text ) ); - CommonTokenStream tokens = new CommonTokenStream( lexer ); - tokens.Fill(); - } - - return DateTime.Now - start; - } - - TimeSpan IterateFast( string text, int count ) - { - DateTime start = DateTime.Now; - - for ( int i = 0; i < count; i++ ) - { - FastSimpleExpressionLexer lexer = new FastSimpleExpressionLexer( new SlimStringStream( text ) ); - FastTokenStream tokens = new FastTokenStream( lexer ); - //FastTokenStream tokens = new FastTokenStream( lexer ); - tokens.FillBuffer(); - } - - return DateTime.Now - start; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.sln b/runtime/CSharp3/Sources/Antlr3.Runtime.sln deleted file mode 100644 index 1550134..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.sln +++ /dev/null @@ -1,36 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime", "Antlr3.Runtime\Antlr3.Runtime.csproj", "{8FDC0A87-9005-4D5A-AB75-E55CEB575559}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime.Debug", "Antlr3.Runtime.Debug\Antlr3.Runtime.Debug.csproj", "{5EE27A90-B023-42C9-AAF1-52B0424C5D0B}" -EndProject -Global - GlobalSection(SourceCodeControl) = preSolution - SccNumberOfProjects = 3 - SccLocalPath0 = . - SccProjectUniqueName1 = Antlr3.Runtime\\Antlr3.Runtime.csproj - SccLocalPath1 = . - SccProjectFilePathRelativizedFromConnection1 = Antlr3.Runtime\\ - SccProjectUniqueName2 = Antlr3.Runtime.Debug\\Antlr3.Runtime.Debug.csproj - SccLocalPath2 = . - SccProjectFilePathRelativizedFromConnection2 = Antlr3.Runtime.Debug\\ - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Release|Any CPU.Build.0 = Release|Any CPU - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc b/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc deleted file mode 100644 index 6cb031b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs deleted file mode 100644 index b4725e3..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using Encoding = System.Text.Encoding; - using File = System.IO.File; - - /** - * This is a char buffer stream that is loaded from a file - * all at once when you construct the object. This looks very - * much like an ANTLReader or ANTLRInputStream, but it's a special case - * since we know the exact size of the object to load. We can avoid lots - * of data copying. - * - */ - [System.Serializable] - [System.Security.Permissions.FileIOPermission(System.Security.Permissions.SecurityAction.Demand, Unrestricted = true)] - public class ANTLRFileStream : ANTLRStringStream - { - protected string fileName; - - public ANTLRFileStream( string fileName ) - : this( fileName, null ) - { - } - - public ANTLRFileStream( string fileName, Encoding encoding ) - { - this.fileName = fileName; - Load( fileName, encoding ); - } - - public virtual void Load( string fileName, Encoding encoding ) - { - if ( fileName == null ) - { - return; - } - - string text; - if (encoding == null) - text = File.ReadAllText(fileName); - else - text = File.ReadAllText(fileName, encoding); - - data = text.ToCharArray(); - n = data.Length; - } - - public override string SourceName - { - get - { - return fileName; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs deleted file mode 100644 index 16b6b61..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs +++ /dev/null @@ -1,79 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using Encoding = System.Text.Encoding; - using Stream = System.IO.Stream; - using StreamReader = System.IO.StreamReader; - - /** - * A kind of ReaderStream that pulls from an InputStream. - * Useful for reading from stdin and specifying file encodings etc... - * - */ - [System.Serializable] - public class ANTLRInputStream : ANTLRReaderStream - { - public ANTLRInputStream( Stream input ) - : this( input, null ) - { - } - - public ANTLRInputStream( Stream input, int size ) - : this( input, size, null ) - { - } - - public ANTLRInputStream( Stream input, Encoding encoding ) - : this( input, InitialBufferSize, encoding ) - { - } - - public ANTLRInputStream( Stream input, int size, Encoding encoding ) - : this( input, size, ReadBufferSize, encoding ) - { - } - - public ANTLRInputStream( Stream input, int size, int readBufferSize, Encoding encoding ) - : base(GetStreamReader(input, encoding), size, readBufferSize) - { - } - - private static StreamReader GetStreamReader(Stream input, Encoding encoding) - { - if (encoding != null) - return new StreamReader(input, encoding); - return new StreamReader(input); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs deleted file mode 100644 index b8ecc26..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs +++ /dev/null @@ -1,93 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using TextReader = System.IO.TextReader; - - /** - * Vacuum all input from a Reader and then treat it like a StringStream. - * Manage the buffer manually to avoid unnecessary data copying. - * - * - * - * If you need encoding, use ANTLRInputStream. - * - */ - [System.Serializable] - public class ANTLRReaderStream : ANTLRStringStream - { - public const int ReadBufferSize = 1024; - public const int InitialBufferSize = 1024; - - public ANTLRReaderStream( TextReader r ) - : this( r, InitialBufferSize, ReadBufferSize ) - { - } - - public ANTLRReaderStream( TextReader r, int size ) - : this( r, size, ReadBufferSize ) - { - } - - public ANTLRReaderStream( TextReader r, int size, int readChunkSize ) - { - Load( r, size, readChunkSize ); - } - - public virtual void Load( TextReader r, int size, int readChunkSize ) - { - if ( r == null ) - { - return; - } - if ( size <= 0 ) - { - size = InitialBufferSize; - } - if ( readChunkSize <= 0 ) - { - readChunkSize = ReadBufferSize; - } - // System.out.println("load "+size+" in chunks of "+readChunkSize); - try - { - data = r.ReadToEnd().ToCharArray(); - base.n = data.Length; - } - finally - { - r.Close(); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs deleted file mode 100644 index b3f11b4..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs +++ /dev/null @@ -1,327 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using ArgumentException = System.ArgumentException; - using ArgumentOutOfRangeException = System.ArgumentOutOfRangeException; - using ArgumentNullException = System.ArgumentNullException; - - /** - * A pretty quick CharStream that pulls all data from an array - * directly. Every method call counts in the lexer. Java's - * strings aren't very good so I'm avoiding. - * - */ - [System.Serializable] - public class ANTLRStringStream : ICharStream - { - /** The data being scanned */ - protected char[] data; - - /** How many characters are actually in the buffer */ - protected int n; - - /** 0..n-1 index into string of next char */ - protected int p = 0; - - /** line number 1..n within the input */ - int line = 1; - - /** The index of the character relative to the beginning of the line 0..n-1 */ - int charPositionInLine = 0; - - /** tracks how deep mark() calls are nested */ - protected int markDepth = 0; - - /** - * A list of CharStreamState objects that tracks the stream state - * values line, charPositionInLine, and p that can change as you - * move through the input stream. Indexed from 1..markDepth. - * A null is kept @ index 0. Create upon first call to mark(). - * - */ - protected IList markers; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - /** What is name or source of this char stream? */ - public string name; - - /** Copy data in string to a local char array */ - public ANTLRStringStream( string input ) - : this( input, null ) - { - } - - public ANTLRStringStream( string input, string sourceName ) - : this( input.ToCharArray(), input.Length, sourceName ) - { - } - - /** This is the preferred constructor as no data is copied */ - public ANTLRStringStream( char[] data, int numberOfActualCharsInArray ) - : this( data, numberOfActualCharsInArray, null ) - { - } - - public ANTLRStringStream( char[] data, int numberOfActualCharsInArray, string sourceName ) - { - if (data == null) - throw new ArgumentNullException("data"); - if (numberOfActualCharsInArray < 0) - throw new ArgumentOutOfRangeException(); - if (numberOfActualCharsInArray > data.Length) - throw new ArgumentException(); - - this.data = data; - this.n = numberOfActualCharsInArray; - this.name = sourceName; - } - - protected ANTLRStringStream() - { - this.data = new char[0]; - } - - /** - * Return the current input symbol index 0..n where n indicates the - * last symbol has been read. The index is the index of char to - * be returned from LA(1). - * - */ - public virtual int Index - { - get - { - return p; - } - } - public virtual int Line - { - get - { - return line; - } - set - { - line = value; - } - } - public virtual int CharPositionInLine - { - get - { - return charPositionInLine; - } - set - { - charPositionInLine = value; - } - } - - /** - * Reset the stream so that it's in the same state it was - * when the object was created *except* the data array is not - * touched. - * - */ - public virtual void Reset() - { - p = 0; - line = 1; - charPositionInLine = 0; - markDepth = 0; - } - - public virtual void Consume() - { - //System.out.println("prev p="+p+", c="+(char)data[p]); - if ( p < n ) - { - charPositionInLine++; - if ( data[p] == '\n' ) - { - /* - System.out.println("newline char found on line: "+line+ - "@ pos="+charPositionInLine); - */ - line++; - charPositionInLine = 0; - } - p++; - //System.out.println("p moves to "+p+" (c='"+(char)data[p]+"')"); - } - } - - public virtual int LA( int i ) - { - if ( i == 0 ) - { - return 0; // undefined - } - if ( i < 0 ) - { - i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] - if ( ( p + i - 1 ) < 0 ) - { - return CharStreamConstants.EndOfFile; // invalid; no char before first char - } - } - - if ( ( p + i - 1 ) >= n ) - { - //System.out.println("char LA("+i+")=EOF; p="+p); - return CharStreamConstants.EndOfFile; - } - //System.out.println("char LA("+i+")="+(char)data[p+i-1]+"; p="+p); - //System.out.println("LA("+i+"); p="+p+" n="+n+" data.length="+data.length); - return data[p + i - 1]; - } - - public virtual int LT( int i ) - { - return LA( i ); - } - - public virtual int Count - { - get - { - return n; - } - } - - public virtual int Mark() - { - if ( markers == null ) - { - markers = new List(); - markers.Add( null ); // depth 0 means no backtracking, leave blank - } - markDepth++; - CharStreamState state = null; - if ( markDepth >= markers.Count ) - { - state = new CharStreamState(); - markers.Add( state ); - } - else - { - state = markers[markDepth]; - } - state.p = Index; - state.line = Line; - state.charPositionInLine = CharPositionInLine; - lastMarker = markDepth; - return markDepth; - } - - public virtual void Rewind( int m ) - { - if (m < 0) - throw new ArgumentOutOfRangeException(); - - //if (m > markDepth) - // throw new ArgumentException(); - - CharStreamState state = markers[m]; - // restore stream state - Seek( state.p ); - line = state.line; - charPositionInLine = state.charPositionInLine; - Release( m ); - } - - public virtual void Rewind() - { - Rewind( lastMarker ); - } - - public virtual void Release( int marker ) - { - // unwind any other markers made after m and release m - markDepth = marker; - // release this marker - markDepth--; - } - - /** - * consume() ahead until p==index; can't just set p=index as we must - * update line and charPositionInLine. - * - */ - public virtual void Seek( int index ) - { - if ( index <= p ) - { - p = index; // just jump; don't update stream state (line, ...) - return; - } - // seek forward, consume until p hits index - while ( p < index ) - { - Consume(); - } - } - - public virtual string Substring( int start, int length ) - { - if (start < 0) - throw new ArgumentOutOfRangeException(); - if (length < 0) - throw new ArgumentOutOfRangeException(); - if (start + length > data.Length) - throw new ArgumentException(); - - if (length == 0) - return string.Empty; - - return new string( data, start, length ); - } - - public virtual string SourceName - { - get - { - return name; - } - } - - public override string ToString() - { - return new string(data); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj b/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj deleted file mode 100644 index 5da739f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj +++ /dev/null @@ -1,143 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {8FDC0A87-9005-4D5A-AB75-E55CEB575559} - Library - Properties - Antlr.Runtime - Antlr3.Runtime - v2.0 - 512 - true - ..\..\..\..\..\..\..\..\..\keys\antlr\Key.snk - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Antlr3.Runtime.xml - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\Antlr3.Runtime.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Key.snk - - - - - \ No newline at end of file diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc b/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/AstParserRuleReturnScope`2.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/AstParserRuleReturnScope`2.cs deleted file mode 100644 index 0ebe32d..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/AstParserRuleReturnScope`2.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public class AstParserRuleReturnScope : ParserRuleReturnScope, IAstRuleReturnScope, IAstRuleReturnScope - { - private TTree _tree; - - public TTree Tree - { - get - { - return _tree; - } - - set - { - _tree = value; - } - } - - object IAstRuleReturnScope.Tree - { - get - { - return Tree; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs deleted file mode 100644 index c62a5bf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs +++ /dev/null @@ -1,1186 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - using ArgumentNullException = System.ArgumentNullException; - using Array = System.Array; - using Conditional = System.Diagnostics.ConditionalAttribute; - using IDebugEventListener = Antlr.Runtime.Debug.IDebugEventListener; - using MethodBase = System.Reflection.MethodBase; - using Regex = System.Text.RegularExpressions.Regex; - using StackFrame = System.Diagnostics.StackFrame; - using StackTrace = System.Diagnostics.StackTrace; - using TextWriter = System.IO.TextWriter; - - /** - * A generic recognizer that can handle recognizers generated from - * lexer, parser, and tree grammars. This is all the parsing - * support code essentially; most of it is error recovery stuff and - * backtracking. - * - */ - public abstract class BaseRecognizer - { - public const int MemoRuleFailed = -2; - public const int MemoRuleUnknown = -1; - public const int InitialFollowStackSize = 100; - - // copies from Token object for convenience in actions - public const int DefaultTokenChannel = TokenChannels.Default; - public const int Hidden = TokenChannels.Hidden; - - public const string NextTokenRuleName = "nextToken"; - - /** - * State of a lexer, parser, or tree parser are collected into a state - * object so the state can be shared. This sharing is needed to - * have one grammar import others and share same error variables - * and other state variables. It's a kind of explicit multiple - * inheritance via delegation of methods and shared state. - * - */ - protected internal RecognizerSharedState state; - - public BaseRecognizer() - : this(new RecognizerSharedState()) - { - } - - public BaseRecognizer( RecognizerSharedState state ) - { - if ( state == null ) - { - state = new RecognizerSharedState(); - } - this.state = state; - InitDFAs(); - } - - public TextWriter TraceDestination - { - get; - set; - } - - public virtual void SetState(RecognizerSharedState value) - { - this.state = value; - } - - protected virtual void InitDFAs() - { - } - - /** reset the parser's state; subclasses must rewinds the input stream */ - public virtual void Reset() - { - // wack everything related to error recovery - if ( state == null ) - { - return; // no shared state work to do - } - state._fsp = -1; - state.errorRecovery = false; - state.lastErrorIndex = -1; - state.failed = false; - state.syntaxErrors = 0; - // wack everything related to backtracking and memoization - state.backtracking = 0; - for ( int i = 0; state.ruleMemo != null && i < state.ruleMemo.Length; i++ ) - { // wipe cache - state.ruleMemo[i] = null; - } - } - - - /** - * Match current input symbol against ttype. Attempt - * single token insertion or deletion error recovery. If - * that fails, throw MismatchedTokenException. - * - * - * - * To turn off single token insertion or deletion error - * recovery, override recoverFromMismatchedToken() and have it - * throw an exception. See TreeParser.recoverFromMismatchedToken(). - * This way any error in a rule will cause an exception and - * immediate exit from rule. Rule would recover by resynchronizing - * to the set of symbols that can follow rule ref. - * - */ - public virtual object Match( IIntStream input, int ttype, BitSet follow ) - { - //System.out.println("match "+((TokenStream)input).LT(1)); - object matchedSymbol = GetCurrentInputSymbol( input ); - if ( input.LA( 1 ) == ttype ) - { - input.Consume(); - state.errorRecovery = false; - state.failed = false; - return matchedSymbol; - } - if ( state.backtracking > 0 ) - { - state.failed = true; - return matchedSymbol; - } - matchedSymbol = RecoverFromMismatchedToken( input, ttype, follow ); - return matchedSymbol; - } - - /** Match the wildcard: in a symbol */ - public virtual void MatchAny( IIntStream input ) - { - state.errorRecovery = false; - state.failed = false; - input.Consume(); - } - - public virtual bool MismatchIsUnwantedToken( IIntStream input, int ttype ) - { - return input.LA( 2 ) == ttype; - } - - public virtual bool MismatchIsMissingToken( IIntStream input, BitSet follow ) - { - if ( follow == null ) - { - // we have no information about the follow; we can only consume - // a single token and hope for the best - return false; - } - // compute what can follow this grammar element reference - if ( follow.Member( TokenTypes.EndOfRule ) ) - { - BitSet viableTokensFollowingThisRule = ComputeContextSensitiveRuleFOLLOW(); - follow = follow.Or( viableTokensFollowingThisRule ); - if ( state._fsp >= 0 ) - { // remove EOR if we're not the start symbol - follow.Remove( TokenTypes.EndOfRule ); - } - } - // if current token is consistent with what could come after set - // then we know we're missing a token; error recovery is free to - // "insert" the missing token - - //System.out.println("viable tokens="+follow.toString(getTokenNames())); - //System.out.println("LT(1)="+((TokenStream)input).LT(1)); - - // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR - // in follow set to indicate that the fall of the start symbol is - // in the set (EOF can follow). - if ( follow.Member( input.LA( 1 ) ) || follow.Member( TokenTypes.EndOfRule ) ) - { - //System.out.println("LT(1)=="+((TokenStream)input).LT(1)+" is consistent with what follows; inserting..."); - return true; - } - return false; - } - - /** Report a recognition problem. - * - * - * This method sets errorRecovery to indicate the parser is recovering - * not parsing. Once in recovery mode, no errors are generated. - * To get out of recovery mode, the parser must successfully match - * a token (after a resync). So it will go: - * - * 1. error occurs - * 2. enter recovery mode, report error - * 3. consume until token found in resynch set - * 4. try to resume parsing - * 5. next match() will reset errorRecovery mode - * - * If you override, make sure to update syntaxErrors if you care about that. - * - */ - public virtual void ReportError( RecognitionException e ) - { - // if we've already reported an error and have not matched a token - // yet successfully, don't report any errors. - if ( state.errorRecovery ) - { - //System.err.print("[SPURIOUS] "); - return; - } - state.syntaxErrors++; // don't count spurious - state.errorRecovery = true; - - DisplayRecognitionError( this.TokenNames, e ); - } - - public virtual void DisplayRecognitionError( string[] tokenNames, - RecognitionException e ) - { - string hdr = GetErrorHeader( e ); - string msg = GetErrorMessage( e, tokenNames ); - EmitErrorMessage( hdr + " " + msg ); - } - - /** What error message should be generated for the various exception types? - * - * - * Not very object-oriented code, but I like having all error message - * generation within one method rather than spread among all of the - * exception classes. This also makes it much easier for the exception - * handling because the exception classes do not have to have pointers back - * to this object to access utility routines and so on. Also, changing - * the message for an exception type would be difficult because you - * would have to subclassing exception, but then somehow get ANTLR - * to make those kinds of exception objects instead of the default. - * This looks weird, but trust me--it makes the most sense in terms - * of flexibility. - * - * For grammar debugging, you will want to override this to add - * more information such as the stack frame with - * getRuleInvocationStack(e, this.getClass().getName()) and, - * for no viable alts, the decision description and state etc... - * - * Override this to change the message generated for one or more - * exception types. - * - */ - public virtual string GetErrorMessage( RecognitionException e, string[] tokenNames ) - { - string msg = e.Message; - if ( e is UnwantedTokenException ) - { - UnwantedTokenException ute = (UnwantedTokenException)e; - string tokenName = ""; - if ( ute.Expecting == TokenTypes.EndOfFile ) - { - tokenName = "EndOfFile"; - } - else - { - tokenName = tokenNames[ute.Expecting]; - } - msg = "extraneous input " + GetTokenErrorDisplay( ute.UnexpectedToken ) + - " expecting " + tokenName; - } - else if ( e is MissingTokenException ) - { - MissingTokenException mte = (MissingTokenException)e; - string tokenName = ""; - if ( mte.Expecting == TokenTypes.EndOfFile ) - { - tokenName = "EndOfFile"; - } - else - { - tokenName = tokenNames[mte.Expecting]; - } - msg = "missing " + tokenName + " at " + GetTokenErrorDisplay( e.Token ); - } - else if ( e is MismatchedTokenException ) - { - MismatchedTokenException mte = (MismatchedTokenException)e; - string tokenName = ""; - if ( mte.Expecting == TokenTypes.EndOfFile ) - { - tokenName = "EndOfFile"; - } - else - { - tokenName = tokenNames[mte.Expecting]; - } - msg = "mismatched input " + GetTokenErrorDisplay( e.Token ) + - " expecting " + tokenName; - } - else if ( e is MismatchedTreeNodeException ) - { - MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; - string tokenName = ""; - if ( mtne.Expecting == TokenTypes.EndOfFile ) - { - tokenName = "EndOfFile"; - } - else - { - tokenName = tokenNames[mtne.Expecting]; - } - // workaround for a .NET framework bug (NullReferenceException) - string nodeText = ( mtne.Node != null ) ? mtne.Node.ToString() ?? string.Empty : string.Empty; - msg = "mismatched tree node: " + nodeText + " expecting " + tokenName; - } - else if ( e is NoViableAltException ) - { - //NoViableAltException nvae = (NoViableAltException)e; - // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" - // and "(decision="+nvae.decisionNumber+") and - // "state "+nvae.stateNumber - msg = "no viable alternative at input " + GetTokenErrorDisplay( e.Token ); - } - else if ( e is EarlyExitException ) - { - //EarlyExitException eee = (EarlyExitException)e; - // for development, can add "(decision="+eee.decisionNumber+")" - msg = "required (...)+ loop did not match anything at input " + - GetTokenErrorDisplay( e.Token ); - } - else if ( e is MismatchedSetException ) - { - MismatchedSetException mse = (MismatchedSetException)e; - msg = "mismatched input " + GetTokenErrorDisplay( e.Token ) + - " expecting set " + mse.Expecting; - } - else if ( e is MismatchedNotSetException ) - { - MismatchedNotSetException mse = (MismatchedNotSetException)e; - msg = "mismatched input " + GetTokenErrorDisplay( e.Token ) + - " expecting set " + mse.Expecting; - } - else if ( e is FailedPredicateException ) - { - FailedPredicateException fpe = (FailedPredicateException)e; - msg = "rule " + fpe.RuleName + " failed predicate: {" + - fpe.PredicateText + "}?"; - } - return msg; - } - - /** - * Get number of recognition errors (lexer, parser, tree parser). Each - * recognizer tracks its own number. So parser and lexer each have - * separate count. Does not count the spurious errors found between - * an error and next valid token match - * - * - * - */ - public virtual int NumberOfSyntaxErrors - { - get - { - return state.syntaxErrors; - } - } - - /** What is the error header, normally line/character position information? */ - public virtual string GetErrorHeader( RecognitionException e ) - { - string prefix = SourceName ?? string.Empty; - if (prefix.Length > 0) - prefix += ' '; - - return string.Format("{0}line {1}:{2}", prefix, e.Line, e.CharPositionInLine + 1); - } - - /** - * How should a token be displayed in an error message? The default - * is to display just the text, but during development you might - * want to have a lot of information spit out. Override in that case - * to use t.ToString() (which, for CommonToken, dumps everything about - * the token). This is better than forcing you to override a method in - * your token objects because you don't have to go modify your lexer - * so that it creates a new Java type. - * - */ - public virtual string GetTokenErrorDisplay( IToken t ) - { - string s = t.Text; - if ( s == null ) - { - if ( t.Type == TokenTypes.EndOfFile ) - { - s = ""; - } - else - { - s = "<" + t.Type + ">"; - } - } - s = Regex.Replace( s, "\n", "\\\\n" ); - s = Regex.Replace( s, "\r", "\\\\r" ); - s = Regex.Replace( s, "\t", "\\\\t" ); - return "'" + s + "'"; - } - - /** Override this method to change where error messages go */ - public virtual void EmitErrorMessage( string msg ) - { - if (TraceDestination != null) - TraceDestination.WriteLine( msg ); - } - - /** - * Recover from an error found on the input stream. This is - * for NoViableAlt and mismatched symbol exceptions. If you enable - * single token insertion and deletion, this will usually not - * handle mismatched symbol exceptions but there could be a mismatched - * token that the match() routine could not recover from. - * - */ - public virtual void Recover( IIntStream input, RecognitionException re ) - { - if ( state.lastErrorIndex == input.Index ) - { - // uh oh, another error at same token index; must be a case - // where LT(1) is in the recovery token set so nothing is - // consumed; consume a single token so at least to prevent - // an infinite loop; this is a failsafe. - input.Consume(); - } - state.lastErrorIndex = input.Index; - BitSet followSet = ComputeErrorRecoverySet(); - BeginResync(); - ConsumeUntil( input, followSet ); - EndResync(); - } - - /** - * A hook to listen in on the token consumption during error recovery. - * The DebugParser subclasses this to fire events to the listenter. - * - */ - public virtual void BeginResync() - { - } - - public virtual void EndResync() - { - } - - /* Compute the error recovery set for the current rule. During - * rule invocation, the parser pushes the set of tokens that can - * follow that rule reference on the stack; this amounts to - * computing FIRST of what follows the rule reference in the - * enclosing rule. This local follow set only includes tokens - * from within the rule; i.e., the FIRST computation done by - * ANTLR stops at the end of a rule. - * - * EXAMPLE - * - * When you find a "no viable alt exception", the input is not - * consistent with any of the alternatives for rule r. The best - * thing to do is to consume tokens until you see something that - * can legally follow a call to r *or* any rule that called r. - * You don't want the exact set of viable next tokens because the - * input might just be missing a token--you might consume the - * rest of the input looking for one of the missing tokens. - * - * Consider grammar: - * - * a : '[' b ']' - * | '(' b ')' - * ; - * b : c '^' INT ; - * c : ID - * | INT - * ; - * - * At each rule invocation, the set of tokens that could follow - * that rule is pushed on a stack. Here are the various "local" - * follow sets: - * - * FOLLOW(b1_in_a) = FIRST(']') = ']' - * FOLLOW(b2_in_a) = FIRST(')') = ')' - * FOLLOW(c_in_b) = FIRST('^') = '^' - * - * Upon erroneous input "[]", the call chain is - * - * a -> b -> c - * - * and, hence, the follow context stack is: - * - * depth local follow set after call to rule - * 0 a (from main()) - * 1 ']' b - * 3 '^' c - * - * Notice that ')' is not included, because b would have to have - * been called from a different context in rule a for ')' to be - * included. - * - * For error recovery, we cannot consider FOLLOW(c) - * (context-sensitive or otherwise). We need the combined set of - * all context-sensitive FOLLOW sets--the set of all tokens that - * could follow any reference in the call chain. We need to - * resync to one of those tokens. Note that FOLLOW(c)='^' and if - * we resync'd to that token, we'd consume until EOF. We need to - * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. - * In this case, for input "[]", LA(1) is in this set so we would - * not consume anything and after printing an error rule c would - * return normally. It would not find the required '^' though. - * At this point, it gets a mismatched token error and throws an - * exception (since LA(1) is not in the viable following token - * set). The rule exception handler tries to recover, but finds - * the same recovery set and doesn't consume anything. Rule b - * exits normally returning to rule a. Now it finds the ']' (and - * with the successful match exits errorRecovery mode). - * - * So, you cna see that the parser walks up call chain looking - * for the token that was a member of the recovery set. - * - * Errors are not generated in errorRecovery mode. - * - * ANTLR's error recovery mechanism is based upon original ideas: - * - * "Algorithms + Data Structures = Programs" by Niklaus Wirth - * - * and - * - * "A note on error recovery in recursive descent parsers": - * http://portal.acm.org/citation.cfm?id=947902.947905 - * - * Later, Josef Grosch had some good ideas: - * - * "Efficient and Comfortable Error Recovery in Recursive Descent - * Parsers": - * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip - * - * Like Grosch I implemented local FOLLOW sets that are combined - * at run-time upon error to avoid overhead during parsing. - */ - protected virtual BitSet ComputeErrorRecoverySet() - { - return CombineFollows( false ); - } - - /** - * Compute the context-sensitive FOLLOW set for current rule. - * This is set of token types that can follow a specific rule - * reference given a specific call chain. You get the set of - * viable tokens that can possibly come next (lookahead depth 1) - * given the current call chain. Contrast this with the - * definition of plain FOLLOW for rule r: - * - * - * FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} - * - * where x in T* and alpha, beta in V*; T is set of terminals and - * V is the set of terminals and nonterminals. In other words, - * FOLLOW(r) is the set of all tokens that can possibly follow - * references to r in *any* sentential form (context). At - * runtime, however, we know precisely which context applies as - * we have the call chain. We may compute the exact (rather - * than covering superset) set of following tokens. - * - * For example, consider grammar: - * - * stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} - * | "return" expr '.' - * ; - * expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} - * atom : INT // FOLLOW(atom)=={'+',')',';','.'} - * | '(' expr ')' - * ; - * - * The FOLLOW sets are all inclusive whereas context-sensitive - * FOLLOW sets are precisely what could follow a rule reference. - * For input input "i=(3);", here is the derivation: - * - * stat => ID '=' expr ';' - * => ID '=' atom ('+' atom)* ';' - * => ID '=' '(' expr ')' ('+' atom)* ';' - * => ID '=' '(' atom ')' ('+' atom)* ';' - * => ID '=' '(' INT ')' ('+' atom)* ';' - * => ID '=' '(' INT ')' ';' - * - * At the "3" token, you'd have a call chain of - * - * stat -> expr -> atom -> expr -> atom - * - * What can follow that specific nested ref to atom? Exactly ')' - * as you can see by looking at the derivation of this specific - * input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. - * - * You want the exact viable token set when recovering from a - * token mismatch. Upon token mismatch, if LA(1) is member of - * the viable next token set, then you know there is most likely - * a missing token in the input stream. "Insert" one by just not - * throwing an exception. - */ - protected virtual BitSet ComputeContextSensitiveRuleFOLLOW() - { - return CombineFollows( true ); - } - - // what is exact? it seems to only add sets from above on stack - // if EOR is in set i. When it sees a set w/o EOR, it stops adding. - // Why would we ever want them all? Maybe no viable alt instead of - // mismatched token? - protected virtual BitSet CombineFollows(bool exact) - { - int top = state._fsp; - BitSet followSet = new BitSet(); - for ( int i = top; i >= 0; i-- ) - { - BitSet localFollowSet = (BitSet)state.following[i]; - /* - System.out.println("local follow depth "+i+"="+ - localFollowSet.toString(getTokenNames())+")"); - */ - followSet.OrInPlace( localFollowSet ); - if ( exact ) - { - // can we see end of rule? - if ( localFollowSet.Member( TokenTypes.EndOfRule ) ) - { - // Only leave EOR in set if at top (start rule); this lets - // us know if have to include follow(start rule); i.e., EOF - if ( i > 0 ) - { - followSet.Remove( TokenTypes.EndOfRule ); - } - } - else - { // can't see end of rule, quit - break; - } - } - } - return followSet; - } - - /** Attempt to recover from a single missing or extra token. - * - * EXTRA TOKEN - * - * LA(1) is not what we are looking for. If LA(2) has the right token, - * however, then assume LA(1) is some extra spurious token. Delete it - * and LA(2) as if we were doing a normal match(), which advances the - * input. - * - * MISSING TOKEN - * - * If current token is consistent with what could come after - * ttype then it is ok to "insert" the missing token, else throw - * exception For example, Input "i=(3;" is clearly missing the - * ')'. When the parser returns from the nested call to expr, it - * will have call chain: - * - * stat -> expr -> atom - * - * and it will be trying to match the ')' at this point in the - * derivation: - * - * => ID '=' '(' INT ')' ('+' atom)* ';' - * ^ - * match() will see that ';' doesn't match ')' and report a - * mismatched token error. To recover, it sees that LA(1)==';' - * is in the set of tokens that can follow the ')' token - * reference in rule atom. It can assume that you forgot the ')'. - */ - protected virtual object RecoverFromMismatchedToken( IIntStream input, int ttype, BitSet follow ) - { - RecognitionException e = null; - // if next token is what we are looking for then "delete" this token - if ( MismatchIsUnwantedToken( input, ttype ) ) - { - e = new UnwantedTokenException( ttype, input, TokenNames ); - /* - System.err.println("recoverFromMismatchedToken deleting "+ - ((TokenStream)input).LT(1)+ - " since "+((TokenStream)input).LT(2)+" is what we want"); - */ - BeginResync(); - input.Consume(); // simply delete extra token - EndResync(); - ReportError( e ); // report after consuming so AW sees the token in the exception - // we want to return the token we're actually matching - object matchedSymbol = GetCurrentInputSymbol( input ); - input.Consume(); // move past ttype token as if all were ok - return matchedSymbol; - } - // can't recover with single token deletion, try insertion - if ( MismatchIsMissingToken( input, follow ) ) - { - object inserted = GetMissingSymbol( input, e, ttype, follow ); - e = new MissingTokenException( ttype, input, inserted ); - ReportError( e ); // report after inserting so AW sees the token in the exception - return inserted; - } - // even that didn't work; must throw the exception - e = new MismatchedTokenException(ttype, input, TokenNames); - throw e; - } - - /** Not currently used */ - public virtual object RecoverFromMismatchedSet( IIntStream input, - RecognitionException e, - BitSet follow ) - { - if ( MismatchIsMissingToken( input, follow ) ) - { - // System.out.println("missing token"); - ReportError( e ); - // we don't know how to conjure up a token for sets yet - return GetMissingSymbol( input, e, TokenTypes.Invalid, follow ); - } - // TODO do single token deletion like above for Token mismatch - throw e; - } - - /** - * Match needs to return the current input symbol, which gets put - * into the label for the associated token ref; e.g., x=ID. Token - * and tree parsers need to return different objects. Rather than test - * for input stream type or change the IntStream interface, I use - * a simple method to ask the recognizer to tell me what the current - * input symbol is. - * - * - * This is ignored for lexers. - */ - protected virtual object GetCurrentInputSymbol( IIntStream input ) - { - return null; - } - - /** Conjure up a missing token during error recovery. - * - * - * The recognizer attempts to recover from single missing - * symbols. But, actions might refer to that missing symbol. - * For example, x=ID {f($x);}. The action clearly assumes - * that there has been an identifier matched previously and that - * $x points at that token. If that token is missing, but - * the next token in the stream is what we want we assume that - * this token is missing and we keep going. Because we - * have to return some token to replace the missing token, - * we have to conjure one up. This method gives the user control - * over the tokens returned for missing tokens. Mostly, - * you will want to create something special for identifier - * tokens. For literals such as '{' and ',', the default - * action in the parser or tree parser works. It simply creates - * a CommonToken of the appropriate type. The text will be the token. - * If you change what tokens must be created by the lexer, - * override this method to create the appropriate tokens. - * - */ - protected virtual object GetMissingSymbol( IIntStream input, - RecognitionException e, - int expectedTokenType, - BitSet follow ) - { - return null; - } - - public virtual void ConsumeUntil( IIntStream input, int tokenType ) - { - //System.out.println("consumeUntil "+tokenType); - int ttype = input.LA( 1 ); - while ( ttype != TokenTypes.EndOfFile && ttype != tokenType ) - { - input.Consume(); - ttype = input.LA( 1 ); - } - } - - /** Consume tokens until one matches the given token set */ - public virtual void ConsumeUntil( IIntStream input, BitSet set ) - { - //System.out.println("consumeUntil("+set.toString(getTokenNames())+")"); - int ttype = input.LA( 1 ); - while ( ttype != TokenTypes.EndOfFile && !set.Member( ttype ) ) - { - //System.out.println("consume during recover LA(1)="+getTokenNames()[input.LA(1)]); - input.Consume(); - ttype = input.LA( 1 ); - } - } - - /** Push a rule's follow set using our own hardcoded stack */ - protected void PushFollow( BitSet fset ) - { - if ( ( state._fsp + 1 ) >= state.following.Length ) - { - Array.Resize(ref state.following, state.following.Length * 2); - } - state.following[++state._fsp] = fset; - } - - protected void PopFollow() - { - state._fsp--; - } - - /** - * Return List of the rules in your parser instance - * leading up to a call to this method. You could override if - * you want more details such as the file/line info of where - * in the parser java code a rule is invoked. - * - * - * - * This is very useful for error messages and for context-sensitive - * error recovery. - * - */ - public virtual IList GetRuleInvocationStack() - { - return GetRuleInvocationStack( new StackTrace(true) ); - } - - /** - * A more general version of GetRuleInvocationStack where you can - * pass in the StackTrace of, for example, a RecognitionException - * to get it's rule stack trace. - * - */ - public static IList GetRuleInvocationStack(StackTrace trace) - { - if (trace == null) - throw new ArgumentNullException("trace"); - - List rules = new List(); - StackFrame[] stack = trace.GetFrames() ?? new StackFrame[0]; - - for (int i = stack.Length - 1; i >= 0; i--) - { - StackFrame frame = stack[i]; - MethodBase method = frame.GetMethod(); - GrammarRuleAttribute[] attributes = (GrammarRuleAttribute[])method.GetCustomAttributes(typeof(GrammarRuleAttribute), true); - if (attributes != null && attributes.Length > 0) - rules.Add(attributes[0].Name); - } - - return rules; - } - - public virtual int BacktrackingLevel - { - get - { - return state.backtracking; - } - set - { - state.backtracking = value; - } - } - - /** Return whether or not a backtracking attempt failed. */ - public virtual bool Failed - { - get - { - return state.failed; - } - } - - /** - * Used to print out token names like ID during debugging and - * error reporting. The generated parsers implement a method - * that overrides this to point to their String[] tokenNames. - * - */ - public virtual string[] TokenNames - { - get - { - return null; - } - } - - /** - * For debugging and other purposes, might want the grammar name. - * Have ANTLR generate an implementation for this method. - * - */ - public virtual string GrammarFileName - { - get - { - return null; - } - } - - public abstract string SourceName - { - get; - } - - /** - * A convenience method for use most often with template rewrites. - * Convert a List to List - * - */ - public virtual List ToStrings( ICollection tokens ) - { - if ( tokens == null ) - return null; - - List strings = new List( tokens.Count ); - foreach ( IToken token in tokens ) - { - strings.Add( token.Text ); - } - - return strings; - } - - /** - * Given a rule number and a start token index number, return - * MEMO_RULE_UNKNOWN if the rule has not parsed input starting from - * start index. If this rule has parsed input starting from the - * start index before, then return where the rule stopped parsing. - * It returns the index of the last token matched by the rule. - * - * - * - * For now we use a hashtable and just the slow Object-based one. - * Later, we can make a special one for ints and also one that - * tosses out data after we commit past input position i. - * - */ - public virtual int GetRuleMemoization( int ruleIndex, int ruleStartIndex ) - { - if ( state.ruleMemo[ruleIndex] == null ) - { - state.ruleMemo[ruleIndex] = new Dictionary(); - } - - int stopIndex; - if ( !state.ruleMemo[ruleIndex].TryGetValue( ruleStartIndex, out stopIndex ) ) - return MemoRuleUnknown; - - return stopIndex; - } - - /** - * Has this rule already parsed input at the current index in the - * input stream? Return the stop token index or MEMO_RULE_UNKNOWN. - * If we attempted but failed to parse properly before, return - * MEMO_RULE_FAILED. - * - * - * - * This method has a side-effect: if we have seen this input for - * this rule and successfully parsed before, then seek ahead to - * 1 past the stop token matched for this rule last time. - * - */ - public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) - { - int stopIndex = GetRuleMemoization( ruleIndex, input.Index ); - if ( stopIndex == MemoRuleUnknown ) - { - return false; - } - if ( stopIndex == MemoRuleFailed ) - { - //System.out.println("rule "+ruleIndex+" will never succeed"); - state.failed = true; - } - else - { - //System.out.println("seen rule "+ruleIndex+" before; skipping ahead to @"+(stopIndex+1)+" failed="+state.failed); - input.Seek( stopIndex + 1 ); // jump to one past stop token - } - return true; - } - - /** - * Record whether or not this rule parsed the input at this position - * successfully. Use a standard java hashtable for now. - * - */ - public virtual void Memoize( IIntStream input, - int ruleIndex, - int ruleStartIndex ) - { - int stopTokenIndex = state.failed ? MemoRuleFailed : input.Index - 1; - if ( state.ruleMemo == null ) - { - if (TraceDestination != null) - TraceDestination.WriteLine( "!!!!!!!!! memo array is null for " + GrammarFileName ); - } - if ( ruleIndex >= state.ruleMemo.Length ) - { - if (TraceDestination != null) - TraceDestination.WriteLine("!!!!!!!!! memo size is " + state.ruleMemo.Length + ", but rule index is " + ruleIndex); - } - if ( state.ruleMemo[ruleIndex] != null ) - { - state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex; - } - } - - /** return how many rule/input-index pairs there are in total. - * TODO: this includes synpreds. :( - */ - public virtual int GetRuleMemoizationCacheSize() - { - int n = 0; - for ( int i = 0; state.ruleMemo != null && i < state.ruleMemo.Length; i++ ) - { - var ruleMap = state.ruleMemo[i]; - if ( ruleMap != null ) - { - n += ruleMap.Count; // how many input indexes are recorded? - } - } - return n; - } - - public virtual void TraceIn(string ruleName, int ruleIndex, object inputSymbol) - { - if (TraceDestination == null) - return; - - TraceDestination.Write("enter " + ruleName + " " + inputSymbol); - if (state.backtracking > 0) - { - TraceDestination.Write(" backtracking=" + state.backtracking); - } - TraceDestination.WriteLine(); - } - - public virtual void TraceOut(string ruleName, int ruleIndex, object inputSymbol) - { - if (TraceDestination == null) - return; - - TraceDestination.Write("exit " + ruleName + " " + inputSymbol); - if (state.backtracking > 0) - { - TraceDestination.Write(" backtracking=" + state.backtracking); - if (state.failed) - TraceDestination.Write(" failed"); - else - TraceDestination.Write(" succeeded"); - } - TraceDestination.WriteLine(); - } - - #region Debugging support - public virtual IDebugEventListener DebugListener - { - get - { - return null; - } - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugEnterRule(string grammarFileName, string ruleName) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.EnterRule(grammarFileName, ruleName); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugExitRule(string grammarFileName, string ruleName) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.ExitRule(grammarFileName, ruleName); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugEnterSubRule(int decisionNumber) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.EnterSubRule(decisionNumber); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugExitSubRule(int decisionNumber) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.ExitSubRule(decisionNumber); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugEnterAlt(int alt) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.EnterAlt(alt); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugEnterDecision(int decisionNumber, bool couldBacktrack) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.EnterDecision(decisionNumber, couldBacktrack); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugExitDecision(int decisionNumber) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.ExitDecision(decisionNumber); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugLocation(int line, int charPositionInLine) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.Location(line, charPositionInLine); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugSemanticPredicate(bool result, string predicate) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.SemanticPredicate(result, predicate); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugBeginBacktrack(int level) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.BeginBacktrack(level); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugEndBacktrack(int level, bool successful) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.EndBacktrack(level, successful); - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugRecognitionException(RecognitionException ex) - { - IDebugEventListener dbg = DebugListener; - if (dbg != null) - dbg.RecognitionException(ex); - } - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs deleted file mode 100644 index b18611b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs +++ /dev/null @@ -1,380 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - using Array = System.Array; - using CLSCompliant = System.CLSCompliantAttribute; - using ICloneable = System.ICloneable; - using Math = System.Math; - using StringBuilder = System.Text.StringBuilder; - - /** - * A stripped-down version of org.antlr.misc.BitSet that is just - * good enough to handle runtime requirements such as FOLLOW sets - * for automatic error recovery. - * - */ - [System.Serializable] - public sealed class BitSet : ICloneable - { - private const int BITS = 64; // number of bits / long - private const int LOG_BITS = 6; // 2^6 == 64 - - /** - * We will often need to do a mod operator (i mod nbits). Its - * turns out that, for powers of two, this mod operation is - * same as (i & (nbits-1)). Since mod is slow, we use a - * precomputed mod mask to do the mod instead. - * - */ - private const int MOD_MASK = BITS - 1; - - /** The actual data bits */ - ulong[] _bits; - - /** Construct a bitset of size one word (64 bits) */ - public BitSet() - : this( BITS ) - { - } - - /** Construction from a static array of longs */ - [CLSCompliant( false )] - public BitSet( ulong[] bits ) - { - _bits = bits; - } - - /** Construction from a list of integers */ - public BitSet( IEnumerable items ) - : this() - { - foreach ( int i in items ) - Add( i ); - } - - /** Construct a bitset given the size - * The size of the bitset in bits - */ - public BitSet( int nbits ) - { - _bits = new ulong[( ( nbits - 1 ) >> LOG_BITS ) + 1]; - } - - public static BitSet Of( int el ) - { - BitSet s = new BitSet( el + 1 ); - s.Add( el ); - return s; - } - - public static BitSet Of( int a, int b ) - { - BitSet s = new BitSet( Math.Max( a, b ) + 1 ); - s.Add( a ); - s.Add( b ); - return s; - } - - public static BitSet Of( int a, int b, int c ) - { - BitSet s = new BitSet(); - s.Add( a ); - s.Add( b ); - s.Add( c ); - return s; - } - - public static BitSet Of( int a, int b, int c, int d ) - { - BitSet s = new BitSet(); - s.Add( a ); - s.Add( b ); - s.Add( c ); - s.Add( d ); - return s; - } - - /** return this | a in a new set */ - public BitSet Or( BitSet a ) - { - if ( a == null ) - { - return this; - } - BitSet s = (BitSet)this.Clone(); - s.OrInPlace( a ); - return s; - } - - /** or this element into this set (grow as necessary to accommodate) */ - public void Add( int el ) - { - int n = WordNumber( el ); - if ( n >= _bits.Length ) - { - GrowToInclude( el ); - } - _bits[n] |= BitMask( el ); - } - - /** Grows the set to a larger number of bits. - * element that must fit in set - */ - public void GrowToInclude( int bit ) - { - int newSize = Math.Max( _bits.Length << 1, NumWordsToHold( bit ) ); - SetSize(newSize); - } - - public void OrInPlace( BitSet a ) - { - if ( a == null ) - { - return; - } - // If this is smaller than a, grow this first - if ( a._bits.Length > _bits.Length ) - { - SetSize( a._bits.Length ); - } - int min = Math.Min( _bits.Length, a._bits.Length ); - for ( int i = min - 1; i >= 0; i-- ) - { - _bits[i] |= a._bits[i]; - } - } - - /** Sets the size of a set. - * how many words the new set should be - */ - private void SetSize( int nwords ) - { - Array.Resize(ref _bits, nwords); - } - - private static ulong BitMask( int bitNumber ) - { - int bitPosition = bitNumber & MOD_MASK; // bitNumber mod BITS - return 1UL << bitPosition; - } - - public object Clone() - { - return new BitSet( (ulong[])_bits.Clone() ); - } - - public int Size() - { - int deg = 0; - for ( int i = _bits.Length - 1; i >= 0; i-- ) - { - ulong word = _bits[i]; - if ( word != 0L ) - { - for ( int bit = BITS - 1; bit >= 0; bit-- ) - { - if ( ( word & ( 1UL << bit ) ) != 0 ) - { - deg++; - } - } - } - } - return deg; - } - - public override int GetHashCode() - { - throw new System.NotImplementedException(); - } - - public override bool Equals( object other ) - { - if ( other == null || !( other is BitSet ) ) - { - return false; - } - - BitSet otherSet = (BitSet)other; - - int n = Math.Min( this._bits.Length, otherSet._bits.Length ); - - // for any bits in common, compare - for ( int i = 0; i < n; i++ ) - { - if ( this._bits[i] != otherSet._bits[i] ) - { - return false; - } - } - - // make sure any extra bits are off - - if ( this._bits.Length > n ) - { - for ( int i = n + 1; i < this._bits.Length; i++ ) - { - if ( this._bits[i] != 0 ) - { - return false; - } - } - } - else if ( otherSet._bits.Length > n ) - { - for ( int i = n + 1; i < otherSet._bits.Length; i++ ) - { - if ( otherSet._bits[i] != 0 ) - { - return false; - } - } - } - - return true; - } - - public bool Member( int el ) - { - if ( el < 0 ) - { - return false; - } - int n = WordNumber( el ); - if ( n >= _bits.Length ) - return false; - return ( _bits[n] & BitMask( el ) ) != 0; - } - - // remove this element from this set - public void Remove( int el ) - { - int n = WordNumber( el ); - if ( n < _bits.Length ) - { - _bits[n] &= ~BitMask( el ); - } - } - - public bool IsNil() - { - for ( int i = _bits.Length - 1; i >= 0; i-- ) - { - if ( _bits[i] != 0 ) - return false; - } - return true; - } - - private static int NumWordsToHold( int el ) - { - return ( el >> LOG_BITS ) + 1; - } - - public int NumBits() - { - return _bits.Length << LOG_BITS; // num words * bits per word - } - - /** return how much space is being used by the bits array not how many actually have member bits on. */ - public int LengthInLongWords() - { - return _bits.Length; - } - - /**Is this contained within a? */ - /* - public boolean subset(BitSet a) { - if (a == null || !(a instanceof BitSet)) return false; - return this.and(a).equals(this); - } - */ - - public int[] ToArray() - { - int[] elems = new int[Size()]; - int en = 0; - for ( int i = 0; i < ( _bits.Length << LOG_BITS ); i++ ) - { - if ( Member( i ) ) - { - elems[en++] = i; - } - } - return elems; - } - - private static int WordNumber( int bit ) - { - return bit >> LOG_BITS; // bit / BITS - } - - public override string ToString() - { - return ToString( null ); - } - - public string ToString( string[] tokenNames ) - { - StringBuilder buf = new StringBuilder(); - string separator = ","; - bool havePrintedAnElement = false; - buf.Append( '{' ); - - for ( int i = 0; i < ( _bits.Length << LOG_BITS ); i++ ) - { - if ( Member( i ) ) - { - if ( i > 0 && havePrintedAnElement ) - { - buf.Append( separator ); - } - if ( tokenNames != null ) - { - buf.Append( tokenNames[i] ); - } - else - { - buf.Append( i ); - } - havePrintedAnElement = true; - } - } - buf.Append( '}' ); - return buf.ToString(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/BufferedTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/BufferedTokenStream.cs deleted file mode 100644 index 517e64a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/BufferedTokenStream.cs +++ /dev/null @@ -1,425 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using CLSCompliant = System.CLSCompliantAttribute; - using IndexOutOfRangeException = System.IndexOutOfRangeException; - using StringBuilder = System.Text.StringBuilder; - - /** Buffer all input tokens but do on-demand fetching of new tokens from - * lexer. Useful when the parser or lexer has to set context/mode info before - * proper lexing of future tokens. The ST template parser needs this, - * for example, because it has to constantly flip back and forth between - * inside/output templates. E.g., }> has to parse names - * as part of an expression but "hi, " as a nested template. - * - * You can't use this stream if you pass whitespace or other off-channel - * tokens to the parser. The stream can't ignore off-channel tokens. - * (UnbufferedTokenStream is the same way.) - * - * This is not a subclass of UnbufferedTokenStream because I don't want - * to confuse small moving window of tokens it uses for the full buffer. - */ - [System.Serializable] - public class BufferedTokenStream : ITokenStream, ITokenStreamInformation - { - private ITokenSource _tokenSource; - - /** Record every single token pulled from the source so we can reproduce - * chunks of it later. The buffer in LookaheadStream overlaps sometimes - * as its moving window moves through the input. This list captures - * everything so we can access complete input text. - */ - [CLSCompliant(false)] - protected List _tokens = new List(100); - - /** Track the last mark() call result value for use in rewind(). */ - private int _lastMarker; - - /** The index into the tokens list of the current token (next token - * to consume). tokens[p] should be LT(1). p=-1 indicates need - * to initialize with first token. The ctor doesn't get a token. - * First call to LT(1) or whatever gets the first token and sets p=0; - */ - [CLSCompliant(false)] - protected int _p = -1; - - public BufferedTokenStream() - { - } - - public BufferedTokenStream(ITokenSource tokenSource) - { - this._tokenSource = tokenSource; - } - - public virtual ITokenSource TokenSource - { - get - { - return _tokenSource; - } - set - { - this._tokenSource = value; - _tokens.Clear(); - _p = -1; - } - } - - public virtual int Index - { - get - { - return _p; - } - } - - /// - /// How deep have we gone? - /// - public virtual int Range - { - get; - protected set; - } - - public virtual int Count - { - get - { - return _tokens.Count; - } - } - - public virtual string SourceName - { - get - { - return _tokenSource.SourceName; - } - } - - public virtual IToken LastToken - { - get - { - return LB(1); - } - } - - public virtual IToken LastRealToken - { - get - { - int i = 0; - IToken token; - do - { - i++; - token = LB(i); - } while (token != null && token.Line <= 0); - - return token; - } - } - - public virtual int MaxLookBehind - { - get - { - return int.MaxValue; - } - } - - public virtual int Mark() - { - if (_p == -1) - Setup(); - _lastMarker = Index; - return _lastMarker; - } - - public virtual void Release(int marker) - { - // no resources to release - } - - public virtual void Rewind(int marker) - { - Seek(marker); - } - - public virtual void Rewind() - { - Seek(_lastMarker); - } - - public virtual void Reset() - { - _p = 0; - _lastMarker = 0; - } - - public virtual void Seek(int index) - { - _p = index; - } - - /** Move the input pointer to the next incoming token. The stream - * must become active with LT(1) available. consume() simply - * moves the input pointer so that LT(1) points at the next - * input symbol. Consume at least one token. - * - * Walk past any token not on the channel the parser is listening to. - */ - public virtual void Consume() - { - if (_p == -1) - Setup(); - _p++; - Sync(_p); - } - - /** Make sure index i in tokens has a token. */ - protected virtual void Sync(int i) - { - int n = i - _tokens.Count + 1; // how many more elements we need? - if (n > 0) - Fetch(n); - } - - /** add n elements to buffer */ - protected virtual void Fetch(int n) - { - for (int i = 0; i < n; i++) - { - IToken t = TokenSource.NextToken(); - t.TokenIndex = _tokens.Count; - _tokens.Add(t); - if (t.Type == CharStreamConstants.EndOfFile) - break; - } - } - - public virtual IToken Get(int i) - { - if (i < 0 || i >= _tokens.Count) - { - throw new IndexOutOfRangeException("token index " + i + " out of range 0.." + (_tokens.Count - 1)); - } - return _tokens[i]; - } - -#if false // why is this different from GetTokens(start, count) ? - /// - /// Get all tokens from start..(start+count-1) inclusively - /// - public virtual List Get(int start, int count) - { - if (start < 0) - throw new ArgumentOutOfRangeException("start"); - if (count < 0) - throw new ArgumentOutOfRangeException("count"); - if (start + count >= _tokens.Count) - throw new ArgumentException(); - - if (_p == -1) - Setup(); - - List subset = new List(count); - for (int i = 0; i < count; i++) - { - IToken token = _tokens[i]; - if (token.Type == TokenTypes.EndOfFile) - break; - - subset.Add(token); - } - - return subset; - } -#endif - - public virtual int LA(int i) - { - return LT(i).Type; - } - - protected virtual IToken LB(int k) - { - if ((_p - k) < 0) - return null; - - return _tokens[_p - k]; - } - - public virtual IToken LT(int k) - { - if (_p == -1) - Setup(); - if (k == 0) - return null; - if (k < 0) - return LB(-k); - - int i = _p + k - 1; - Sync(i); - if (i >= _tokens.Count) - { - // EOF must be last token - return _tokens[_tokens.Count - 1]; - } - - if (i > Range) - Range = i; - - return _tokens[_p + k - 1]; - } - - protected virtual void Setup() - { - Sync(0); - _p = 0; - } - - public virtual List GetTokens() - { - return _tokens; - } - - public virtual List GetTokens(int start, int stop) - { - return GetTokens(start, stop, default(BitSet)); - } - - /** Given a start and stop index, return a List of all tokens in - * the token type BitSet. Return null if no tokens were found. This - * method looks at both on and off channel tokens. - */ - public virtual List GetTokens(int start, int stop, BitSet types) - { - if (_p == -1) - Setup(); - if (stop >= _tokens.Count) - stop = _tokens.Count - 1; - if (start < 0) - start = 0; - if (start > stop) - return null; - - // list = tokens[start:stop]:{Token t, t.getType() in types} - List filteredTokens = new List(); - for (int i = start; i <= stop; i++) - { - IToken t = _tokens[i]; - if (types == null || types.Member(t.Type)) - { - filteredTokens.Add(t); - } - } - if (filteredTokens.Count == 0) - { - filteredTokens = null; - } - return filteredTokens; - } - - public virtual List GetTokens(int start, int stop, IEnumerable types) - { - return GetTokens(start, stop, new BitSet(types)); - } - - public virtual List GetTokens(int start, int stop, int ttype) - { - return GetTokens(start, stop, BitSet.Of(ttype)); - } - - public override string ToString() - { - if (_p == -1) - Setup(); - - Fill(); - return ToString(0, _tokens.Count - 1); - } - - public virtual string ToString(int start, int stop) - { - if (start < 0 || stop < 0) - return null; - if (_p == -1) - Setup(); - if (stop >= _tokens.Count) - stop = _tokens.Count - 1; - - StringBuilder buf = new StringBuilder(); - for (int i = start; i <= stop; i++) - { - IToken t = _tokens[i]; - if (t.Type == CharStreamConstants.EndOfFile) - break; - buf.Append(t.Text); - } - - return buf.ToString(); - } - - public virtual string ToString(IToken start, IToken stop) - { - if (start != null && stop != null) - { - return ToString(start.TokenIndex, stop.TokenIndex); - } - return null; - } - - public virtual void Fill() - { - if (_p == -1) - Setup(); - - if (_tokens[_p].Type == CharStreamConstants.EndOfFile) - return; - - int i = _p + 1; - Sync(i); - while (_tokens[i].Type != CharStreamConstants.EndOfFile) - { - i++; - Sync(i); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs deleted file mode 100644 index aad127e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - public static class CharStreamConstants - { - public const int EndOfFile = -1; - } - -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs deleted file mode 100644 index b595710..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs +++ /dev/null @@ -1,56 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - /** - * When walking ahead with cyclic DFA or for syntactic predicates, - * we need to record the state of the input stream (char index, - * line, etc...) so that we can rewind the state after scanning ahead. - * - * - * This is the complete state of a stream. - */ - [System.Serializable] - public class CharStreamState - { - /** Index into the char stream of next lookahead char */ - public int p; - - /** What line number is the scanner at before processing buffer[p]? */ - public int line; - - /** What char position 0..n-1 in line is scanner before processing buffer[p]? */ - public int charPositionInLine; - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs deleted file mode 100644 index 1b1e59b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs +++ /dev/null @@ -1,212 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - /** - * A Token object like we'd use in ANTLR 2.x; has an actual string created - * and associated with this object. These objects are needed for imaginary - * tree nodes that have payload objects. We need to create a Token object - * that has a string; the tree node will point at this token. CommonToken - * has indexes into a char stream and hence cannot be used to introduce - * new strings. - * - */ - [System.Serializable] - public class ClassicToken : IToken - { - string text; - int type; - int line; - int charPositionInLine; - int channel = TokenChannels.Default; - - /** What token number is this from 0..n-1 tokens */ - int index; - - public ClassicToken( int type ) - { - this.type = type; - } - - public ClassicToken( IToken oldToken ) - { - text = oldToken.Text; - type = oldToken.Type; - line = oldToken.Line; - charPositionInLine = oldToken.CharPositionInLine; - channel = oldToken.Channel; - } - - public ClassicToken( int type, string text ) - { - this.type = type; - this.text = text; - } - - public ClassicToken( int type, string text, int channel ) - { - this.type = type; - this.text = text; - this.channel = channel; - } - - #region IToken Members - public string Text - { - get - { - return text; - } - set - { - text = value; - } - } - - public int Type - { - get - { - return type; - } - set - { - type = value; - } - } - - public int Line - { - get - { - return line; - } - set - { - line = value; - } - } - - public int CharPositionInLine - { - get - { - return charPositionInLine; - } - set - { - charPositionInLine = value; - } - } - - public int Channel - { - get - { - return channel; - } - set - { - channel = value; - } - } - - public int StartIndex - { - get - { - return -1; - } - set - { - } - } - - public int StopIndex - { - get - { - return -1; - } - set - { - } - } - - public int TokenIndex - { - get - { - return index; - } - set - { - index = value; - } - } - - public ICharStream InputStream - { - get - { - return null; - } - set - { - } - } - - #endregion - - public override string ToString() - { - string channelStr = ""; - if ( channel > 0 ) - { - channelStr = ",channel=" + channel; - } - string txt = Text; - if ( txt != null ) - { - txt = txt.Replace( "\n", "\\\\n" ); - txt = txt.Replace( "\r", "\\\\r" ); - txt = txt.Replace( "\t", "\\\\t" ); - } - else - { - txt = ""; - } - return "[@" + TokenIndex + ",'" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs deleted file mode 100644 index 5797ca8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs +++ /dev/null @@ -1,260 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using NonSerialized = System.NonSerializedAttribute; - using Regex = System.Text.RegularExpressions.Regex; - using Serializable = System.SerializableAttribute; - - [Serializable] - public class CommonToken : IToken - { - int type; - int line; - int charPositionInLine = -1; // set to invalid position - int channel = TokenChannels.Default; - [NonSerialized] - ICharStream input; - - /** - * We need to be able to change the text once in a while. If - * this is non-null, then getText should return this. Note that - * start/stop are not affected by changing this. - * - */ - string text; - - /** What token number is this from 0..n-1 tokens; < 0 implies invalid index */ - int index = -1; - - /** The char position into the input buffer where this token starts */ - int start; - - /** The char position into the input buffer where this token stops */ - int stop; - - public CommonToken() - { - } - - public CommonToken( int type ) - { - this.type = type; - } - - public CommonToken( ICharStream input, int type, int channel, int start, int stop ) - { - this.input = input; - this.type = type; - this.channel = channel; - this.start = start; - this.stop = stop; - } - - public CommonToken( int type, string text ) - { - this.type = type; - this.channel = TokenChannels.Default; - this.text = text; - } - - public CommonToken( IToken oldToken ) - { - text = oldToken.Text; - type = oldToken.Type; - line = oldToken.Line; - index = oldToken.TokenIndex; - charPositionInLine = oldToken.CharPositionInLine; - channel = oldToken.Channel; - input = oldToken.InputStream; - if ( oldToken is CommonToken ) - { - start = ( (CommonToken)oldToken ).start; - stop = ( (CommonToken)oldToken ).stop; - } - } - - #region IToken Members - public string Text - { - get - { - if ( text != null ) - return text; - if ( input == null ) - return null; - - if (start <= stop && stop < input.Count) - return input.Substring( start, stop - start + 1 ); - - return ""; - } - - set - { - /** Override the text for this token. getText() will return this text - * rather than pulling from the buffer. Note that this does not mean - * that start/stop indexes are not valid. It means that that input - * was converted to a new string in the token object. - */ - text = value; - } - } - - public int Type - { - get - { - return type; - } - set - { - type = value; - } - } - - public int Line - { - get - { - return line; - } - set - { - line = value; - } - } - - public int CharPositionInLine - { - get - { - return charPositionInLine; - } - set - { - charPositionInLine = value; - } - } - - public int Channel - { - get - { - return channel; - } - set - { - channel = value; - } - } - - public int StartIndex - { - get - { - return start; - } - set - { - start = value; - } - } - - public int StopIndex - { - get - { - return stop; - } - set - { - stop = value; - } - } - - public int TokenIndex - { - get - { - return index; - } - set - { - index = value; - } - } - - public ICharStream InputStream - { - get - { - return input; - } - set - { - input = value; - } - } - - #endregion - - public override string ToString() - { - string channelStr = ""; - if ( channel > 0 ) - { - channelStr = ",channel=" + channel; - } - string txt = Text; - if ( txt != null ) - { - txt = Regex.Replace( txt, "\n", "\\\\n" ); - txt = Regex.Replace( txt, "\r", "\\\\r" ); - txt = Regex.Replace( txt, "\t", "\\\\t" ); - } - else - { - txt = ""; - } - return "[@" + TokenIndex + "," + start + ":" + stop + "='" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; - } - - [System.Runtime.Serialization.OnSerializing] - internal void OnSerializing( System.Runtime.Serialization.StreamingContext context ) - { - if ( text == null ) - text = Text; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs deleted file mode 100644 index 28813cb..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs +++ /dev/null @@ -1,181 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - using InvalidOperationException = System.InvalidOperationException; - using StringBuilder = System.Text.StringBuilder; - - /** - * The most common stream of tokens is one where every token is buffered up - * and tokens are prefiltered for a certain channel (the parser will only - * see these tokens and cannot change the filter channel number during the - * parse). - * - * - * TODO: how to access the full token stream? How to track all tokens matched per rule? - */ - [System.Serializable] - public class CommonTokenStream : BufferedTokenStream - { - /** Skip tokens on any channel but this one; this is how we skip whitespace... */ - private int _channel; - - public CommonTokenStream() - { - } - - public CommonTokenStream(ITokenSource tokenSource) - : this(tokenSource, TokenChannels.Default) - { - } - - public CommonTokenStream(ITokenSource tokenSource, int channel) - : base(tokenSource) - { - this._channel = channel; - } - - public int Channel - { - get - { - return _channel; - } - } - - /** Reset this token stream by setting its token source. */ - public override ITokenSource TokenSource - { - get - { - return base.TokenSource; - } - set - { - base.TokenSource = value; - _channel = TokenChannels.Default; - } - } - - /** Always leave p on an on-channel token. */ - public override void Consume() - { - if (_p == -1) - Setup(); - _p++; - _p = SkipOffTokenChannels(_p); - } - - protected override IToken LB(int k) - { - if (k == 0 || (_p - k) < 0) - return null; - - int i = _p; - int n = 1; - // find k good tokens looking backwards - while (n <= k) - { - // skip off-channel tokens - i = SkipOffTokenChannelsReverse(i - 1); - n++; - } - if (i < 0) - return null; - return _tokens[i]; - } - - public override IToken LT(int k) - { - if (_p == -1) - Setup(); - if (k == 0) - return null; - if (k < 0) - return LB(-k); - int i = _p; - int n = 1; // we know tokens[p] is a good one - // find k good tokens - while (n < k) - { - // skip off-channel tokens - i = SkipOffTokenChannels(i + 1); - n++; - } - - if (i > Range) - Range = i; - - return _tokens[i]; - } - - /** Given a starting index, return the index of the first on-channel - * token. - */ - protected virtual int SkipOffTokenChannels(int i) - { - Sync(i); - while (_tokens[i].Channel != _channel) - { - // also stops at EOF (it's on channel) - i++; - Sync(i); - } - return i; - } - - protected virtual int SkipOffTokenChannelsReverse(int i) - { - while (i >= 0 && ((IToken)_tokens[i]).Channel != _channel) - { - i--; - } - - return i; - } - - public override void Reset() - { - base.Reset(); - _p = SkipOffTokenChannels(0); - } - - protected override void Setup() - { - _p = 0; - _p = SkipOffTokenChannels(_p); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs deleted file mode 100644 index 76c4083..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs +++ /dev/null @@ -1,318 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using ConditionalAttribute = System.Diagnostics.ConditionalAttribute; - using Console = System.Console; - using IDebugEventListener = Antlr.Runtime.Debug.IDebugEventListener; - - public delegate int SpecialStateTransitionHandler( DFA dfa, int s, IIntStream input ); - - /** A DFA implemented as a set of transition tables. - * - * - * Any state that has a semantic predicate edge is special; those states - * are generated with if-then-else structures in a specialStateTransition() - * which is generated by cyclicDFA template. - * - * There are at most 32767 states (16-bit signed short). - * Could get away with byte sometimes but would have to generate different - * types and the simulation code too. For a point of reference, the Java - * lexer's Tokens rule DFA has 326 states roughly. - * - */ - public class DFA - { - protected short[] eot; - protected short[] eof; - protected char[] min; - protected char[] max; - protected short[] accept; - protected short[] special; - protected short[][] transition; - - protected int decisionNumber; - - /** Which recognizer encloses this DFA? Needed to check backtracking */ - protected BaseRecognizer recognizer; - - public bool debug = false; - - public DFA() - : this(SpecialStateTransitionDefault) - { - } - - public DFA( SpecialStateTransitionHandler specialStateTransition ) - { - this.SpecialStateTransition = specialStateTransition ?? SpecialStateTransitionDefault; - } - - public virtual string Description - { - get - { - return "n/a"; - } - } - - /** - * From the input stream, predict what alternative will succeed - * using this DFA (representing the covering regular approximation - * to the underlying CFL). Return an alternative number 1..n. Throw - * an exception upon error. - * - */ - public virtual int Predict( IIntStream input ) - { - if (input == null) - throw new ArgumentNullException("input"); - - DfaDebugMessage("Enter DFA.Predict for decision {0}", decisionNumber); - - int mark = input.Mark(); // remember where decision started in input - int s = 0; // we always start at s0 - try - { - while (true) - { - DfaDebugMessage("DFA {0} state {1} LA(1)={2}({3}), index={4}", decisionNumber, s, (char)input.LA(1), input.LA(1), input.Index); - - int specialState = special[s]; - if ( specialState >= 0 ) - { - DfaDebugMessage("DFA {0} state {1} is special state {2}", decisionNumber, s, specialState); - - s = SpecialStateTransition( this, specialState, input ); - - DfaDebugMessage("DFA {0} returns from special state {1} to {2}", decisionNumber, specialState, s); - - if ( s == -1 ) - { - NoViableAlt( s, input ); - return 0; - } - - input.Consume(); - continue; - } - - if ( accept[s] >= 1 ) - { - DfaDebugMessage("accept; predict {0} from state {1}", accept[s], s); - return accept[s]; - } - - // look for a normal char transition - char c = (char)input.LA( 1 ); // -1 == \uFFFF, all tokens fit in 65000 space - if ( c >= min[s] && c <= max[s] ) - { - int snext = transition[s][c - min[s]]; // move to next state - if ( snext < 0 ) - { - // was in range but not a normal transition - // must check EOT, which is like the else clause. - // eot[s]>=0 indicates that an EOT edge goes to another - // state. - if ( eot[s] >= 0 ) - { - // EOT Transition to accept state? - DfaDebugMessage("EOT transition"); - s = eot[s]; - input.Consume(); - // TODO: I had this as return accept[eot[s]] - // which assumed here that the EOT edge always - // went to an accept...faster to do this, but - // what about predicated edges coming from EOT - // target? - continue; - } - - NoViableAlt( s, input ); - return 0; - } - - s = snext; - input.Consume(); - continue; - } - - if ( eot[s] >= 0 ) - { - // EOT Transition? - DfaDebugMessage("EOT transition"); - s = eot[s]; - input.Consume(); - continue; - } - - if ( c == unchecked( (char)TokenTypes.EndOfFile ) && eof[s] >= 0 ) - { - // EOF Transition to accept state? - DfaDebugMessage("accept via EOF; predict {0} from {1}", accept[eof[s]], eof[s]); - return accept[eof[s]]; - } - - // not in range and not EOF/EOT, must be invalid symbol - DfaDebugInvalidSymbol(s); - - NoViableAlt( s, input ); - return 0; - } - } - finally - { - input.Rewind( mark ); - } - } - - [Conditional("DEBUG_DFA")] - private void DfaDebugMessage(string format, params object[] args) - { - Console.Error.WriteLine(format, args); - } - - [Conditional("DEBUG_DFA")] - private void DfaDebugInvalidSymbol(int s) - { - Console.Error.WriteLine("min[{0}]={1}", s, min[s]); - Console.Error.WriteLine("max[{0}]={1}", s, max[s]); - Console.Error.WriteLine("eot[{0}]={1}", s, eot[s]); - Console.Error.WriteLine("eof[{0}]={1}", s, eof[s]); - - for (int p = 0; p < transition[s].Length; p++) - Console.Error.Write(transition[s][p] + " "); - - Console.Error.WriteLine(); - } - - protected virtual void NoViableAlt( int s, IIntStream input ) - { - if ( recognizer.state.backtracking > 0 ) - { - recognizer.state.failed = true; - return; - } - NoViableAltException nvae = - new NoViableAltException( Description, - decisionNumber, - s, - input ); - Error( nvae ); - throw nvae; - } - - /** A hook for debugging interface */ - public virtual void Error( NoViableAltException nvae ) - { - } - - public SpecialStateTransitionHandler SpecialStateTransition - { - get; - private set; - } - //public virtual int specialStateTransition( int s, IntStream input ) - //{ - // return -1; - //} - - static int SpecialStateTransitionDefault( DFA dfa, int s, IIntStream input ) - { - return -1; - } - - /** - * Given a String that has a run-length-encoding of some unsigned shorts - * like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid - * static short[] which generates so much init code that the class won't - * compile. :( - * - */ - public static short[] UnpackEncodedString( string encodedString ) - { - // walk first to find how big it is. - int size = 0; - for ( int i = 0; i < encodedString.Length; i += 2 ) - { - size += encodedString[i]; - } - short[] data = new short[size]; - int di = 0; - for ( int i = 0; i < encodedString.Length; i += 2 ) - { - char n = encodedString[i]; - char v = encodedString[i + 1]; - // add v n times to data - for ( int j = 1; j <= n; j++ ) - { - data[di++] = (short)v; - } - } - return data; - } - - /** Hideous duplication of code, but I need different typed arrays out :( */ - public static char[] UnpackEncodedStringToUnsignedChars( string encodedString ) - { - // walk first to find how big it is. - int size = 0; - for ( int i = 0; i < encodedString.Length; i += 2 ) - { - size += encodedString[i]; - } - char[] data = new char[size]; - int di = 0; - for ( int i = 0; i < encodedString.Length; i += 2 ) - { - char n = encodedString[i]; - char v = encodedString[i + 1]; - // add v n times to data - for ( int j = 1; j <= n; j++ ) - { - data[di++] = v; - } - } - return data; - } - - [Conditional("ANTLR_DEBUG")] - protected virtual void DebugRecognitionException(RecognitionException ex) - { - IDebugEventListener dbg = recognizer.DebugListener; - if (dbg != null) - dbg.RecognitionException(ex); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs deleted file mode 100644 index 0f5d2c5..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs +++ /dev/null @@ -1,387 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Debug -{ - - /** All debugging events that a recognizer can trigger. - * - * - * I did not create a separate AST debugging interface as it would create - * lots of extra classes and DebugParser has a dbg var defined, which makes - * it hard to change to ASTDebugEventListener. I looked hard at this issue - * and it is easier to understand as one monolithic event interface for all - * possible events. Hopefully, adding ST debugging stuff won't be bad. Leave - * for future. 4/26/2006. - * - */ - public interface IDebugEventListener - { - void Initialize(); - - /** - * The parser has just entered a rule. No decision has been made about - * which alt is predicted. This is fired AFTER init actions have been - * executed. Attributes are defined and available etc... - * The grammarFileName allows composite grammars to jump around among - * multiple grammar files. - * - */ - void EnterRule( string grammarFileName, string ruleName ); - - /** - * Because rules can have lots of alternatives, it is very useful to - * know which alt you are entering. This is 1..n for n alts. - * - */ - void EnterAlt( int alt ); - - /** - * This is the last thing executed before leaving a rule. It is - * executed even if an exception is thrown. This is triggered after - * error reporting and recovery have occurred (unless the exception is - * not caught in this rule). This implies an "exitAlt" event. - * The grammarFileName allows composite grammars to jump around among - * multiple grammar files. - * - */ - void ExitRule( string grammarFileName, string ruleName ); - - /** Track entry into any (...) subrule other EBNF construct */ - void EnterSubRule( int decisionNumber ); - - void ExitSubRule( int decisionNumber ); - - /** - * Every decision, fixed k or arbitrary, has an enter/exit event - * so that a GUI can easily track what LT/consume events are - * associated with prediction. You will see a single enter/exit - * subrule but multiple enter/exit decision events, one for each - * loop iteration. - * - */ - void EnterDecision(int decisionNumber, bool couldBacktrack); - - void ExitDecision( int decisionNumber ); - - /** - * An input token was consumed; matched by any kind of element. - * Trigger after the token was matched by things like match(), matchAny(). - * - */ - void ConsumeToken( IToken t ); - - /** - * An off-channel input token was consumed. - * Trigger after the token was matched by things like match(), matchAny(). - * (unless of course the hidden token is first stuff in the input stream). - * - */ - void ConsumeHiddenToken( IToken t ); - - /** - * Somebody (anybody) looked ahead. Note that this actually gets - * triggered by both LA and LT calls. The debugger will want to know - * which Token object was examined. Like consumeToken, this indicates - * what token was seen at that depth. A remote debugger cannot look - * ahead into a file it doesn't have so LT events must pass the token - * even if the info is redundant. - * - */ - void LT( int i, IToken t ); - - /** - * The parser is going to look arbitrarily ahead; mark this location, - * the token stream's marker is sent in case you need it. - * - */ - void Mark( int marker ); - - /** - * After an arbitrairly long lookahead as with a cyclic DFA (or with - * any backtrack), this informs the debugger that stream should be - * rewound to the position associated with marker. - * - */ - void Rewind( int marker ); - - /** - * Rewind to the input position of the last marker. - * Used currently only after a cyclic DFA and just - * before starting a sem/syn predicate to get the - * input position back to the start of the decision. - * Do not "pop" the marker off the state. mark(i) - * and rewind(i) should balance still. - * - */ - void Rewind(); - - void BeginBacktrack( int level ); - - void EndBacktrack( int level, bool successful ); - - /** - * To watch a parser move through the grammar, the parser needs to - * inform the debugger what line/charPos it is passing in the grammar. - * For now, this does not know how to switch from one grammar to the - * other and back for island grammars etc... - * - * - * - * This should also allow breakpoints because the debugger can stop - * the parser whenever it hits this line/pos. - * - */ - void Location( int line, int pos ); - - /** - * A recognition exception occurred such as NoViableAltException. I made - * this a generic event so that I can alter the exception hierachy later - * without having to alter all the debug objects. - * - * - * - * Upon error, the stack of enter rule/subrule must be properly unwound. - * If no viable alt occurs it is within an enter/exit decision, which - * also must be rewound. Even the rewind for each mark must be unwount. - * In the Java target this is pretty easy using try/finally, if a bit - * ugly in the generated code. The rewind is generated in DFA.predict() - * actually so no code needs to be generated for that. For languages - * w/o this "finally" feature (C++?), the target implementor will have - * to build an event stack or something. - * - * Across a socket for remote debugging, only the RecognitionException - * data fields are transmitted. The token object or whatever that - * caused the problem was the last object referenced by LT. The - * immediately preceding LT event should hold the unexpected Token or - * char. - * - * Here is a sample event trace for grammar: - * - * b : C ({;}A|B) // {;} is there to prevent A|B becoming a set - * | D - * ; - * - * The sequence for this rule (with no viable alt in the subrule) for - * input 'c c' (there are 3 tokens) is: - * - * commence - * LT(1) - * enterRule b - * location 7 1 - * enter decision 3 - * LT(1) - * exit decision 3 - * enterAlt1 - * location 7 5 - * LT(1) - * consumeToken [c/<4>,1:0] - * location 7 7 - * enterSubRule 2 - * enter decision 2 - * LT(1) - * LT(1) - * recognitionException NoViableAltException 2 1 2 - * exit decision 2 - * exitSubRule 2 - * beginResync - * LT(1) - * consumeToken [c/<4>,1:1] - * LT(1) - * endResync - * LT(-1) - * exitRule b - * terminate - * - */ - void RecognitionException( RecognitionException e ); - - /** - * Indicates the recognizer is about to consume tokens to resynchronize - * the parser. Any consume events from here until the recovered event - * are not part of the parse--they are dead tokens. - * - */ - void BeginResync(); - - /** - * Indicates that the recognizer has finished consuming tokens in order - * to resychronize. There may be multiple beginResync/endResync pairs - * before the recognizer comes out of errorRecovery mode (in which - * multiple errors are suppressed). This will be useful - * in a gui where you want to probably grey out tokens that are consumed - * but not matched to anything in grammar. Anything between - * a beginResync/endResync pair was tossed out by the parser. - * - */ - void EndResync(); - - /** A semantic predicate was evaluate with this result and action text */ - void SemanticPredicate( bool result, string predicate ); - - /** - * Announce that parsing has begun. Not technically useful except for - * sending events over a socket. A GUI for example will launch a thread - * to connect and communicate with a remote parser. The thread will want - * to notify the GUI when a connection is made. ANTLR parsers - * trigger this upon entry to the first rule (the ruleLevel is used to - * figure this out). - * - */ - void Commence(); - - /** - * Parsing is over; successfully or not. Mostly useful for telling - * remote debugging listeners that it's time to quit. When the rule - * invocation level goes to zero at the end of a rule, we are done - * parsing. - * - */ - void Terminate(); - - - #region Tree Parsing - - /** - * Input for a tree parser is an AST, but we know nothing for sure - * about a node except its type and text (obtained from the adaptor). - * This is the analog of the consumeToken method. Again, the ID is - * the hashCode usually of the node so it only works if hashCode is - * not implemented. If the type is UP or DOWN, then - * the ID is not really meaningful as it's fixed--there is - * just one UP node and one DOWN navigation node. - * - * - * - */ - void ConsumeNode( object t ); - - /** - * The tree parser lookedahead. If the type is UP or DOWN, - * then the ID is not really meaningful as it's fixed--there is - * just one UP node and one DOWN navigation node. - * - */ - void LT( int i, object t ); - - #endregion - - - #region AST Events - - /** - * A nil was created (even nil nodes have a unique ID... - * they are not "null" per se). As of 4/28/2006, this - * seems to be uniquely triggered when starting a new subtree - * such as when entering a subrule in automatic mode and when - * building a tree in rewrite mode. - * - * - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only t.ID is set. - * - */ - void NilNode( object t ); - - /** - * Upon syntax error, recognizers bracket the error with an error node - * if they are building ASTs. - * - * - * - */ - void ErrorNode( object t ); - - /** Announce a new node built from token elements such as type etc... - * - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only t.ID, type, text are - * set. - * - */ - void CreateNode( object t ); - - /** Announce a new node built from an existing token. - * - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only node.ID and token.tokenIndex - * are set. - * - */ - void CreateNode( object node, IToken token ); - - /** Make a node the new root of an existing root. See - * - * - * Note: the newRootID parameter is possibly different - * than the TreeAdaptor.becomeRoot() newRoot parameter. - * In our case, it will always be the result of calling - * TreeAdaptor.becomeRoot() and not root_n or whatever. - * - * The listener should assume that this event occurs - * only when the current subrule (or rule) subtree is - * being reset to newRootID. - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only IDs are set. - * - * - * - */ - void BecomeRoot( object newRoot, object oldRoot ); - - /** Make childID a child of rootID. - * - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only IDs are set. - * - * - * - */ - void AddChild( object root, object child ); - - /** Set the token start/stop token index for a subtree root or node. - * - * - * If you are receiving this event over a socket via - * RemoteDebugEventSocketListener then only t.ID is set. - * - */ - void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ); - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs deleted file mode 100644 index f2f6e81..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** The recognizer did not match anything for a (..)+ loop. */ - [System.Serializable] - public class EarlyExitException : RecognitionException - { - private readonly int _decisionNumber; - - public EarlyExitException() - { - } - - public EarlyExitException(string message) - : base(message) - { - } - - public EarlyExitException(string message, Exception innerException) - : base(message, innerException) - { - } - - public EarlyExitException(int decisionNumber, IIntStream input) - : base(input) - { - this._decisionNumber = decisionNumber; - } - - public EarlyExitException(string message, int decisionNumber, IIntStream input) - : base(message, input) - { - this._decisionNumber = decisionNumber; - } - - public EarlyExitException(string message, int decisionNumber, IIntStream input, Exception innerException) - : base(message, input, innerException) - { - this._decisionNumber = decisionNumber; - } - - protected EarlyExitException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._decisionNumber = info.GetInt32("DecisionNumber"); - } - - public int DecisionNumber - { - get - { - return _decisionNumber; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("DecisionNumber", DecisionNumber); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs deleted file mode 100644 index add3f58..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs +++ /dev/null @@ -1,129 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** - * A semantic predicate failed during validation. Validation of predicates - * occurs when normally parsing the alternative just like matching a token. - * Disambiguating predicate evaluation occurs when we hoist a predicate into - * a prediction decision. - * - */ - [System.Serializable] - public class FailedPredicateException : RecognitionException - { - private readonly string _ruleName; - private readonly string _predicateText; - - public FailedPredicateException() - { - } - - public FailedPredicateException(string message) - : base(message) - { - } - - public FailedPredicateException(string message, Exception innerException) - : base(message, innerException) - { - } - - public FailedPredicateException(IIntStream input, string ruleName, string predicateText) - : base(input) - { - this._ruleName = ruleName; - this._predicateText = predicateText; - } - - public FailedPredicateException(string message, IIntStream input, string ruleName, string predicateText) - : base(message, input) - { - this._ruleName = ruleName; - this._predicateText = predicateText; - } - - public FailedPredicateException(string message, IIntStream input, string ruleName, string predicateText, Exception innerException) - : base(message, input, innerException) - { - this._ruleName = ruleName; - this._predicateText = predicateText; - } - - protected FailedPredicateException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._ruleName = info.GetString("RuleName"); - this._predicateText = info.GetString("PredicateText"); - } - - public string RuleName - { - get - { - return _ruleName; - } - } - - public string PredicateText - { - get - { - return _predicateText; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("RuleName", _ruleName); - info.AddValue("PredicateText", _predicateText); - } - - public override string ToString() - { - return "FailedPredicateException(" + RuleName + ",{" + PredicateText + "}?)"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/GrammarRuleAttribute.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/GrammarRuleAttribute.cs deleted file mode 100644 index 20708b9..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/GrammarRuleAttribute.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2010 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. - */ - -namespace Antlr.Runtime -{ - using Attribute = System.Attribute; - using AttributeTargets = System.AttributeTargets; - using AttributeUsageAttribute = System.AttributeUsageAttribute; - - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] - public sealed class GrammarRuleAttribute : Attribute - { - private readonly string _name; - - public GrammarRuleAttribute(string name) - { - this._name = name; - } - - public string Name - { - get - { - return _name; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope.cs deleted file mode 100644 index 3dd8823..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - /** AST rules have trees */ - public interface IAstRuleReturnScope : IRuleReturnScope - { - /** Has a value potentially if output=AST; */ - object Tree - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope`1.cs deleted file mode 100644 index 7e98af8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IAstRuleReturnScope`1.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2010 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - /** AST rules have trees */ - public interface IAstRuleReturnScope : IAstRuleReturnScope - { - /** Has a value potentially if output=AST; */ - new TAstLabel Tree - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs deleted file mode 100644 index 12a4f8a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - /** A source of characters for an ANTLR lexer */ - public interface ICharStream : IIntStream - { - - /** - * For infinite streams, you don't need this; primarily I'm providing - * a useful interface for action code. Just make sure actions don't - * use this on streams that don't support it. - * - */ - string Substring( int start, int length ); - - /** - * Get the ith character of lookahead. This is the same usually as - * LA(i). This will be used for labels in the generated - * lexer code. I'd prefer to return a char here type-wise, but it's - * probably better to be 32-bit clean and be consistent with LA. - * - */ - int LT( int i ); - - /** ANTLR tracks the line information automatically */ - /** Because this stream can rewind, we need to be able to reset the line */ - int Line - { - get; - set; - } - - /** The index of the character relative to the beginning of the line 0..n-1 */ - int CharPositionInLine - { - get; - set; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs deleted file mode 100644 index 012f81e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs +++ /dev/null @@ -1,161 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - /** - * A simple stream of integers used when all I care about is the char - * or token type sequence (such as interpretation). - * - */ - public interface IIntStream - { - void Consume(); - - /** - * Get int at current input pointer + i ahead where i=1 is next int. - * Negative indexes are allowed. LA(-1) is previous token (token - * just matched). LA(-i) where i is before first token should - * yield -1, invalid char / EOF. - * - */ - int LA( int i ); - - /** - * Tell the stream to start buffering if it hasn't already. Return - * current input position, Index, or some other marker so that - * when passed to rewind() you get back to the same spot. - * rewind(mark()) should not affect the input cursor. The Lexer - * track line/col info as well as input index so its markers are - * not pure input indexes. Same for tree node streams. - * - */ - int Mark(); - - /** - * Return the current input symbol index 0..n where n indicates the - * last symbol has been read. The index is the symbol about to be - * read not the most recently read symbol. - * - */ - int Index - { - get; - } - - /** - * Reset the stream so that next call to index would return marker. - * The marker will usually be Index but it doesn't have to be. It's - * just a marker to indicate what state the stream was in. This is - * essentially calling release() and seek(). If there are markers - * created after this marker argument, this routine must unroll them - * like a stack. Assume the state the stream was in when this marker - * was created. - * - */ - void Rewind( int marker ); - - /** - * Rewind to the input position of the last marker. - * Used currently only after a cyclic DFA and just - * before starting a sem/syn predicate to get the - * input position back to the start of the decision. - * Do not "pop" the marker off the state. mark(i) - * and rewind(i) should balance still. It is - * like invoking rewind(last marker) but it should not "pop" - * the marker off. It's like seek(last marker's input position). - * - */ - void Rewind(); - - /** - * You may want to commit to a backtrack but don't want to force the - * stream to keep bookkeeping objects around for a marker that is - * no longer necessary. This will have the same behavior as - * rewind() except it releases resources without the backward seek. - * This must throw away resources for all markers back to the marker - * argument. So if you're nested 5 levels of mark(), and then release(2) - * you have to release resources for depths 2..5. - * - */ - void Release( int marker ); - - /** - * Set the input cursor to the position indicated by index. This is - * normally used to seek ahead in the input stream. No buffering is - * required to do this unless you know your stream will use seek to - * move backwards such as when backtracking. - * - * - * - * This is different from rewind in its multi-directional - * requirement and in that its argument is strictly an input cursor (index). - * - * For char streams, seeking forward must update the stream state such - * as line number. For seeking backwards, you will be presumably - * backtracking using the mark/rewind mechanism that restores state and - * so this method does not need to update state when seeking backwards. - * - * Currently, this method is only used for efficient backtracking using - * memoization, but in the future it may be used for incremental parsing. - * - * The index is 0..n-1. A seek to position i means that LA(1) will - * return the ith symbol. So, seeking to 0 means LA(1) will return the - * first element in the stream. - * - */ - void Seek( int index ); - - /** - * Only makes sense for streams that buffer everything up probably, but - * might be useful to display the entire stream or for testing. This - * value includes a single EOF. - * - */ - int Count - { - get; - } - - /** - * Where are you getting symbols from? Normally, implementations will - * pass the buck all the way to the lexer who can ask its input stream - * for the file name or whatever. - * - */ - string SourceName - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope.cs deleted file mode 100644 index bd286a2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope.cs +++ /dev/null @@ -1,56 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - /// - /// Rules can have start/stop info. - /// - public interface IRuleReturnScope - { - /// - /// Gets the start element from the input stream - /// - object Start - { - get; - } - - /// - /// Gets the stop element from the input stream - /// - object Stop - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope`1.cs deleted file mode 100644 index bc64f64..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IRuleReturnScope`1.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - /// - /// Rules can have start/stop info. - /// - /// The element type of the input stream. - public interface IRuleReturnScope : IRuleReturnScope - { - /// - /// Gets the start element from the input stream - /// - new TLabel Start - { - get; - } - - /// - /// Gets the stop element from the input stream - /// - new TLabel Stop - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope.cs deleted file mode 100644 index 8a3de74..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope.cs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public interface ITemplateRuleReturnScope - { - object Template - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope`1.cs deleted file mode 100644 index 5c1e81e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ITemplateRuleReturnScope`1.cs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public interface ITemplateRuleReturnScope : ITemplateRuleReturnScope - { - new TTemplate Template - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs deleted file mode 100644 index 8487703..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs +++ /dev/null @@ -1,106 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - public interface IToken - { - /** Get the text of the token */ - string Text - { - get; - set; - } - - int Type - { - get; - set; - } - - /** The line number on which this token was matched; line=1..n */ - int Line - { - get; - set; - } - - /** The index of the first character relative to the beginning of the line 0..n-1 */ - int CharPositionInLine - { - get; - set; - } - - int Channel - { - get; - set; - } - - int StartIndex - { - get; - set; - } - - int StopIndex - { - get; - set; - } - - /** - * An index from 0..n-1 of the token object in the input stream. - * This must be valid in order to use the ANTLRWorks debugger. - * - */ - int TokenIndex - { - get; - set; - } - - /** - * From what character stream was this token created? You don't have to - * implement but it's nice to know where a Token comes from if you have - * include files etc... on the input. - * - */ - ICharStream InputStream - { - get; - set; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs deleted file mode 100644 index 97a9b2c..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - - /** - * A source of tokens must provide a sequence of tokens via nextToken() - * and also must reveal it's source of characters; CommonToken's text is - * computed from a CharStream; it only store indices into the char stream. - * - * - * - * Errors from the lexer are never passed to the parser. Either you want - * to keep going or you do not upon token recognition error. If you do not - * want to continue lexing then you do not want to continue parsing. Just - * throw an exception not under RecognitionException and Java will naturally - * toss you all the way out of the recognizers. If you want to continue - * lexing then you should not throw an exception to the parser--it has already - * requested a token. Keep lexing until you get a valid one. Just report - * errors and keep going, looking for a valid token. - * - */ - public interface ITokenSource - { - /** - * Return a Token object from your input stream (usually a CharStream). - * Do not fail/return upon lexing error; keep chewing on the characters - * until you get a good one; errors are not passed through to the parser. - * - */ - IToken NextToken(); - - /** - * Where are you getting tokens from? normally the implication will simply - * ask lexers input stream. - * - */ - string SourceName - { - get; - } - - string[] TokenNames - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs deleted file mode 100644 index a08e7f2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs +++ /dev/null @@ -1,95 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ -namespace Antlr.Runtime -{ - - /** A stream of tokens accessing tokens from a TokenSource */ - public interface ITokenStream : IIntStream - { - /** Get Token at current input pointer + i ahead where i=1 is next Token. - * i<0 indicates tokens in the past. So -1 is previous token and -2 is - * two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. - * Return null for LT(0) and any index that results in an absolute address - * that is negative. - */ - IToken LT( int k ); - - /// - /// How far ahead has the stream been asked to look? The return - /// value is a valid index from 0..n-1. - /// - int Range - { - get; - } - - /** - * Get a token at an absolute index i; 0..n-1. This is really only - * needed for profiling and debugging and token stream rewriting. - * If you don't want to buffer up tokens, then this method makes no - * sense for you. Naturally you can't use the rewrite stream feature. - * I believe DebugTokenStream can easily be altered to not use - * this method, removing the dependency. - * - */ - IToken Get( int i ); - - /** - * Where is this stream pulling tokens from? This is not the name, but - * the object that provides Token objects. - * - */ - ITokenSource TokenSource - { - get; - } - - /** - * Return the text of all tokens from start to stop, inclusive. - * If the stream does not buffer all the tokens then it can just - * return "" or null; Users should not access $ruleLabel.text in - * an action of course in that case. - * - */ - string ToString( int start, int stop ); - - /** - * Because the user is not required to use a token with an index stored - * in it, we must provide a means for two token objects themselves to - * indicate the start/end location. Most often this will just delegate - * to the other toString(int,int). This is also parallel with - * the TreeNodeStream.toString(Object,Object). - * - */ - string ToString( IToken start, IToken stop ); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStreamInformation.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStreamInformation.cs deleted file mode 100644 index c72f225..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStreamInformation.cs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public interface ITokenStreamInformation - { - IToken LastToken - { - get; - } - - IToken LastRealToken - { - get; - } - - int MaxLookBehind - { - get; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/LegacyCommonTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/LegacyCommonTokenStream.cs deleted file mode 100644 index 936f586..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/LegacyCommonTokenStream.cs +++ /dev/null @@ -1,526 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - using InvalidOperationException = System.InvalidOperationException; - using StringBuilder = System.Text.StringBuilder; - - /** - * The most common stream of tokens is one where every token is buffered up - * and tokens are prefiltered for a certain channel (the parser will only - * see these tokens and cannot change the filter channel number during the - * parse). - * - * - * TODO: how to access the full token stream? How to track all tokens matched per rule? - */ - [System.Serializable] - public class LegacyCommonTokenStream : ITokenStream - { - [System.NonSerialized] - ITokenSource _tokenSource; - - /** - * Record every single token pulled from the source so we can reproduce - * chunks of it later. - * - */ - protected List tokens; - - /** Map to override some Tokens' channel numbers */ - protected IDictionary channelOverrideMap; - - /** Set; discard any tokens with this type */ - protected List discardSet; - - /** Skip tokens on any channel but this one; this is how we skip whitespace... */ - protected int channel = TokenChannels.Default; - - /** By default, track all incoming tokens */ - protected bool discardOffChannelTokens = false; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - /** - * The index into the tokens list of the current token (next token - * to consume). p==-1 indicates that the tokens list is empty - * - */ - protected int p = -1; - - public LegacyCommonTokenStream() - { - tokens = new List( 500 ); - } - - public LegacyCommonTokenStream(ITokenSource tokenSource) - : this() - { - this._tokenSource = tokenSource; - } - - public LegacyCommonTokenStream( ITokenSource tokenSource, int channel ) - : this( tokenSource ) - { - this.channel = channel; - } - - public virtual int Index - { - get - { - return p; - } - } - - /// - /// How deep have we gone? - /// - public virtual int Range - { - get; - protected set; - } - - /** Reset this token stream by setting its token source. */ - public virtual void SetTokenSource( ITokenSource tokenSource ) - { - this._tokenSource = tokenSource; - tokens.Clear(); - p = -1; - channel = TokenChannels.Default; - } - - /** - * Load all tokens from the token source and put in tokens. - * This is done upon first LT request because you might want to - * set some token type / channel overrides before filling buffer. - * - */ - public virtual void FillBuffer() - { - // fast return if the buffer is already full - if ( p != -1 ) - return; - - int index = 0; - IToken t = _tokenSource.NextToken(); - while ( t != null && t.Type != CharStreamConstants.EndOfFile ) - { - bool discard = false; - // is there a channel override for token type? - int channelI; - if ( channelOverrideMap != null && channelOverrideMap.TryGetValue( t.Type, out channelI ) ) - t.Channel = channelI; - - //if ( channelOverrideMap != null && channelOverrideMap.ContainsKey( t.getType() ) ) - //{ - // object channelI = channelOverrideMap.get( t.getType() ); - // if ( channelI != null ) - // { - // t.setChannel( (int)channelI ); - // } - //} - if ( discardSet != null && - discardSet.Contains( t.Type ) ) - { - discard = true; - } - else if ( discardOffChannelTokens && t.Channel != this.channel ) - { - discard = true; - } - if ( !discard ) - { - t.TokenIndex = index; - tokens.Add( t ); - index++; - } - t = _tokenSource.NextToken(); - } - // leave p pointing at first token on channel - p = 0; - p = SkipOffTokenChannels( p ); - } - - /** - * Move the input pointer to the next incoming token. The stream - * must become active with LT(1) available. consume() simply - * moves the input pointer so that LT(1) points at the next - * input symbol. Consume at least one token. - * - * - * - * Walk past any token not on the channel the parser is listening to. - * - */ - public virtual void Consume() - { - if ( p < tokens.Count ) - { - p++; - p = SkipOffTokenChannels( p ); // leave p on valid token - } - } - - /** Given a starting index, return the index of the first on-channel token. */ - protected virtual int SkipOffTokenChannels( int i ) - { - int n = tokens.Count; - while ( i < n && ( (IToken)tokens[i] ).Channel != channel ) - { - i++; - } - return i; - } - - protected virtual int SkipOffTokenChannelsReverse( int i ) - { - while ( i >= 0 && ( (IToken)tokens[i] ).Channel != channel ) - { - i--; - } - return i; - } - - /** - * A simple filter mechanism whereby you can tell this token stream - * to force all tokens of type ttype to be on channel. For example, - * when interpreting, we cannot exec actions so we need to tell - * the stream to force all WS and NEWLINE to be a different, ignored - * channel. - * - */ - public virtual void SetTokenTypeChannel( int ttype, int channel ) - { - if ( channelOverrideMap == null ) - { - channelOverrideMap = new Dictionary(); - } - channelOverrideMap[ttype] = channel; - } - - public virtual void DiscardTokenType( int ttype ) - { - if ( discardSet == null ) - { - discardSet = new List(); - } - discardSet.Add( ttype ); - } - - public virtual void SetDiscardOffChannelTokens( bool discardOffChannelTokens ) - { - this.discardOffChannelTokens = discardOffChannelTokens; - } - - public virtual IList GetTokens() - { - if ( p == -1 ) - { - FillBuffer(); - } - return tokens; - } - - public virtual IList GetTokens( int start, int stop ) - { - return GetTokens( start, stop, (BitSet)null ); - } - - /** - * Given a start and stop index, return a List of all tokens in - * the token type BitSet. Return null if no tokens were found. This - * method looks at both on and off channel tokens. - * - */ - public virtual IList GetTokens( int start, int stop, BitSet types ) - { - if ( p == -1 ) - { - FillBuffer(); - } - if ( stop >= tokens.Count ) - { - stop = tokens.Count - 1; - } - if ( start < 0 ) - { - start = 0; - } - if ( start > stop ) - { - return null; - } - - // list = tokens[start:stop]:{Token t, t.getType() in types} - IList filteredTokens = new List(); - for ( int i = start; i <= stop; i++ ) - { - IToken t = tokens[i]; - if ( types == null || types.Member( t.Type ) ) - { - filteredTokens.Add( t ); - } - } - if ( filteredTokens.Count == 0 ) - { - filteredTokens = null; - } - return filteredTokens; - } - - public virtual IList GetTokens( int start, int stop, IList types ) - { - return GetTokens( start, stop, new BitSet( types ) ); - } - - public virtual IList GetTokens( int start, int stop, int ttype ) - { - return GetTokens( start, stop, BitSet.Of( ttype ) ); - } - - /** - * Get the ith token from the current position 1..n where k=1 is the - * first symbol of lookahead. - * - */ - public virtual IToken LT( int k ) - { - if ( p == -1 ) - { - FillBuffer(); - } - if ( k == 0 ) - { - return null; - } - if ( k < 0 ) - { - return LB( -k ); - } - //System.out.print("LT(p="+p+","+k+")="); - if ( ( p + k - 1 ) >= tokens.Count ) - { - return tokens[tokens.Count - 1]; - } - //System.out.println(tokens.get(p+k-1)); - int i = p; - int n = 1; - // find k good tokens - while ( n < k ) - { - // skip off-channel tokens - i = SkipOffTokenChannels( i + 1 ); // leave p on valid token - n++; - } - if ( i >= tokens.Count ) - { - return tokens[tokens.Count - 1]; - } - - if (i > Range) - Range = i; - - return (IToken)tokens[i]; - } - - /** Look backwards k tokens on-channel tokens */ - protected virtual IToken LB( int k ) - { - //System.out.print("LB(p="+p+","+k+") "); - if ( p == -1 ) - { - FillBuffer(); - } - if ( k == 0 ) - { - return null; - } - if ( ( p - k ) < 0 ) - { - return null; - } - - int i = p; - int n = 1; - // find k good tokens looking backwards - while ( n <= k ) - { - // skip off-channel tokens - i = SkipOffTokenChannelsReverse( i - 1 ); // leave p on valid token - n++; - } - if ( i < 0 ) - { - return null; - } - return (IToken)tokens[i]; - } - - /** - * Return absolute token i; ignore which channel the tokens are on; - * that is, count all tokens not just on-channel tokens. - * - */ - public virtual IToken Get( int i ) - { - return (IToken)tokens[i]; - } - -#if false - /** Get all tokens from start..stop inclusively */ - public virtual List Get(int start, int count) - { - if (start < 0) - throw new ArgumentOutOfRangeException("start"); - if (count < 0) - throw new ArgumentOutOfRangeException("count"); - - if (p == -1) - FillBuffer(); - - return new List(tokens.Skip(start).Take(count)); - } -#endif - - public virtual int LA( int i ) - { - return LT( i ).Type; - } - - public virtual int Mark() - { - if ( p == -1 ) - { - FillBuffer(); - } - lastMarker = Index; - return lastMarker; - } - - public virtual void Release( int marker ) - { - // no resources to release - } - - public virtual int Count - { - get - { - return tokens.Count; - } - } - - public virtual void Rewind( int marker ) - { - Seek( marker ); - } - - public virtual void Rewind() - { - Seek( lastMarker ); - } - - public virtual void Reset() - { - p = 0; - lastMarker = 0; - } - - public virtual void Seek( int index ) - { - p = index; - } - - public virtual ITokenSource TokenSource - { - get - { - return _tokenSource; - } - } - - public virtual string SourceName - { - get - { - return TokenSource.SourceName; - } - } - - public override string ToString() - { - if ( p == -1 ) - { - throw new InvalidOperationException( "Buffer is not yet filled." ); - } - return ToString( 0, tokens.Count - 1 ); - } - - public virtual string ToString( int start, int stop ) - { - if ( start < 0 || stop < 0 ) - { - return null; - } - if ( p == -1 ) - { - throw new InvalidOperationException( "Buffer is not yet filled." ); - } - if ( stop >= tokens.Count ) - { - stop = tokens.Count - 1; - } - StringBuilder buf = new StringBuilder(); - for ( int i = start; i <= stop; i++ ) - { - IToken t = tokens[i]; - buf.Append( t.Text ); - } - return buf.ToString(); - } - - public virtual string ToString( IToken start, IToken stop ) - { - if ( start != null && stop != null ) - { - return ToString( start.TokenIndex, stop.TokenIndex ); - } - return null; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs deleted file mode 100644 index daf530d..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs +++ /dev/null @@ -1,443 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ConditionalAttribute = System.Diagnostics.ConditionalAttribute; - - /** - * A lexer is recognizer that draws input symbols from a character stream. - * lexer grammars result in a subclass of this object. A Lexer object - * uses simplified match() and error recovery mechanisms in the interest - * of speed. - * - */ - public abstract class Lexer : BaseRecognizer, ITokenSource - { - /** Where is the lexer drawing characters from? */ - protected ICharStream input; - - public Lexer() - { - } - - public Lexer( ICharStream input ) - { - this.input = input; - } - - public Lexer( ICharStream input, RecognizerSharedState state ) - : base(state) - { - this.input = input; - } - - #region Properties - public string Text - { - /** Return the text matched so far for the current token or any text override. */ - get - { - if ( state.text != null ) - { - return state.text; - } - return input.Substring( state.tokenStartCharIndex, CharIndex - state.tokenStartCharIndex ); - } - /** Set the complete text of this token; it wipes any previous changes to the text. */ - set - { - state.text = value; - } - } - public int Line - { - get - { - return input.Line; - } - set - { - input.Line = value; - } - } - public int CharPositionInLine - { - get - { - return input.CharPositionInLine; - } - set - { - input.CharPositionInLine = value; - } - } - #endregion - - public override void Reset() - { - base.Reset(); // reset all recognizer state variables - // wack Lexer state variables - if ( input != null ) - { - input.Seek( 0 ); // rewind the input - } - if ( state == null ) - { - return; // no shared state work to do - } - state.token = null; - state.type = TokenTypes.Invalid; - state.channel = TokenChannels.Default; - state.tokenStartCharIndex = -1; - state.tokenStartCharPositionInLine = -1; - state.tokenStartLine = -1; - state.text = null; - } - - /** Return a token from this source; i.e., match a token on the char stream. */ - public virtual IToken NextToken() - { - for ( ; ; ) - { - state.token = null; - state.channel = TokenChannels.Default; - state.tokenStartCharIndex = input.Index; - state.tokenStartCharPositionInLine = input.CharPositionInLine; - state.tokenStartLine = input.Line; - state.text = null; - if ( input.LA( 1 ) == CharStreamConstants.EndOfFile ) - { - return GetEndOfFileToken(); - } - try - { - ParseNextToken(); - if ( state.token == null ) - { - Emit(); - } - else if ( state.token == Tokens.Skip ) - { - continue; - } - return state.token; - } - catch (MismatchedRangeException mre) - { - ReportError(mre); - // MatchRange() routine has already called recover() - } - catch (MismatchedTokenException mte) - { - ReportError(mte); - // Match() routine has already called recover() - } - catch ( RecognitionException re ) - { - ReportError( re ); - Recover( re ); // throw out current char and try again - } - } - } - - /** Returns the EOF token (default), if you need - * to return a custom token instead override this method. - */ - public virtual IToken GetEndOfFileToken() - { - IToken eof = new CommonToken((ICharStream)input, CharStreamConstants.EndOfFile, TokenChannels.Default, input.Index, input.Index); - eof.Line = Line; - eof.CharPositionInLine = CharPositionInLine; - return eof; - } - - /** - * Instruct the lexer to skip creating a token for current lexer rule - * and look for another token. nextToken() knows to keep looking when - * a lexer rule finishes with token set to SKIP_TOKEN. Recall that - * if token==null at end of any token rule, it creates one for you - * and emits it. - * - */ - public virtual void Skip() - { - state.token = Tokens.Skip; - } - - /** This is the lexer entry point that sets instance var 'token' */ - public abstract void mTokens(); - - public virtual ICharStream CharStream - { - get - { - return input; - } - /** Set the char stream and reset the lexer */ - set - { - input = null; - Reset(); - input = value; - } - } - - public override string SourceName - { - get - { - return input.SourceName; - } - } - - /** - * Currently does not support multiple emits per nextToken invocation - * for efficiency reasons. Subclass and override this method and - * nextToken (to push tokens into a list and pull from that list rather - * than a single variable as this implementation does). - * - */ - public virtual void Emit( IToken token ) - { - state.token = token; - } - - /** - * The standard method called to automatically emit a token at the - * outermost lexical rule. The token object should point into the - * char buffer start..stop. If there is a text override in 'text', - * use that to set the token's text. Override this method to emit - * custom Token objects. - * - * - * - * If you are building trees, then you should also override - * Parser or TreeParser.getMissingSymbol(). - * - */ - public virtual IToken Emit() - { - IToken t = new CommonToken( input, state.type, state.channel, state.tokenStartCharIndex, CharIndex - 1 ); - t.Line = state.tokenStartLine; - t.Text = state.text; - t.CharPositionInLine = state.tokenStartCharPositionInLine; - Emit( t ); - return t; - } - - public virtual void Match( string s ) - { - int i = 0; - while ( i < s.Length ) - { - if ( input.LA( 1 ) != s[i] ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedTokenException mte = new MismatchedTokenException(s[i], input, TokenNames); - Recover( mte ); - throw mte; - } - i++; - input.Consume(); - state.failed = false; - } - } - - public virtual void MatchAny() - { - input.Consume(); - } - - public virtual void Match( int c ) - { - if ( input.LA( 1 ) != c ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedTokenException mte = new MismatchedTokenException(c, input, TokenNames); - Recover( mte ); // don't really recover; just consume in lexer - throw mte; - } - input.Consume(); - state.failed = false; - } - - public virtual void MatchRange( int a, int b ) - { - if ( input.LA( 1 ) < a || input.LA( 1 ) > b ) - { - if ( state.backtracking > 0 ) - { - state.failed = true; - return; - } - MismatchedRangeException mre = new MismatchedRangeException(a, b, input); - Recover( mre ); - throw mre; - } - input.Consume(); - state.failed = false; - } - - /** What is the index of the current character of lookahead? */ - public virtual int CharIndex - { - get - { - return input.Index; - } - } - - public override void ReportError( RecognitionException e ) - { - /** TODO: not thought about recovery in lexer yet. - * - // if we've already reported an error and have not matched a token - // yet successfully, don't report any errors. - if ( errorRecovery ) { - //System.err.print("[SPURIOUS] "); - return; - } - errorRecovery = true; - */ - - DisplayRecognitionError( this.TokenNames, e ); - } - - public override string GetErrorMessage( RecognitionException e, string[] tokenNames ) - { - string msg = null; - if ( e is MismatchedTokenException ) - { - MismatchedTokenException mte = (MismatchedTokenException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting " + GetCharErrorDisplay( mte.Expecting ); - } - else if ( e is NoViableAltException ) - { - NoViableAltException nvae = (NoViableAltException)e; - // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" - // and "(decision="+nvae.decisionNumber+") and - // "state "+nvae.stateNumber - msg = "no viable alternative at character " + GetCharErrorDisplay( e.Character ); - } - else if ( e is EarlyExitException ) - { - EarlyExitException eee = (EarlyExitException)e; - // for development, can add "(decision="+eee.decisionNumber+")" - msg = "required (...)+ loop did not match anything at character " + GetCharErrorDisplay( e.Character ); - } - else if ( e is MismatchedNotSetException ) - { - MismatchedNotSetException mse = (MismatchedNotSetException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + mse.Expecting; - } - else if ( e is MismatchedSetException ) - { - MismatchedSetException mse = (MismatchedSetException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + mse.Expecting; - } - else if ( e is MismatchedRangeException ) - { - MismatchedRangeException mre = (MismatchedRangeException)e; - msg = "mismatched character " + GetCharErrorDisplay( e.Character ) + " expecting set " + - GetCharErrorDisplay( mre.A ) + ".." + GetCharErrorDisplay( mre.B ); - } - else - { - msg = base.GetErrorMessage( e, tokenNames ); - } - return msg; - } - - public virtual string GetCharErrorDisplay( int c ) - { - string s = ( (char)c ).ToString(); - switch ( c ) - { - case TokenTypes.EndOfFile: - s = ""; - break; - case '\n': - s = "\\n"; - break; - case '\t': - s = "\\t"; - break; - case '\r': - s = "\\r"; - break; - } - return "'" + s + "'"; - } - - /** - * Lexers can normally match any char in it's vocabulary after matching - * a token, so do the easy thing and just kill a character and hope - * it all works out. You can instead use the rule invocation stack - * to do sophisticated error recovery if you are in a fragment rule. - * - */ - public virtual void Recover( RecognitionException re ) - { - //System.out.println("consuming char "+(char)input.LA(1)+" during recovery"); - //re.printStackTrace(); - input.Consume(); - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceIn( string ruleName, int ruleIndex ) - { - string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; - base.TraceIn( ruleName, ruleIndex, inputSymbol ); - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceOut( string ruleName, int ruleIndex ) - { - string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; - base.TraceOut( ruleName, ruleIndex, inputSymbol ); - } - - protected virtual void ParseNextToken() - { - mTokens(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs deleted file mode 100644 index af975d7..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs +++ /dev/null @@ -1,143 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Misc -{ - using System.Collections.Generic; - using ArgumentException = System.ArgumentException; - using InvalidOperationException = System.InvalidOperationException; - - /** A queue that can dequeue and get(i) in O(1) and grow arbitrarily large. - * A linked list is fast at dequeue but slow at get(i). An array is - * the reverse. This is O(1) for both operations. - * - * List grows until you dequeue last element at end of buffer. Then - * it resets to start filling at 0 again. If adds/removes are balanced, the - * buffer will not grow too large. - * - * No iterator stuff as that's not how we'll use it. - */ - public class FastQueue - { - /** dynamically-sized buffer of elements */ - internal List _data = new List(); - /** index of next element to fill */ - internal int _p = 0; - - public virtual int Count - { - get - { - return _data.Count - _p; - } - } - - /// - /// How deep have we gone? - /// - public virtual int Range - { - get; - protected set; - } - - /** - * Return element {@code i} elements ahead of current element. {@code i==0} - * gets current element. This is not an absolute index into {@link #data} - * since {@code p} defines the start of the real list. - * - */ - public virtual T this[int i] - { - get - { - int absIndex = _p + i; - if (absIndex >= _data.Count) - throw new ArgumentException(string.Format("queue index {0} > last index {1}", absIndex, _data.Count - 1)); - if (absIndex < 0) - throw new ArgumentException(string.Format("queue index {0} < 0", absIndex)); - - if (absIndex > Range) - Range = absIndex; - - return _data[absIndex]; - } - } - - /** Get and remove first element in queue */ - public virtual T Dequeue() - { - if (Count == 0) - throw new InvalidOperationException(); - - T o = this[0]; - _p++; - // have we hit end of buffer? - if ( _p == _data.Count ) - { - // if so, it's an opportunity to start filling at index 0 again - Clear(); // size goes to 0, but retains memory - } - return o; - } - - public virtual void Enqueue( T o ) - { - _data.Add( o ); - } - - public virtual T Peek() - { - return this[0]; - } - - public virtual void Clear() - { - _p = 0; - _data.Clear(); - } - - /** Return string of current buffer contents; non-destructive */ - public override string ToString() - { - System.Text.StringBuilder buf = new System.Text.StringBuilder(); - int n = Count; - for ( int i = 0; i < n; i++ ) - { - buf.Append( this[i] ); - if ( ( i + 1 ) < n ) - buf.Append( " " ); - } - return buf.ToString(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FunctionDelegates.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FunctionDelegates.cs deleted file mode 100644 index 4fb91bf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FunctionDelegates.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Misc -{ - public delegate void Action(); - - public delegate TResult Func(); - - public delegate TResult Func(T arg); -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/ListStack`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/ListStack`1.cs deleted file mode 100644 index e66adcb..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/ListStack`1.cs +++ /dev/null @@ -1,98 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Misc -{ - using System.Collections.Generic; - using InvalidOperationException = System.InvalidOperationException; - - public class ListStack : List - { - public T Peek() - { - return Peek(0); - } - - public T Peek(int depth) - { - T item; - if (!TryPeek(depth, out item)) - throw new InvalidOperationException(); - - return item; - } - - public bool TryPeek(out T item) - { - return TryPeek(0, out item); - } - - public bool TryPeek(int depth, out T item) - { - if (depth >= Count) - { - item = default(T); - return false; - } - - item = this[Count - depth - 1]; - return true; - } - - public T Pop() - { - T result; - if (!TryPop(out result)) - throw new InvalidOperationException(); - - return result; - } - - public bool TryPop(out T item) - { - if (Count == 0) - { - item = default(T); - return false; - } - - item = this[Count - 1]; - RemoveAt(Count - 1); - return true; - } - - public void Push(T item) - { - Add(item); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs deleted file mode 100644 index 14454a8..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs +++ /dev/null @@ -1,271 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Misc -{ - using ArgumentException = System.ArgumentException; - using Debug = System.Diagnostics.Debug; - using InvalidOperationException = System.InvalidOperationException; - using NotSupportedException = System.NotSupportedException; - using ArgumentOutOfRangeException = System.ArgumentOutOfRangeException; - - /** - * A lookahead queue that knows how to mark/release locations in the buffer for - * backtracking purposes. Any markers force the {@link FastQueue} superclass to - * keep all elements until no more markers; then can reset to avoid growing a - * huge buffer. - * - */ - public abstract class LookaheadStream - : FastQueue - where T : class - { - /** Absolute token index. It's the index of the symbol about to be - * read via {@code LT(1)}. Goes from 0 to numtokens. - */ - private int _currentElementIndex = 0; - - /** - * This is the {@code LT(-1)} element for the first element in {@link #data}. - */ - private T _previousElement; - - /** Track object returned by nextElement upon end of stream; - * Return it later when they ask for LT passed end of input. - */ - T _eof = null; - - /** Track the last mark() call result value for use in rewind(). */ - int _lastMarker; - - /** tracks how deep mark() calls are nested */ - int _markDepth; - - public T EndOfFile - { - get - { - return _eof; - } - protected set - { - _eof = value; - } - } - - public T PreviousElement - { - get - { - return _previousElement; - } - } - - public virtual void Reset() - { - Clear(); - _currentElementIndex = 0; - _p = 0; - _previousElement = null; - } - - /** - * Implement nextElement to supply a stream of elements to this - * lookahead buffer. Return EOF upon end of the stream we're pulling from. - * - */ - public abstract T NextElement(); - - public abstract bool IsEndOfFile(T o); - - /** - * Get and remove first element in queue; override - * {@link FastQueue#remove()}; it's the same, just checks for backtracking. - * */ - public override T Dequeue() - { - T o = this[0]; - _p++; - // have we hit end of buffer and not backtracking? - if ( _p == _data.Count && _markDepth == 0 ) - { - _previousElement = o; - // if so, it's an opportunity to start filling at index 0 again - Clear(); // size goes to 0, but retains memory - } - return o; - } - - /** Make sure we have at least one element to remove, even if EOF */ - public virtual void Consume() - { - SyncAhead(1); - Dequeue(); - _currentElementIndex++; - } - - /** - * Make sure we have 'need' elements from current position p. Last valid - * p index is data.size()-1. p+need-1 is the data index 'need' elements - * ahead. If we need 1 element, (p+1-1)==p must be < data.size(). - * - */ - protected virtual void SyncAhead( int need ) - { - int n = ( _p + need - 1 ) - _data.Count + 1; // how many more elements we need? - if ( n > 0 ) - Fill( n ); // out of elements? - } - - /** add n elements to buffer */ - public virtual void Fill( int n ) - { - for ( int i = 0; i < n; i++ ) - { - T o = NextElement(); - if ( IsEndOfFile(o) ) - _eof = o; - - _data.Add( o ); - } - } - - /** Size of entire stream is unknown; we only know buffer size from FastQueue */ - public override int Count - { - get - { - throw new System.NotSupportedException( "streams are of unknown size" ); - } - } - - public virtual T LT( int k ) - { - if ( k == 0 ) - { - return null; - } - if ( k < 0 ) - { - return LB(-k); - } - - SyncAhead( k ); - if ((_p + k - 1) > _data.Count) - return _eof; - - return this[k - 1]; - } - - public virtual int Index - { - get - { - return _currentElementIndex; - } - } - - public virtual int Mark() - { - _markDepth++; - _lastMarker = _p; // track where we are in buffer, not absolute token index - return _lastMarker; - } - - public virtual void Release( int marker ) - { - if (_markDepth == 0) - throw new InvalidOperationException(); - - _markDepth--; - } - - public virtual void Rewind( int marker ) - { - _markDepth--; - int delta = _p - marker; - _currentElementIndex -= delta; - _p = marker; - } - - public virtual void Rewind() - { - // rewind but do not release marker - int delta = _p - _lastMarker; - _currentElementIndex -= delta; - _p = _lastMarker; - } - - /** - * Seek to a 0-indexed absolute token index. Normally used to seek backwards - * in the buffer. Does not force loading of nodes. - * - * - * To preserve backward compatibility, this method allows seeking past the - * end of the currently buffered data. In this case, the input pointer will - * be moved but the data will only actually be loaded upon the next call to - * {@link #consume} or {@link #LT} for {@code k>0}. - * - */ - public virtual void Seek( int index ) - { - if (index < 0) - throw new ArgumentOutOfRangeException("index"); - - int delta = _currentElementIndex - index; - if (_p - delta < 0) - throw new NotSupportedException("can't seek before the beginning of this stream's buffer"); - - _p -= delta; - _currentElementIndex = index; - } - - protected virtual T LB(int k) - { - Debug.Assert(k > 0); - - int index = _p - k; - if (index == -1) - return _previousElement; - - // if k>0 then we know index < data.size(). avoid the double-check for - // performance. - if (index >= 0 /*&& index < data.size()*/) - return _data[index]; - - if (index < -1) - throw new NotSupportedException("can't look more than one token before the beginning of this stream's buffer"); - - throw new NotSupportedException("can't look past the end of this stream's buffer using LB(int)"); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs deleted file mode 100644 index b6ebc8f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - [System.Serializable] - public class MismatchedNotSetException : MismatchedSetException - { - public MismatchedNotSetException() - { - } - - public MismatchedNotSetException(string message) - : base(message) - { - } - - public MismatchedNotSetException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MismatchedNotSetException(BitSet expecting, IIntStream input) - : base(expecting, input) - { - } - - public MismatchedNotSetException(string message, BitSet expecting, IIntStream input) - : base(message, expecting, input) - { - } - - public MismatchedNotSetException(string message, BitSet expecting, IIntStream input, Exception innerException) - : base(message, expecting, input, innerException) - { - } - - protected MismatchedNotSetException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - - public override string ToString() - { - return "MismatchedNotSetException(" + UnexpectedType + "!=" + Expecting + ")"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs deleted file mode 100644 index c714aef..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs +++ /dev/null @@ -1,122 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - [System.Serializable] - public class MismatchedRangeException : RecognitionException - { - private readonly int _a; - private readonly int _b; - - public MismatchedRangeException() - { - } - - public MismatchedRangeException(string message) - : base(message) - { - } - - public MismatchedRangeException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MismatchedRangeException(int a, int b, IIntStream input) - : base(input) - { - this._a = a; - this._b = b; - } - - public MismatchedRangeException(string message, int a, int b, IIntStream input) - : base(message, input) - { - this._a = a; - this._b = b; - } - - public MismatchedRangeException(string message, int a, int b, IIntStream input, Exception innerException) - : base(message, input, innerException) - { - this._a = a; - this._b = b; - } - - protected MismatchedRangeException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._a = info.GetInt32("A"); - this._b = info.GetInt32("B"); - } - - public int A - { - get - { - return _a; - } - } - - public int B - { - get - { - return _b; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("A", _a); - info.AddValue("B", _b); - } - - public override string ToString() - { - return "MismatchedRangeException(" + UnexpectedType + " not in [" + A + "," + B + "])"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs deleted file mode 100644 index 10baecf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs +++ /dev/null @@ -1,108 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - [System.Serializable] - public class MismatchedSetException : RecognitionException - { - private readonly BitSet _expecting; - - public MismatchedSetException() - { - } - - public MismatchedSetException(string message) - : base(message) - { - } - - public MismatchedSetException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MismatchedSetException( BitSet expecting, IIntStream input ) - : base( input ) - { - this._expecting = expecting; - } - - public MismatchedSetException(string message, BitSet expecting, IIntStream input) - : base(message, input) - { - this._expecting = expecting; - } - - public MismatchedSetException(string message, BitSet expecting, IIntStream input, Exception innerException) - : base(message, input, innerException) - { - this._expecting = expecting; - } - - protected MismatchedSetException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._expecting = (BitSet)info.GetValue("Expecting", typeof(BitSet)); - } - - public BitSet Expecting - { - get - { - return _expecting; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("Expecting", _expecting); - } - - public override string ToString() - { - return "MismatchedSetException(" + UnexpectedType + "!=" + Expecting + ")"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs deleted file mode 100644 index 55c9aab..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs +++ /dev/null @@ -1,139 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using System.Collections.ObjectModel; - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** A mismatched char or Token or tree node */ - [System.Serializable] - public class MismatchedTokenException : RecognitionException - { - private readonly int _expecting = TokenTypes.Invalid; - private readonly ReadOnlyCollection _tokenNames; - - public MismatchedTokenException() - { - } - - public MismatchedTokenException(string message) - : base(message) - { - } - - public MismatchedTokenException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MismatchedTokenException(int expecting, IIntStream input) - : this(expecting, input, null) - { - } - - public MismatchedTokenException(int expecting, IIntStream input, IList tokenNames) - : base(input) - { - this._expecting = expecting; - - if (tokenNames != null) - this._tokenNames = new List(tokenNames).AsReadOnly(); - } - - public MismatchedTokenException(string message, int expecting, IIntStream input, IList tokenNames) - : base(message, input) - { - this._expecting = expecting; - - if (tokenNames != null) - this._tokenNames = new List(tokenNames).AsReadOnly(); - } - - public MismatchedTokenException(string message, int expecting, IIntStream input, IList tokenNames, Exception innerException) - : base(message, input, innerException) - { - this._expecting = expecting; - - if (tokenNames != null) - this._tokenNames = new List(tokenNames).AsReadOnly(); - } - - protected MismatchedTokenException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._expecting = info.GetInt32("Expecting"); - this._tokenNames = new ReadOnlyCollection((string[])info.GetValue("TokenNames", typeof(string[]))); - } - - public int Expecting - { - get - { - return _expecting; - } - } - - public ReadOnlyCollection TokenNames - { - get - { - return _tokenNames; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("Expecting", _expecting); - info.AddValue("TokenNames", (_tokenNames != null) ? new List(_tokenNames).ToArray() : default(string[])); - } - - public override string ToString() - { - int unexpectedType = UnexpectedType; - string unexpected = ( TokenNames != null && unexpectedType >= 0 && unexpectedType < TokenNames.Count ) ? TokenNames[unexpectedType] : unexpectedType.ToString(); - string expected = ( TokenNames != null && Expecting >= 0 && Expecting < TokenNames.Count ) ? TokenNames[Expecting] : Expecting.ToString(); - return "MismatchedTokenException(" + unexpected + "!=" + expected + ")"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs deleted file mode 100644 index 2a33279..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - [System.Serializable] - public class MismatchedTreeNodeException : RecognitionException - { - private readonly int _expecting; - - public MismatchedTreeNodeException() - { - } - - public MismatchedTreeNodeException(string message) - : base(message) - { - } - - public MismatchedTreeNodeException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MismatchedTreeNodeException( int expecting, ITreeNodeStream input ) - : base( input ) - { - this._expecting = expecting; - } - - public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input) - : base(message, input) - { - this._expecting = expecting; - } - - public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input, Exception innerException) - : base(message, input, innerException) - { - this._expecting = expecting; - } - - protected MismatchedTreeNodeException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._expecting = info.GetInt32("Expecting"); - } - - public int Expecting - { - get - { - return _expecting; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("Expecting", _expecting); - } - - public override string ToString() - { - return "MismatchedTreeNodeException(" + UnexpectedType + "!=" + Expecting + ")"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs deleted file mode 100644 index 7a9cba1..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs +++ /dev/null @@ -1,113 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** - * We were expecting a token but it's not found. The current token - * is actually what we wanted next. Used for tree node errors too. - * - */ - [System.Serializable] - public class MissingTokenException : MismatchedTokenException - { - private readonly object _inserted; - - public MissingTokenException() - { - } - - public MissingTokenException(string message) - : base(message) - { - } - - public MissingTokenException(string message, Exception innerException) - : base(message, innerException) - { - } - - public MissingTokenException(int expecting, IIntStream input, object inserted) - : this(expecting, input, inserted, null) - { - } - - public MissingTokenException(int expecting, IIntStream input, object inserted, IList tokenNames) - : base(expecting, input, tokenNames) - { - this._inserted = inserted; - } - - public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList tokenNames) - : base(message, expecting, input, tokenNames) - { - this._inserted = inserted; - } - - public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList tokenNames, Exception innerException) - : base(message, expecting, input, tokenNames, innerException) - { - this._inserted = inserted; - } - - protected MissingTokenException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - - public virtual int MissingType - { - get - { - return Expecting; - } - } - - public override string ToString() - { - if (_inserted != null && Token != null) - { - return "MissingTokenException(inserted " + _inserted + " at " + Token.Text + ")"; - } - if (Token != null) - { - return "MissingTokenException(at " + Token.Text + ")"; - } - return "MissingTokenException"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs deleted file mode 100644 index 4f37001..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs +++ /dev/null @@ -1,165 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Tunnel Vision Laboratories, LLC - * 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. - */ - -namespace Antlr.Runtime -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - [System.Serializable] - public class NoViableAltException : RecognitionException - { - private readonly string _grammarDecisionDescription; - private readonly int _decisionNumber; - private readonly int _stateNumber; - - public NoViableAltException() - { - } - - public NoViableAltException(string grammarDecisionDescription) - { - this._grammarDecisionDescription = grammarDecisionDescription; - } - - public NoViableAltException(string message, string grammarDecisionDescription) - : base(message) - { - this._grammarDecisionDescription = grammarDecisionDescription; - } - - public NoViableAltException(string message, string grammarDecisionDescription, Exception innerException) - : base(message, innerException) - { - this._grammarDecisionDescription = grammarDecisionDescription; - } - - public NoViableAltException(string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input) - : this(grammarDecisionDescription, decisionNumber, stateNumber, input, 1) - { - } - - public NoViableAltException(string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k) - : base(input, k) - { - this._grammarDecisionDescription = grammarDecisionDescription; - this._decisionNumber = decisionNumber; - this._stateNumber = stateNumber; - } - - public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input) - : this(message, grammarDecisionDescription, decisionNumber, stateNumber, input, 1) - { - } - - public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k) - : base(message, input, k) - { - this._grammarDecisionDescription = grammarDecisionDescription; - this._decisionNumber = decisionNumber; - this._stateNumber = stateNumber; - } - - public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, Exception innerException) - : this(message, grammarDecisionDescription, decisionNumber, stateNumber, input, 1, innerException) - { - } - - public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k, Exception innerException) - : base(message, input, k, innerException) - { - this._grammarDecisionDescription = grammarDecisionDescription; - this._decisionNumber = decisionNumber; - this._stateNumber = stateNumber; - } - - protected NoViableAltException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - this._grammarDecisionDescription = info.GetString("GrammarDecisionDescription"); - this._decisionNumber = info.GetInt32("DecisionNumber"); - this._stateNumber = info.GetInt32("StateNumber"); - } - - public int DecisionNumber - { - get - { - return _decisionNumber; - } - } - - public string GrammarDecisionDescription - { - get - { - return _grammarDecisionDescription; - } - } - - public int StateNumber - { - get - { - return _stateNumber; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("GrammarDecisionDescription", _grammarDecisionDescription); - info.AddValue("DecisionNumber", _decisionNumber); - info.AddValue("StateNumber", _stateNumber); - } - - public override string ToString() - { - if ( Input is ICharStream ) - { - return "NoViableAltException('" + (char)UnexpectedType + "'@[" + GrammarDecisionDescription + "])"; - } - else - { - return "NoViableAltException(" + UnexpectedType + "@[" + GrammarDecisionDescription + "])"; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs deleted file mode 100644 index 4874140..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs +++ /dev/null @@ -1,131 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using ConditionalAttribute = System.Diagnostics.ConditionalAttribute; - - /** - * A parser for TokenStreams. "parser grammars" result in a subclass - * of this. - * - */ - public class Parser : BaseRecognizer - { - public ITokenStream input; - - public Parser( ITokenStream input ) - : base() - { - //super(); // highlight that we go to super to set state object - TokenStream = input; - } - - public Parser( ITokenStream input, RecognizerSharedState state ) - : base(state) // share the state object with another parser - { - this.input = input; - } - - public override void Reset() - { - base.Reset(); // reset all recognizer state variables - if ( input != null ) - { - input.Seek( 0 ); // rewind the input - } - } - - protected override object GetCurrentInputSymbol( IIntStream input ) - { - return ( (ITokenStream)input ).LT( 1 ); - } - - protected override object GetMissingSymbol( IIntStream input, - RecognitionException e, - int expectedTokenType, - BitSet follow ) - { - string tokenText = null; - if ( expectedTokenType == TokenTypes.EndOfFile ) - tokenText = ""; - else - tokenText = ""; - CommonToken t = new CommonToken( expectedTokenType, tokenText ); - IToken current = ( (ITokenStream)input ).LT( 1 ); - if ( current.Type == TokenTypes.EndOfFile ) - { - current = ( (ITokenStream)input ).LT( -1 ); - } - t.Line = current.Line; - t.CharPositionInLine = current.CharPositionInLine; - t.Channel = DefaultTokenChannel; - t.InputStream = current.InputStream; - return t; - } - - /** Gets or sets the token stream; resets the parser upon a set. */ - public virtual ITokenStream TokenStream - { - get - { - return input; - } - set - { - input = null; - Reset(); - input = value; - } - } - - public override string SourceName - { - get - { - return input.SourceName; - } - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceIn( string ruleName, int ruleIndex ) - { - base.TraceIn( ruleName, ruleIndex, input.LT( 1 ) ); - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceOut( string ruleName, int ruleIndex ) - { - base.TraceOut( ruleName, ruleIndex, input.LT( 1 ) ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs deleted file mode 100644 index 7a0d58a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs +++ /dev/null @@ -1,106 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using CLSCompliant = System.CLSCompliantAttribute; - - /** - * Rules that return more than a single value must return an object - * containing all the values. Besides the properties defined in - * RuleLabelScope.predefinedRulePropertiesScope there may be user-defined - * return values. This class simply defines the minimum properties that - * are always defined and methods to access the others that might be - * available depending on output option such as template and tree. - * - * - * - * Note text is not an actual property of the return value, it is computed - * from start and stop using the input stream's toString() method. I - * could add a ctor to this so that we can pass in and store the input - * stream, but I'm not sure we want to do that. It would seem to be undefined - * to get the .text property anyway if the rule matches tokens from multiple - * input streams. - * - * I do not use getters for fields of objects that are used simply to - * group values such as this aggregate. The getters/setters are there to - * satisfy the superclass interface. - * - */ - public class ParserRuleReturnScope : IRuleReturnScope - { - private TToken _start; - private TToken _stop; - - public TToken Start - { - get - { - return _start; - } - - set - { - _start = value; - } - } - - public TToken Stop - { - get - { - return _stop; - } - - set - { - _stop = value; - } - } - - object IRuleReturnScope.Start - { - get - { - return Start; - } - } - - object IRuleReturnScope.Stop - { - get - { - return Stop; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs deleted file mode 100644 index cc3425f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -using System; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Security; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "Antlr3.Runtime" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "Tunnel Vision Laboratories, LLC" )] -[assembly: AssemblyProduct( "Antlr3.Runtime" )] -[assembly: AssemblyCopyright("Copyright © Sam Harwell 2013")] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] -[assembly: CLSCompliant( true )] -[assembly: AllowPartiallyTrustedCallers] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "7a0b4db7-f127-4cf5-ac2c-e294957efcd6" )] - -/* Version information for an assembly consists of four values in the following order: - * - * Major.Minor.Build.Revision - * - * These values are updated according to the following: - * 1. Major.Minor follows the ANTLR release schedule - * 2. Build is incremented each time the C# port is packaged for release (regardless - * of whether it's an incremental or nightly). The value resets to zero whenever - * the Major or Minor version is incremented. - * 3. Revision is the Perforce changelist number associated with the release. - */ -[assembly: AssemblyVersion("3.5.0.2")] -[assembly: AssemblyFileVersion("3.5.0.2")] diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs deleted file mode 100644 index 007560d..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs +++ /dev/null @@ -1,474 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Tunnel Vision Laboratories, LLC - * 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. - */ - -namespace Antlr.Runtime -{ - using Antlr.Runtime.Tree; - - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using NotSupportedException = System.NotSupportedException; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** The root of the ANTLR exception hierarchy. - * - * - * To avoid English-only error messages and to generally make things - * as flexible as possible, these exceptions are not created with strings, - * but rather the information necessary to generate an error. Then - * the various reporting methods in Parser and Lexer can be overridden - * to generate a localized error message. For example, MismatchedToken - * exceptions are built with the expected token type. - * So, don't expect getMessage() to return anything. - * - * Note that as of Java 1.4, you can access the stack trace, which means - * that you can compute the complete trace of rules from the start symbol. - * This gives you considerable context information with which to generate - * useful error messages. - * - * ANTLR generates code that throws exceptions upon recognition error and - * also generates code to catch these exceptions in each rule. If you - * want to quit upon first error, you can turn off the automatic error - * handling mechanism using rulecatch action, but you still need to - * override methods mismatch and recoverFromMismatchSet. - * - * In general, the recognition exceptions can track where in a grammar a - * problem occurred and/or what was the expected input. While the parser - * knows its state (such as current input symbol and line info) that - * state can change before the exception is reported so current token index - * is computed and stored at exception time. From this info, you can - * perhaps print an entire line of input not just a single token, for example. - * Better to just say the recognizer had a problem and then let the parser - * figure out a fancy report. - * - */ - [System.Serializable] - public class RecognitionException : Exception - { - /** What input stream did the error occur in? */ - private IIntStream _input; - - /// - /// What was the lookahead index when this exception was thrown? - /// - private int _k; - - /** What is index of token/char were we looking at when the error occurred? */ - private int _index; - - /** - * The current Token when an error occurred. Since not all streams - * can retrieve the ith Token, we have to track the Token object. - * For parsers. Even when it's a tree parser, token might be set. - * - */ - private IToken _token; - - /** - * If this is a tree parser exception, node is set to the node with - * the problem. - * - */ - private object _node; - - /** The current char when an error occurred. For lexers. */ - private int _c; - - /** - * Track the line (1-based) at which the error occurred in case this is - * generated from a lexer. We need to track this since the - * unexpected char doesn't carry the line info. - * - */ - private int _line; - - /// - /// The 0-based index into the line where the error occurred. - /// - private int _charPositionInLine; - - /** - * If you are parsing a tree node stream, you will encounter som - * imaginary nodes w/o line/col info. We now search backwards looking - * for most recent token with line/col info, but notify getErrorHeader() - * that info is approximate. - * - */ - private bool _approximateLineInfo; - - /** Used for remote debugger deserialization */ - public RecognitionException() - : this("A recognition error occurred.", null, null) - { - } - - public RecognitionException(IIntStream input) - : this("A recognition error occurred.", input, 1, null) - { - } - - public RecognitionException(IIntStream input, int k) - : this("A recognition error occurred.", input, k, null) - { - } - - public RecognitionException(string message) - : this(message, null, null) - { - } - - public RecognitionException(string message, IIntStream input) - : this(message, input, 1, null) - { - } - - public RecognitionException(string message, IIntStream input, int k) - : this(message, input, k, null) - { - } - - public RecognitionException(string message, Exception innerException) - : this(message, null, innerException) - { - } - - public RecognitionException(string message, IIntStream input, Exception innerException) - : this(message, input, 1, innerException) - { - } - - public RecognitionException(string message, IIntStream input, int k, Exception innerException) - : base(message, innerException) - { - this._input = input; - this._k = k; - if (input != null) - { - this._index = input.Index + k - 1; - if (input is ITokenStream) - { - this._token = ((ITokenStream)input).LT(k); - this._line = _token.Line; - this._charPositionInLine = _token.CharPositionInLine; - } - - ITreeNodeStream tns = input as ITreeNodeStream; - if (tns != null) - { - ExtractInformationFromTreeNodeStream(tns, k); - } - else - { - ICharStream charStream = input as ICharStream; - if (charStream != null) - { - int mark = input.Mark(); - try - { - for (int i = 0; i < k - 1; i++) - input.Consume(); - - this._c = input.LA(1); - this._line = ((ICharStream)input).Line; - this._charPositionInLine = ((ICharStream)input).CharPositionInLine; - } - finally - { - input.Rewind(mark); - } - } - else - { - this._c = input.LA(k); - } - } - } - } - - protected RecognitionException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - _index = info.GetInt32("Index"); - _c = info.GetInt32("C"); - _line = info.GetInt32("Line"); - _charPositionInLine = info.GetInt32("CharPositionInLine"); - _approximateLineInfo = info.GetBoolean("ApproximateLineInfo"); - } - - /** Return the token type or char of the unexpected input element */ - public virtual int UnexpectedType - { - get - { - if ( _input is ITokenStream ) - { - return _token.Type; - } - - ITreeNodeStream treeNodeStream = _input as ITreeNodeStream; - if ( treeNodeStream != null ) - { - ITreeAdaptor adaptor = treeNodeStream.TreeAdaptor; - return adaptor.GetType( _node ); - } - - return _c; - } - } - - public bool ApproximateLineInfo - { - get - { - return _approximateLineInfo; - } - protected set - { - _approximateLineInfo = value; - } - } - - public IIntStream Input - { - get - { - return _input; - } - protected set - { - _input = value; - } - } - - public int Lookahead - { - get - { - return _k; - } - } - - public IToken Token - { - get - { - return _token; - } - set - { - _token = value; - } - } - - public object Node - { - get - { - return _node; - } - protected set - { - _node = value; - } - } - - public int Character - { - get - { - return _c; - } - protected set - { - _c = value; - } - } - - public int Index - { - get - { - return _index; - } - protected set - { - _index = value; - } - } - - public int Line - { - get - { - return _line; - } - set - { - _line = value; - } - } - - public int CharPositionInLine - { - get - { - return _charPositionInLine; - } - set - { - _charPositionInLine = value; - } - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("Index", _index); - info.AddValue("C", _c); - info.AddValue("Line", _line); - info.AddValue("CharPositionInLine", _charPositionInLine); - info.AddValue("ApproximateLineInfo", _approximateLineInfo); - } - - protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input) - { - this._node = input.LT(1); - - object positionNode = null; - IPositionTrackingStream positionTrackingStream = input as IPositionTrackingStream; - if (positionTrackingStream != null) - { - positionNode = positionTrackingStream.GetKnownPositionElement(false); - if (positionNode == null) - { - positionNode = positionTrackingStream.GetKnownPositionElement(true); - this._approximateLineInfo = positionNode != null; - } - } - - ITokenStreamInformation streamInformation = input as ITokenStreamInformation; - if (streamInformation != null) - { - IToken lastToken = streamInformation.LastToken; - IToken lastRealToken = streamInformation.LastRealToken; - if (lastRealToken != null) - { - this._token = lastRealToken; - this._line = lastRealToken.Line; - this._charPositionInLine = lastRealToken.CharPositionInLine; - this._approximateLineInfo = lastRealToken.Equals(lastToken); - } - } - else - { - ITreeAdaptor adaptor = input.TreeAdaptor; - IToken payload = adaptor.GetToken(positionNode ?? _node); - if (payload != null) - { - this._token = payload; - if (payload.Line <= 0) - { - // imaginary node; no line/pos info; scan backwards - int i = -1; - object priorNode = input.LT(i); - while (priorNode != null) - { - IToken priorPayload = adaptor.GetToken(priorNode); - if (priorPayload != null && priorPayload.Line > 0) - { - // we found the most recent real line / pos info - this._line = priorPayload.Line; - this._charPositionInLine = priorPayload.CharPositionInLine; - this._approximateLineInfo = true; - break; - } - - --i; - try - { - priorNode = input.LT(i); - } - catch (NotSupportedException) - { - priorNode = null; - } - } - } - else - { - // node created from real token - this._line = payload.Line; - this._charPositionInLine = payload.CharPositionInLine; - } - } - else if (this._node is Tree.ITree) - { - this._line = ((Tree.ITree)this._node).Line; - this._charPositionInLine = ((Tree.ITree)this._node).CharPositionInLine; - if (this._node is CommonTree) - { - this._token = ((CommonTree)this._node).Token; - } - } - else - { - int type = adaptor.GetType(this._node); - string text = adaptor.GetText(this._node); - this._token = new CommonToken(type, text); - } - } - } - - protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input, int k) - { - int mark = input.Mark(); - try - { - for (int i = 0; i < k - 1; i++) - input.Consume(); - - ExtractInformationFromTreeNodeStream(input); - } - finally - { - input.Rewind(mark); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs deleted file mode 100644 index 2b7c6cf..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs +++ /dev/null @@ -1,186 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using CLSCompliant = System.CLSCompliantAttribute; - using ArgumentNullException = System.ArgumentNullException; - - /** - * The set of fields needed by an abstract recognizer to recognize input - * and recover from errors etc... As a separate state object, it can be - * shared among multiple grammars; e.g., when one grammar imports another. - * - * - * - * These fields are publically visible but the actual state pointer per - * parser is protected. - * - */ - public class RecognizerSharedState - { - /** - * Track the set of token types that can follow any rule invocation. - * Stack grows upwards. When it hits the max, it grows 2x in size - * and keeps going. - * - */ - //public List following; - public BitSet[] following; - [CLSCompliant( false )] - public int _fsp; - - /** - * This is true when we see an error and before having successfully - * matched a token. Prevents generation of more than one error message - * per error. - * - */ - public bool errorRecovery; - - /** - * The index into the input stream where the last error occurred. - * This is used to prevent infinite loops where an error is found - * but no token is consumed during recovery...another error is found, - * ad naseum. This is a failsafe mechanism to guarantee that at least - * one token/tree node is consumed for two errors. - * - */ - public int lastErrorIndex; - - /** - * In lieu of a return value, this indicates that a rule or token - * has failed to match. Reset to false upon valid token match. - * - */ - public bool failed; - - /** Did the recognizer encounter a syntax error? Track how many. */ - public int syntaxErrors; - - /** - * If 0, no backtracking is going on. Safe to exec actions etc... - * If >0 then it's the level of backtracking. - * - */ - public int backtracking; - - /** - * An array[size num rules] of Map that tracks - * the stop token index for each rule. ruleMemo[ruleIndex] is - * the memoization table for ruleIndex. For key ruleStartIndex, you - * get back the stop token for associated rule or MEMO_RULE_FAILED. - * - * - * This is only used if rule memoization is on (which it is by default). - */ - public IDictionary[] ruleMemo; - - - // LEXER FIELDS (must be in same state object to avoid casting - // constantly in generated code and Lexer object) :( - - - /** - * The goal of all lexer rules/methods is to create a token object. - * This is an instance variable as multiple rules may collaborate to - * create a single token. nextToken will return this object after - * matching lexer rule(s). If you subclass to allow multiple token - * emissions, then set this to the last token to be matched or - * something nonnull so that the auto token emit mechanism will not - * emit another token. - * - */ - public IToken token; - - /** - * What character index in the stream did the current token start at? - * Needed, for example, to get the text for current token. Set at - * the start of nextToken. - * - */ - public int tokenStartCharIndex; - - /** The line on which the first character of the token resides */ - public int tokenStartLine; - - /** The character position of first character within the line */ - public int tokenStartCharPositionInLine; - - /** The channel number for the current token */ - public int channel; - - /** The token type for the current token */ - public int type; - - /** - * You can set the text for the current token to override what is in - * the input char buffer. Use setText() or can set this instance var. - * - */ - public string text; - - public RecognizerSharedState() - { - //following = new List( BaseRecognizer.InitialFollowStackSize ); - following = new BitSet[BaseRecognizer.InitialFollowStackSize]; - _fsp = -1; - lastErrorIndex = -1; - tokenStartCharIndex = -1; - } - - public RecognizerSharedState( RecognizerSharedState state ) - { - if (state == null) - throw new ArgumentNullException("state"); - - following = (BitSet[])state.following.Clone(); - _fsp = state._fsp; - errorRecovery = state.errorRecovery; - lastErrorIndex = state.lastErrorIndex; - failed = state.failed; - syntaxErrors = state.syntaxErrors; - backtracking = state.backtracking; - - if ( state.ruleMemo != null ) - ruleMemo = (IDictionary[])state.ruleMemo.Clone(); - - token = state.token; - tokenStartCharIndex = state.tokenStartCharIndex; - tokenStartCharPositionInLine = state.tokenStartCharPositionInLine; - channel = state.channel; - type = state.type; - text = state.text; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/TemplateParserRuleReturnScope`2.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/TemplateParserRuleReturnScope`2.cs deleted file mode 100644 index 1e3c185..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/TemplateParserRuleReturnScope`2.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public class TemplateParserRuleReturnScope : ParserRuleReturnScope, ITemplateRuleReturnScope, ITemplateRuleReturnScope - { - private TTemplate _template; - - public TTemplate Template - { - get - { - return _template; - } - - set - { - _template = value; - } - } - - object ITemplateRuleReturnScope.Template - { - get - { - return Template; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenChannels.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/TokenChannels.cs deleted file mode 100644 index 429a2c0..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenChannels.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public static class TokenChannels - { - /** - * All tokens go to the parser (unless skip() is called in that rule) - * on a particular "channel". The parser tunes to a particular channel - * so that whitespace etc... can go to the parser on a "hidden" channel. - * - */ - public const int Default = 0; - - /** - * Anything on different channel than DEFAULT_CHANNEL is not parsed - * by parser. - * - */ - public const int Hidden = 99; - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs deleted file mode 100644 index e9ab4a9..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs +++ /dev/null @@ -1,729 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - - using ArgumentException = System.ArgumentException; - using Console = System.Console; - using Math = System.Math; - using DebuggerDisplay = System.Diagnostics.DebuggerDisplayAttribute; - using Exception = System.Exception; - using StringBuilder = System.Text.StringBuilder; - using Type = System.Type; - - /** Useful for dumping out the input stream after doing some - * augmentation or other manipulations. - * - * You can insert stuff, replace, and delete chunks. Note that the - * operations are done lazily--only if you convert the buffer to a - * String. This is very efficient because you are not moving data around - * all the time. As the buffer of tokens is converted to strings, the - * toString() method(s) check to see if there is an operation at the - * current index. If so, the operation is done and then normal String - * rendering continues on the buffer. This is like having multiple Turing - * machine instruction streams (programs) operating on a single input tape. :) - * - * Since the operations are done lazily at toString-time, operations do not - * screw up the token index values. That is, an insert operation at token - * index i does not change the index values for tokens i+1..n-1. - * - * Because operations never actually alter the buffer, you may always get - * the original token stream back without undoing anything. Since - * the instructions are queued up, you can easily simulate transactions and - * roll back any changes if there is an error just by removing instructions. - * For example, - * - * CharStream input = new ANTLRFileStream("input"); - * TLexer lex = new TLexer(input); - * TokenRewriteStream tokens = new TokenRewriteStream(lex); - * T parser = new T(tokens); - * parser.startRule(); - * - * Then in the rules, you can execute - * Token t,u; - * ... - * input.insertAfter(t, "text to put after t");} - * input.insertAfter(u, "text after u");} - * System.out.println(tokens.toString()); - * - * Actually, you have to cast the 'input' to a TokenRewriteStream. :( - * - * You can also have multiple "instruction streams" and get multiple - * rewrites from a single pass over the input. Just name the instruction - * streams and use that name again when printing the buffer. This could be - * useful for generating a C file and also its header file--all from the - * same buffer: - * - * tokens.insertAfter("pass1", t, "text to put after t");} - * tokens.insertAfter("pass2", u, "text after u");} - * System.out.println(tokens.toString("pass1")); - * System.out.println(tokens.toString("pass2")); - * - * If you don't use named rewrite streams, a "default" stream is used as - * the first example shows. - */ - [System.Serializable] - [DebuggerDisplay( "TODO: TokenRewriteStream debugger display" )] - public class TokenRewriteStream : CommonTokenStream - { - public const string DEFAULT_PROGRAM_NAME = "default"; - public const int PROGRAM_INIT_SIZE = 100; - public const int MIN_TOKEN_INDEX = 0; - - // Define the rewrite operation hierarchy - - protected class RewriteOperation - { - /** What index into rewrites List are we? */ - public int instructionIndex; - /** Token buffer index. */ - public int index; - public object text; - // outer - protected TokenRewriteStream stream; - - protected RewriteOperation(TokenRewriteStream stream, int index) - { - this.stream = stream; - this.index = index; - } - - protected RewriteOperation( TokenRewriteStream stream, int index, object text ) - { - this.index = index; - this.text = text; - this.stream = stream; - } - - /** - * Execute the rewrite operation by possibly adding to the buffer. - * Return the index of the next token to operate on. - * - */ - public virtual int Execute( StringBuilder buf ) - { - return index; - } - - public override string ToString() - { - string opName = this.GetType().Name; - int dindex = opName.IndexOf( '$' ); - opName = opName.Substring( dindex + 1 ); - return string.Format("<{0}@{1}:\"{2}\">", opName, stream._tokens[index], text); - } - } - - private class InsertBeforeOp : RewriteOperation - { - public InsertBeforeOp( TokenRewriteStream stream, int index, object text ) : - base( stream, index, text ) - { - } - - public override int Execute( StringBuilder buf ) - { - buf.Append( text ); - if (stream._tokens[index].Type != CharStreamConstants.EndOfFile) - buf.Append(stream._tokens[index].Text); - return index + 1; - } - } - - /** - * I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp - * instructions. - * - */ - private class ReplaceOp : RewriteOperation - { - public int lastIndex; - public ReplaceOp( TokenRewriteStream stream, int from, int to, object text ) - : base( stream, from, text ) - { - lastIndex = to; - } - - public override int Execute( StringBuilder buf ) - { - if ( text != null ) - { - buf.Append( text ); - } - return lastIndex + 1; - } - - public override string ToString() - { - if (text == null) - { - return string.Format("", stream._tokens[index], stream._tokens[lastIndex]); - } - - return string.Format("", stream._tokens[index], stream._tokens[lastIndex], text); - } - } - - /** - * You may have multiple, named streams of rewrite operations. - * I'm calling these things "programs." - * Maps String (name) -> rewrite (List) - * - */ - protected IDictionary> programs = null; - - /** Map String (program name) -> Integer index */ - protected IDictionary lastRewriteTokenIndexes = null; - - public TokenRewriteStream() - { - Init(); - } - - protected void Init() - { - programs = new Dictionary>(); - programs[DEFAULT_PROGRAM_NAME] = new List( PROGRAM_INIT_SIZE ); - lastRewriteTokenIndexes = new Dictionary(); - } - - public TokenRewriteStream( ITokenSource tokenSource ) - : base( tokenSource ) - { - Init(); - } - - public TokenRewriteStream( ITokenSource tokenSource, int channel ) - : base( tokenSource, channel ) - { - Init(); - } - - public virtual void Rollback( int instructionIndex ) - { - Rollback( DEFAULT_PROGRAM_NAME, instructionIndex ); - } - - /** - * Rollback the instruction stream for a program so that - * the indicated instruction (via instructionIndex) is no - * longer in the stream. UNTESTED! - * - */ - public virtual void Rollback( string programName, int instructionIndex ) - { - IList @is; - if ( programs.TryGetValue( programName, out @is ) && @is != null ) - { - List sublist = new List(); - for ( int i = MIN_TOKEN_INDEX; i <= instructionIndex; i++ ) - sublist.Add( @is[i] ); - - programs[programName] = sublist; - } - } - - public virtual void DeleteProgram() - { - DeleteProgram( DEFAULT_PROGRAM_NAME ); - } - - /** Reset the program so that no instructions exist */ - public virtual void DeleteProgram( string programName ) - { - Rollback( programName, MIN_TOKEN_INDEX ); - } - - public virtual void InsertAfter( IToken t, object text ) - { - InsertAfter( DEFAULT_PROGRAM_NAME, t, text ); - } - - public virtual void InsertAfter( int index, object text ) - { - InsertAfter( DEFAULT_PROGRAM_NAME, index, text ); - } - - public virtual void InsertAfter( string programName, IToken t, object text ) - { - InsertAfter( programName, t.TokenIndex, text ); - } - - public virtual void InsertAfter( string programName, int index, object text ) - { - // to insert after, just insert before next index (even if past end) - InsertBefore( programName, index + 1, text ); - } - - public virtual void InsertBefore( IToken t, object text ) - { - InsertBefore( DEFAULT_PROGRAM_NAME, t, text ); - } - - public virtual void InsertBefore( int index, object text ) - { - InsertBefore( DEFAULT_PROGRAM_NAME, index, text ); - } - - public virtual void InsertBefore( string programName, IToken t, object text ) - { - InsertBefore( programName, t.TokenIndex, text ); - } - - public virtual void InsertBefore( string programName, int index, object text ) - { - RewriteOperation op = new InsertBeforeOp( this, index, text ); - IList rewrites = GetProgram( programName ); - op.instructionIndex = rewrites.Count; - rewrites.Add( op ); - } - - public virtual void Replace( int index, object text ) - { - Replace( DEFAULT_PROGRAM_NAME, index, index, text ); - } - - public virtual void Replace( int from, int to, object text ) - { - Replace( DEFAULT_PROGRAM_NAME, from, to, text ); - } - - public virtual void Replace( IToken indexT, object text ) - { - Replace( DEFAULT_PROGRAM_NAME, indexT, indexT, text ); - } - - public virtual void Replace( IToken from, IToken to, object text ) - { - Replace( DEFAULT_PROGRAM_NAME, from, to, text ); - } - - public virtual void Replace( string programName, int from, int to, object text ) - { - if ( from > to || from < 0 || to < 0 || to >= _tokens.Count ) - { - throw new ArgumentException( "replace: range invalid: " + from + ".." + to + "(size=" + _tokens.Count + ")" ); - } - RewriteOperation op = new ReplaceOp( this, from, to, text ); - IList rewrites = GetProgram( programName ); - op.instructionIndex = rewrites.Count; - rewrites.Add( op ); - } - - public virtual void Replace( string programName, IToken from, IToken to, object text ) - { - Replace( programName, - from.TokenIndex, - to.TokenIndex, - text ); - } - - public virtual void Delete( int index ) - { - Delete( DEFAULT_PROGRAM_NAME, index, index ); - } - - public virtual void Delete( int from, int to ) - { - Delete( DEFAULT_PROGRAM_NAME, from, to ); - } - - public virtual void Delete( IToken indexT ) - { - Delete( DEFAULT_PROGRAM_NAME, indexT, indexT ); - } - - public virtual void Delete( IToken from, IToken to ) - { - Delete( DEFAULT_PROGRAM_NAME, from, to ); - } - - public virtual void Delete( string programName, int from, int to ) - { - Replace( programName, from, to, null ); - } - - public virtual void Delete( string programName, IToken from, IToken to ) - { - Replace( programName, from, to, null ); - } - - public virtual int GetLastRewriteTokenIndex() - { - return GetLastRewriteTokenIndex( DEFAULT_PROGRAM_NAME ); - } - - protected virtual int GetLastRewriteTokenIndex( string programName ) - { - int value; - if ( lastRewriteTokenIndexes.TryGetValue( programName, out value ) ) - return value; - - return -1; - } - - protected virtual void SetLastRewriteTokenIndex( string programName, int i ) - { - lastRewriteTokenIndexes[programName] = i; - } - - protected virtual IList GetProgram( string name ) - { - IList @is; - if ( !programs.TryGetValue( name, out @is ) || @is == null ) - { - @is = InitializeProgram( name ); - } - return @is; - } - - private IList InitializeProgram( string name ) - { - IList @is = new List( PROGRAM_INIT_SIZE ); - programs[name] = @is; - return @is; - } - - public virtual string ToOriginalString() - { - Fill(); - return ToOriginalString( MIN_TOKEN_INDEX, Count - 1 ); - } - - public virtual string ToOriginalString( int start, int end ) - { - StringBuilder buf = new StringBuilder(); - for ( int i = start; i >= MIN_TOKEN_INDEX && i <= end && i < _tokens.Count; i++ ) - { - if (Get(i).Type != CharStreamConstants.EndOfFile) - buf.Append(Get(i).Text); - } - return buf.ToString(); - } - - public override string ToString() - { - Fill(); - return ToString( MIN_TOKEN_INDEX, Count - 1 ); - } - - public virtual string ToString( string programName ) - { - Fill(); - return ToString(programName, MIN_TOKEN_INDEX, Count - 1); - } - - public override string ToString( int start, int end ) - { - return ToString( DEFAULT_PROGRAM_NAME, start, end ); - } - - public virtual string ToString( string programName, int start, int end ) - { - IList rewrites; - if ( !programs.TryGetValue( programName, out rewrites ) ) - rewrites = null; - - // ensure start/end are in range - if ( end > _tokens.Count - 1 ) - end = _tokens.Count - 1; - if ( start < 0 ) - start = 0; - - if ( rewrites == null || rewrites.Count == 0 ) - { - return ToOriginalString( start, end ); // no instructions to execute - } - StringBuilder buf = new StringBuilder(); - - // First, optimize instruction stream - IDictionary indexToOp = ReduceToSingleOperationPerIndex( rewrites ); - - // Walk buffer, executing instructions and emitting tokens - int i = start; - while ( i <= end && i < _tokens.Count ) - { - RewriteOperation op; - bool exists = indexToOp.TryGetValue( i, out op ); - - if ( exists ) - { - // remove so any left have index size-1 - indexToOp.Remove( i ); - } - - if ( !exists || op == null ) - { - IToken t = _tokens[i]; - // no operation at that index, just dump token - if (t.Type != CharStreamConstants.EndOfFile) - buf.Append(t.Text); - i++; // move to next token - } - else - { - i = op.Execute( buf ); // execute operation and skip - } - } - - // include stuff after end if it's last index in buffer - // So, if they did an insertAfter(lastValidIndex, "foo"), include - // foo if end==lastValidIndex. - if ( end == _tokens.Count - 1 ) - { - // Scan any remaining operations after last token - // should be included (they will be inserts). - foreach ( RewriteOperation op in indexToOp.Values ) - { - if ( op.index >= _tokens.Count - 1 ) - buf.Append( op.text ); - } - } - return buf.ToString(); - } - - /** We need to combine operations and report invalid operations (like - * overlapping replaces that are not completed nested). Inserts to - * same index need to be combined etc... Here are the cases: - * - * I.i.u I.j.v leave alone, nonoverlapping - * I.i.u I.i.v combine: Iivu - * - * R.i-j.u R.x-y.v | i-j in x-y delete first R - * R.i-j.u R.i-j.v delete first R - * R.i-j.u R.x-y.v | x-y in i-j ERROR - * R.i-j.u R.x-y.v | boundaries overlap ERROR - * - * Delete special case of replace (text==null): - * D.i-j.u D.x-y.v | boundaries overlap combine to max(min)..max(right) - * - * I.i.u R.x-y.v | i in (x+1)-y delete I (since insert before - * we're not deleting i) - * I.i.u R.x-y.v | i not in (x+1)-y leave alone, nonoverlapping - * R.x-y.v I.i.u | i in x-y ERROR - * R.x-y.v I.x.u R.x-y.uv (combine, delete I) - * R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping - * - * I.i.u = insert u before op @ index i - * R.x-y.u = replace x-y indexed tokens with u - * - * First we need to examine replaces. For any replace op: - * - * 1. wipe out any insertions before op within that range. - * 2. Drop any replace op before that is contained completely within - * that range. - * 3. Throw exception upon boundary overlap with any previous replace. - * - * Then we can deal with inserts: - * - * 1. for any inserts to same index, combine even if not adjacent. - * 2. for any prior replace with same left boundary, combine this - * insert with replace and delete this replace. - * 3. throw exception if index in same range as previous replace - * - * Don't actually delete; make op null in list. Easier to walk list. - * Later we can throw as we add to index -> op map. - * - * Note that I.2 R.2-2 will wipe out I.2 even though, technically, the - * inserted stuff would be before the replace range. But, if you - * add tokens in front of a method body '{' and then delete the method - * body, I think the stuff before the '{' you added should disappear too. - * - * Return a map from token index to operation. - */ - protected virtual IDictionary ReduceToSingleOperationPerIndex( IList rewrites ) - { - //System.out.println("rewrites="+rewrites); - - // WALK REPLACES - for ( int i = 0; i < rewrites.Count; i++ ) - { - RewriteOperation op = rewrites[i]; - if ( op == null ) - continue; - if ( !( op is ReplaceOp ) ) - continue; - ReplaceOp rop = (ReplaceOp)rewrites[i]; - // Wipe prior inserts within range - var inserts = GetKindOfOps( rewrites, typeof( InsertBeforeOp ), i ); - for ( int j = 0; j < inserts.Count; j++ ) - { - InsertBeforeOp iop = (InsertBeforeOp)inserts[j]; - if (iop.index == rop.index) - { - // E.g., insert before 2, delete 2..2; update replace - // text to include insert before, kill insert - rewrites[iop.instructionIndex] = null; - rop.text = iop.text.ToString() + (rop.text != null ? rop.text.ToString() : string.Empty); - } - else if (iop.index > rop.index && iop.index <= rop.lastIndex) - { - // delete insert as it's a no-op. - rewrites[iop.instructionIndex] = null; - } - } - // Drop any prior replaces contained within - var prevReplaces = GetKindOfOps( rewrites, typeof( ReplaceOp ), i ); - for ( int j = 0; j < prevReplaces.Count; j++ ) - { - ReplaceOp prevRop = (ReplaceOp)prevReplaces[j]; - if ( prevRop.index >= rop.index && prevRop.lastIndex <= rop.lastIndex ) - { - // delete replace as it's a no-op. - rewrites[prevRop.instructionIndex] = null; - continue; - } - // throw exception unless disjoint or identical - bool disjoint = - prevRop.lastIndex < rop.index || prevRop.index > rop.lastIndex; - bool same = - prevRop.index == rop.index && prevRop.lastIndex == rop.lastIndex; - // Delete special case of replace (text==null): - // D.i-j.u D.x-y.v | boundaries overlap combine to max(min)..max(right) - if (prevRop.text == null && rop.text == null && !disjoint) - { - //System.out.println("overlapping deletes: "+prevRop+", "+rop); - rewrites[prevRop.instructionIndex] = null; // kill first delete - rop.index = Math.Min(prevRop.index, rop.index); - rop.lastIndex = Math.Max(prevRop.lastIndex, rop.lastIndex); - Console.WriteLine("new rop " + rop); - } - else if ( !disjoint && !same ) - { - throw new ArgumentException( "replace op boundaries of " + rop + - " overlap with previous " + prevRop ); - } - } - } - - // WALK INSERTS - for ( int i = 0; i < rewrites.Count; i++ ) - { - RewriteOperation op = (RewriteOperation)rewrites[i]; - if ( op == null ) - continue; - if ( !( op is InsertBeforeOp ) ) - continue; - InsertBeforeOp iop = (InsertBeforeOp)rewrites[i]; - // combine current insert with prior if any at same index - var prevInserts = GetKindOfOps( rewrites, typeof( InsertBeforeOp ), i ); - for ( int j = 0; j < prevInserts.Count; j++ ) - { - InsertBeforeOp prevIop = (InsertBeforeOp)prevInserts[j]; - if ( prevIop.index == iop.index ) - { // combine objects - // convert to strings...we're in process of toString'ing - // whole token buffer so no lazy eval issue with any templates - iop.text = CatOpText( iop.text, prevIop.text ); - // delete redundant prior insert - rewrites[prevIop.instructionIndex] = null; - } - } - // look for replaces where iop.index is in range; error - var prevReplaces = GetKindOfOps( rewrites, typeof( ReplaceOp ), i ); - for ( int j = 0; j < prevReplaces.Count; j++ ) - { - ReplaceOp rop = (ReplaceOp)prevReplaces[j]; - if ( iop.index == rop.index ) - { - rop.text = CatOpText( iop.text, rop.text ); - rewrites[i] = null; // delete current insert - continue; - } - if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) - { - throw new ArgumentException( "insert op " + iop + - " within boundaries of previous " + rop ); - } - } - } - // System.out.println("rewrites after="+rewrites); - IDictionary m = new Dictionary(); - for ( int i = 0; i < rewrites.Count; i++ ) - { - RewriteOperation op = (RewriteOperation)rewrites[i]; - if ( op == null ) - continue; // ignore deleted ops - - RewriteOperation existing; - if ( m.TryGetValue( op.index, out existing ) && existing != null ) - { - throw new Exception( "should only be one op per index" ); - } - m[op.index] = op; - } - //System.out.println("index to op: "+m); - return m; - } - - protected virtual string CatOpText( object a, object b ) - { - return string.Concat( a, b ); - } - protected virtual IList GetKindOfOps( IList rewrites, Type kind ) - { - return GetKindOfOps( rewrites, kind, rewrites.Count ); - } - - /** Get all operations before an index of a particular kind */ - protected virtual IList GetKindOfOps( IList rewrites, Type kind, int before ) - { - IList ops = new List(); - for ( int i = 0; i < before && i < rewrites.Count; i++ ) - { - RewriteOperation op = rewrites[i]; - if ( op == null ) - continue; // ignore deleted - if ( op.GetType() == kind ) - ops.Add( op ); - } - return ops; - } - - public virtual string ToDebugString() - { - return ToDebugString( MIN_TOKEN_INDEX, Count - 1 ); - } - - public virtual string ToDebugString( int start, int end ) - { - StringBuilder buf = new StringBuilder(); - for ( int i = start; i >= MIN_TOKEN_INDEX && i <= end && i < _tokens.Count; i++ ) - { - buf.Append( Get( i ) ); - } - return buf.ToString(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenTypes.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/TokenTypes.cs deleted file mode 100644 index 29692ce..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/TokenTypes.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public static class TokenTypes - { - public const int EndOfFile = CharStreamConstants.EndOfFile; - public const int Invalid = 0; - public const int EndOfRule = 1; - /** imaginary tree navigation type; traverse "get child" link */ - public const int Down = 2; - /** imaginary tree navigation type; finish with a child list */ - public const int Up = 3; - public const int Min = Up + 1; - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tokens.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tokens.cs deleted file mode 100644 index a736f2f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tokens.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - public static class Tokens - { - /** - * In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR - * will avoid creating a token for this symbol and try to fetch another. - * - */ - public static readonly IToken Skip = new CommonToken( TokenTypes.Invalid ); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AntlrRuntime_BaseTreeDebugView.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AntlrRuntime_BaseTreeDebugView.cs deleted file mode 100644 index 3346e36..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AntlrRuntime_BaseTreeDebugView.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Diagnostics; - - internal sealed class AntlrRuntime_BaseTreeDebugView - { - private readonly BaseTree _tree; - - public AntlrRuntime_BaseTreeDebugView(BaseTree tree) - { - _tree = tree; - } - - [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - public ITree[] Children - { - get - { - if (_tree == null || _tree.Children == null) - return null; - - ITree[] children = new ITree[_tree.Children.Count]; - _tree.Children.CopyTo(children, 0); - return children; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AstTreeRuleReturnScope`2.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AstTreeRuleReturnScope`2.cs deleted file mode 100644 index cc8cb6f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/AstTreeRuleReturnScope`2.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - public class AstTreeRuleReturnScope : TreeRuleReturnScope, IAstRuleReturnScope, IAstRuleReturnScope - { - private TOutputTree _tree; - - public TOutputTree Tree - { - get - { - return _tree; - } - - set - { - _tree = value; - } - } - - object IAstRuleReturnScope.Tree - { - get - { - return Tree; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs deleted file mode 100644 index 9327860..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs +++ /dev/null @@ -1,575 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Tunnel Vision Laboratories, LLC - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System; - using System.Collections.Generic; - - using StringBuilder = System.Text.StringBuilder; - - /** - * A generic tree implementation with no payload. You must subclass to - * actually have any user data. ANTLR v3 uses a list of children approach - * instead of the child-sibling approach in v2. A flat tree (a list) is - * an empty node whose children represent the list. An empty, but - * non-null node is called "nil". - * - */ - [System.Serializable] - [System.Diagnostics.DebuggerTypeProxy(typeof(AntlrRuntime_BaseTreeDebugView))] - public abstract class BaseTree : ITree - { - private IList _children; - - public BaseTree() - { - } - - /** - * Create a new node from an existing node does nothing for BaseTree - * as there are no fields other than the children list, which cannot - * be copied as the children are not considered part of this node. - * - */ - public BaseTree( ITree node ) - { - } - - /** - * Get the children internal List; note that if you directly mess with - * the list, do so at your own risk. - * - */ - public virtual IList Children - { - get - { - return _children; - } - - private set - { - _children = value; - } - } - - #region ITree Members - - public virtual int ChildCount - { - get - { - if ( Children == null ) - return 0; - - return Children.Count; - } - } - - /** BaseTree doesn't track parent pointers. */ - public virtual ITree Parent - { - get - { - return null; - } - set - { - } - } - - /** BaseTree doesn't track child indexes. */ - public virtual int ChildIndex - { - get - { - return 0; - } - set - { - } - } - - public virtual bool IsNil - { - get - { - return false; - } - } - - public abstract int TokenStartIndex - { - get; - set; - } - - public abstract int TokenStopIndex - { - get; - set; - } - - public abstract int Type - { - get; - set; - } - - public abstract string Text - { - get; - set; - } - - public virtual int Line - { - get; - set; - } - - public virtual int CharPositionInLine - { - get; - set; - } - - #endregion - - public virtual ITree GetChild( int i ) - { - if (i < 0) - throw new ArgumentOutOfRangeException(); - - if ( Children == null || i >= Children.Count ) - return null; - - return Children[i]; - } - - public virtual ITree GetFirstChildWithType( int type ) - { - foreach ( ITree child in Children ) - { - if ( child.Type == type ) - return child; - } - - return null; - } - - /** Add t as child of this node. - * - * - * Warning: if t has no children, but child does - * and child isNil then this routine moves children to t via - * t.children = child.children; i.e., without copying the array. - * - */ - public virtual void AddChild( ITree t ) - { - //System.out.println("add child "+t.toStringTree()+" "+this.toStringTree()); - //System.out.println("existing children: "+children); - if ( t == null ) - { - return; // do nothing upon addChild(null) - } - if ( t.IsNil ) - { - // t is an empty node possibly with children - BaseTree childTree = t as BaseTree; - if ( childTree != null && this.Children != null && this.Children == childTree.Children ) - { - throw new Exception( "attempt to add child list to itself" ); - } - // just add all of childTree's children to this - if ( t.ChildCount > 0 ) - { - if ( this.Children != null || childTree == null ) - { - if ( this.Children == null ) - this.Children = CreateChildrenList(); - - // must copy, this has children already - int n = t.ChildCount; - for ( int i = 0; i < n; i++ ) - { - ITree c = t.GetChild( i ); - this.Children.Add( c ); - // handle double-link stuff for each child of nil root - c.Parent = this; - c.ChildIndex = Children.Count - 1; - } - } - else - { - // no children for this but t is a BaseTree with children; - // just set pointer call general freshener routine - this.Children = childTree.Children; - this.FreshenParentAndChildIndexes(); - } - } - } - else - { - // child is not nil (don't care about children) - if ( Children == null ) - { - Children = CreateChildrenList(); // create children list on demand - } - Children.Add( t ); - t.Parent = this; - t.ChildIndex = Children.Count - 1; - } - // System.out.println("now children are: "+children); - } - - /** Add all elements of kids list as children of this node */ - public virtual void AddChildren( IEnumerable kids ) - { - if (kids == null) - throw new ArgumentNullException("kids"); - - foreach ( ITree t in kids ) - AddChild( t ); - } - - public virtual void SetChild( int i, ITree t ) - { - if (i < 0) - throw new ArgumentOutOfRangeException("i"); - - if ( t == null ) - { - return; - } - if ( t.IsNil ) - { - throw new ArgumentException( "Can't set single child to a list" ); - } - if ( Children == null ) - { - Children = CreateChildrenList(); - } - Children[i] = t; - t.Parent = this; - t.ChildIndex = i; - } - - /** Insert child t at child position i (0..n-1) by shifting children - * i+1..n-1 to the right one position. Set parent / indexes properly - * but does NOT collapse nil-rooted t's that come in here like addChild. - */ - public virtual void InsertChild(int i, ITree t) - { - if (i < 0) - throw new ArgumentOutOfRangeException("i"); - if (i > ChildCount) - throw new ArgumentException(); - - if (i == ChildCount) - { - AddChild(t); - return; - } - - Children.Insert(i, t); - - // walk others to increment their child indexes - // set index, parent of this one too - this.FreshenParentAndChildIndexes(i); - } - - public virtual object DeleteChild( int i ) - { - if (i < 0) - throw new ArgumentOutOfRangeException("i"); - if (i >= ChildCount) - throw new ArgumentException(); - - if ( Children == null ) - return null; - - ITree killed = Children[i]; - Children.RemoveAt( i ); - // walk rest and decrement their child indexes - this.FreshenParentAndChildIndexes( i ); - return killed; - } - - /** - * Delete children from start to stop and replace with t even if t is - * a list (nil-root tree). num of children can increase or decrease. - * For huge child lists, inserting children can force walking rest of - * children to set their childindex; could be slow. - * - */ - public virtual void ReplaceChildren( int startChildIndex, int stopChildIndex, object t ) - { - if (startChildIndex < 0) - throw new ArgumentOutOfRangeException(); - if (stopChildIndex < 0) - throw new ArgumentOutOfRangeException(); - if (t == null) - throw new ArgumentNullException("t"); - if (stopChildIndex < startChildIndex) - throw new ArgumentException(); - - /* - System.out.println("replaceChildren "+startChildIndex+", "+stopChildIndex+ - " with "+((BaseTree)t).toStringTree()); - System.out.println("in="+toStringTree()); - */ - if ( Children == null ) - { - throw new ArgumentException( "indexes invalid; no children in list" ); - } - int replacingHowMany = stopChildIndex - startChildIndex + 1; - int replacingWithHowMany; - ITree newTree = (ITree)t; - IList newChildren = null; - // normalize to a list of children to add: newChildren - if ( newTree.IsNil ) - { - BaseTree baseTree = newTree as BaseTree; - if ( baseTree != null && baseTree.Children != null ) - { - newChildren = baseTree.Children; - } - else - { - newChildren = CreateChildrenList(); - int n = newTree.ChildCount; - for ( int i = 0; i < n; i++ ) - newChildren.Add( newTree.GetChild( i ) ); - } - } - else - { - newChildren = new List( 1 ); - newChildren.Add( newTree ); - } - replacingWithHowMany = newChildren.Count; - int numNewChildren = newChildren.Count; - int delta = replacingHowMany - replacingWithHowMany; - // if same number of nodes, do direct replace - if ( delta == 0 ) - { - int j = 0; // index into new children - for ( int i = startChildIndex; i <= stopChildIndex; i++ ) - { - ITree child = newChildren[j]; - Children[i] = child; - child.Parent = this; - child.ChildIndex = i; - j++; - } - } - else if ( delta > 0 ) - { - // fewer new nodes than there were - // set children and then delete extra - for ( int j = 0; j < numNewChildren; j++ ) - { - Children[startChildIndex + j] = newChildren[j]; - } - int indexToDelete = startChildIndex + numNewChildren; - for ( int c = indexToDelete; c <= stopChildIndex; c++ ) - { - // delete same index, shifting everybody down each time - Children.RemoveAt( indexToDelete ); - } - FreshenParentAndChildIndexes( startChildIndex ); - } - else - { - // more new nodes than were there before - // fill in as many children as we can (replacingHowMany) w/o moving data - for ( int j = 0; j < replacingHowMany; j++ ) - { - Children[startChildIndex + j] = newChildren[j]; - } - int numToInsert = replacingWithHowMany - replacingHowMany; - for ( int j = replacingHowMany; j < replacingWithHowMany; j++ ) - { - Children.Insert( startChildIndex + j, newChildren[j] ); - } - FreshenParentAndChildIndexes( startChildIndex ); - } - //System.out.println("out="+toStringTree()); - } - - /** Override in a subclass to change the impl of children list */ - protected virtual IList CreateChildrenList() - { - return new List(); - } - - /** Set the parent and child index values for all child of t */ - public virtual void FreshenParentAndChildIndexes() - { - FreshenParentAndChildIndexes( 0 ); - } - - public virtual void FreshenParentAndChildIndexes( int offset ) - { - int n = ChildCount; - for ( int c = offset; c < n; c++ ) - { - ITree child = GetChild( c ); - child.ChildIndex = c; - child.Parent = this; - } - } - - public virtual void FreshenParentAndChildIndexesDeeply() - { - FreshenParentAndChildIndexesDeeply(0); - } - - public virtual void FreshenParentAndChildIndexesDeeply(int offset) - { - int n = ChildCount; - for (int c = offset; c < n; c++) - { - ITree child = GetChild(c); - child.ChildIndex = c; - child.Parent = this; - BaseTree baseTree = child as BaseTree; - if (baseTree != null) - baseTree.FreshenParentAndChildIndexesDeeply(); - } - } - - public virtual void SanityCheckParentAndChildIndexes() - { - SanityCheckParentAndChildIndexes( null, -1 ); - } - - public virtual void SanityCheckParentAndChildIndexes( ITree parent, int i ) - { - if ( parent != this.Parent ) - { - throw new InvalidOperationException( "parents don't match; expected " + parent + " found " + this.Parent ); - } - if ( i != this.ChildIndex ) - { - throw new InvalidOperationException( "child indexes don't match; expected " + i + " found " + this.ChildIndex ); - } - int n = this.ChildCount; - for ( int c = 0; c < n; c++ ) - { - BaseTree child = (BaseTree)this.GetChild( c ); - child.SanityCheckParentAndChildIndexes( this, c ); - } - } - - /** Walk upwards looking for ancestor with this token type. */ - public virtual bool HasAncestor( int ttype ) - { - return GetAncestor( ttype ) != null; - } - - /** Walk upwards and get first ancestor with this token type. */ - public virtual ITree GetAncestor( int ttype ) - { - ITree t = this; - t = t.Parent; - while ( t != null ) - { - if ( t.Type == ttype ) - return t; - t = t.Parent; - } - return null; - } - - /** - * Return a list of all ancestors of this node. The first node of - * list is the root and the last is the parent of this node. - * - */ - public virtual IList GetAncestors() - { - if ( Parent == null ) - return null; - - List ancestors = new List(); - ITree t = this; - t = t.Parent; - while ( t != null ) - { - ancestors.Insert( 0, t ); // insert at start - t = t.Parent; - } - return ancestors; - } - - /** Print out a whole tree not just a node */ - public virtual string ToStringTree() - { - if ( Children == null || Children.Count == 0 ) - { - return this.ToString(); - } - StringBuilder buf = new StringBuilder(); - if ( !IsNil ) - { - buf.Append( "(" ); - buf.Append( this.ToString() ); - buf.Append( ' ' ); - } - for ( int i = 0; Children != null && i < Children.Count; i++ ) - { - ITree t = Children[i]; - if ( i > 0 ) - { - buf.Append( ' ' ); - } - buf.Append( t.ToStringTree() ); - } - if ( !IsNil ) - { - buf.Append( ")" ); - } - return buf.ToString(); - } - - /** Override to say how a node (not a tree) should look as text */ - public override abstract string ToString(); - - #region Tree Members - public abstract ITree DupNode(); - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs deleted file mode 100644 index d77e031..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs +++ /dev/null @@ -1,517 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using IDictionary = System.Collections.IDictionary; - using NotSupportedException = System.NotSupportedException; - - /** A TreeAdaptor that works with any Tree implementation. */ - public abstract class BaseTreeAdaptor : ITreeAdaptor - { - /** - * System.identityHashCode() is not always unique; we have to - * track ourselves. That's ok, it's only for debugging, though it's - * expensive: we have to create a hashtable with all tree nodes in it. - * - */ - protected IDictionary treeToUniqueIDMap; - protected int uniqueNodeID = 1; - - public virtual object Nil() - { - return Create( null ); - } - - /** - * Create tree node that holds the start and stop tokens associated - * with an error. - * - * - * - * If you specify your own kind of tree nodes, you will likely have to - * override this method. CommonTree returns Token.INVALID_TOKEN_TYPE - * if no token payload but you might have to set token type for diff - * node type. - * - * You don't have to subclass CommonErrorNode; you will likely need to - * subclass your own tree node class to avoid class cast exception. - * - */ - public virtual object ErrorNode( ITokenStream input, IToken start, IToken stop, - RecognitionException e ) - { - CommonErrorNode t = new CommonErrorNode( input, start, stop, e ); - //System.out.println("returning error node '"+t+"' @index="+input.index()); - return t; - } - - public virtual bool IsNil( object tree ) - { - return ( (ITree)tree ).IsNil; - } - - public virtual object DupNode(int type, object treeNode) - { - object t = DupNode(treeNode); - SetType(t, type); - return t; - } - - public virtual object DupNode(object treeNode, string text) - { - object t = DupNode(treeNode); - SetText(t, text); - return t; - } - - public virtual object DupNode(int type, object treeNode, string text) - { - object t = DupNode(treeNode); - SetType(t, type); - SetText(t, text); - return t; - } - - public virtual object DupTree( object tree ) - { - return DupTree( tree, null ); - } - - /** - * This is generic in the sense that it will work with any kind of - * tree (not just ITree interface). It invokes the adaptor routines - * not the tree node routines to do the construction. - * - */ - public virtual object DupTree( object t, object parent ) - { - if ( t == null ) - { - return null; - } - object newTree = DupNode( t ); - // ensure new subtree root has parent/child index set - SetChildIndex( newTree, GetChildIndex( t ) ); // same index in new tree - SetParent( newTree, parent ); - int n = GetChildCount( t ); - for ( int i = 0; i < n; i++ ) - { - object child = GetChild( t, i ); - object newSubTree = DupTree( child, t ); - AddChild( newTree, newSubTree ); - } - return newTree; - } - - /** - * Add a child to the tree t. If child is a flat tree (a list), make all - * in list children of t. Warning: if t has no children, but child does - * and child isNil then you can decide it is ok to move children to t via - * t.children = child.children; i.e., without copying the array. Just - * make sure that this is consistent with have the user will build - * ASTs. - * - */ - public virtual void AddChild( object t, object child ) - { - if ( t != null && child != null ) - { - ( (ITree)t ).AddChild( (ITree)child ); - } - } - - /** - * If oldRoot is a nil root, just copy or move the children to newRoot. - * If not a nil root, make oldRoot a child of newRoot. - * - * - * - * old=^(nil a b c), new=r yields ^(r a b c) - * old=^(a b c), new=r yields ^(r ^(a b c)) - * - * If newRoot is a nil-rooted single child tree, use the single - * child as the new root node. - * - * old=^(nil a b c), new=^(nil r) yields ^(r a b c) - * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) - * - * If oldRoot was null, it's ok, just return newRoot (even if isNil). - * - * old=null, new=r yields r - * old=null, new=^(nil r) yields ^(nil r) - * - * Return newRoot. Throw an exception if newRoot is not a - * simple node or nil root with a single child node--it must be a root - * node. If newRoot is ^(nil x) return x as newRoot. - * - * Be advised that it's ok for newRoot to point at oldRoot's - * children; i.e., you don't have to copy the list. We are - * constructing these nodes so we should have this control for - * efficiency. - * - */ - public virtual object BecomeRoot( object newRoot, object oldRoot ) - { - //System.out.println("becomeroot new "+newRoot.toString()+" old "+oldRoot); - ITree newRootTree = (ITree)newRoot; - ITree oldRootTree = (ITree)oldRoot; - if ( oldRoot == null ) - { - return newRoot; - } - // handle ^(nil real-node) - if ( newRootTree.IsNil ) - { - int nc = newRootTree.ChildCount; - if ( nc == 1 ) - newRootTree = (ITree)newRootTree.GetChild( 0 ); - else if ( nc > 1 ) - { - // TODO: make tree run time exceptions hierarchy - throw new Exception( "more than one node as root (TODO: make exception hierarchy)" ); - } - } - // add oldRoot to newRoot; addChild takes care of case where oldRoot - // is a flat list (i.e., nil-rooted tree). All children of oldRoot - // are added to newRoot. - newRootTree.AddChild( oldRootTree ); - return newRootTree; - } - - /** Transform ^(nil x) to x and nil to null */ - public virtual object RulePostProcessing( object root ) - { - //System.out.println("rulePostProcessing: "+((Tree)root).toStringTree()); - ITree r = (ITree)root; - if ( r != null && r.IsNil ) - { - if ( r.ChildCount == 0 ) - { - r = null; - } - else if ( r.ChildCount == 1 ) - { - r = (ITree)r.GetChild( 0 ); - // whoever invokes rule will set parent and child index - r.Parent = null; - r.ChildIndex = -1; - } - } - return r; - } - - public virtual object BecomeRoot( IToken newRoot, object oldRoot ) - { - return BecomeRoot( Create( newRoot ), oldRoot ); - } - - public virtual object Create( int tokenType, IToken fromToken ) - { - fromToken = CreateToken( fromToken ); - fromToken.Type = tokenType; - object t = Create( fromToken ); - return t; - } - - public virtual object Create( int tokenType, IToken fromToken, string text ) - { - if ( fromToken == null ) - return Create( tokenType, text ); - - fromToken = CreateToken( fromToken ); - fromToken.Type = tokenType; - fromToken.Text = text; - object result = Create(fromToken); - return result; - } - - public virtual object Create(IToken fromToken, string text) - { - if (fromToken == null) - throw new ArgumentNullException("fromToken"); - - fromToken = CreateToken(fromToken); - fromToken.Text = text; - object result = Create(fromToken); - return result; - } - - public virtual object Create( int tokenType, string text ) - { - IToken fromToken = CreateToken( tokenType, text ); - object t = Create( fromToken ); - return t; - } - - public virtual int GetType( object t ) - { - ITree tree = GetTree(t); - if (tree == null) - return TokenTypes.Invalid; - - return tree.Type; - } - - public virtual void SetType( object t, int type ) - { - throw new NotSupportedException( "don't know enough about Tree node" ); - } - - public virtual string GetText( object t ) - { - ITree tree = GetTree(t); - if (tree == null) - return null; - - return tree.Text; - } - - public virtual void SetText( object t, string text ) - { - throw new NotSupportedException( "don't know enough about Tree node" ); - } - - public virtual object GetChild( object t, int i ) - { - ITree tree = GetTree(t); - if (tree == null) - return null; - - return tree.GetChild(i); - } - - public virtual void SetChild( object t, int i, object child ) - { - ITree tree = GetTree(t); - if (tree == null) - return; - - ITree childTree = GetTree(child); - tree.SetChild(i, childTree); - } - - public virtual object DeleteChild( object t, int i ) - { - return ( (ITree)t ).DeleteChild( i ); - } - - public virtual int GetChildCount( object t ) - { - ITree tree = GetTree(t); - if (tree == null) - return 0; - - return tree.ChildCount; - } - - public virtual int GetUniqueID( object node ) - { - if ( treeToUniqueIDMap == null ) - { - treeToUniqueIDMap = new Dictionary(); - } - int id; - if ( treeToUniqueIDMap.TryGetValue( node, out id ) ) - return id; - - id = uniqueNodeID; - treeToUniqueIDMap[node] = id; - uniqueNodeID++; - return id; - // GC makes these nonunique: - // return System.identityHashCode(node); - } - - /** - * Tell me how to create a token for use with imaginary token nodes. - * For example, there is probably no input symbol associated with imaginary - * token DECL, but you need to create it as a payload or whatever for - * the DECL node as in ^(DECL type ID). - * - * - * - * If you care what the token payload objects' type is, you should - * override this method and any other createToken variant. - * - */ - public abstract IToken CreateToken( int tokenType, string text ); - - /** - * Tell me how to create a token for use with imaginary token nodes. - * For example, there is probably no input symbol associated with imaginary - * token DECL, but you need to create it as a payload or whatever for - * the DECL node as in ^(DECL type ID). - * - * - * - * This is a variant of createToken where the new token is derived from - * an actual real input token. Typically this is for converting '{' - * tokens to BLOCK etc... You'll see - * - * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; - * - * If you care what the token payload objects' type is, you should - * override this method and any other createToken variant. - * - */ - public abstract IToken CreateToken( IToken fromToken ); - - public abstract object Create( IToken payload ); - - /** - * Duplicate a node. This is part of the factory; - * override if you want another kind of node to be built. - * - * - * - * I could use reflection to prevent having to override this - * but reflection is slow. - * - */ - public virtual object DupNode(object treeNode) - { - ITree tree = GetTree(treeNode); - if (tree == null) - return null; - - return tree.DupNode(); - } - - public abstract IToken GetToken( object t ); - - /** - * Track start/stop token for subtree root created for a rule. - * Only works with Tree nodes. For rules that match nothing, - * seems like this will yield start=i and stop=i-1 in a nil node. - * Might be useful info so I'll not force to be i..i. - * - */ - public virtual void SetTokenBoundaries(object t, IToken startToken, IToken stopToken) - { - ITree tree = GetTree(t); - if (tree == null) - return; - - int start = 0; - int stop = 0; - - if (startToken != null) - start = startToken.TokenIndex; - if (stopToken != null) - stop = stopToken.TokenIndex; - - tree.TokenStartIndex = start; - tree.TokenStopIndex = stop; - } - - public virtual int GetTokenStartIndex(object t) - { - ITree tree = GetTree(t); - if (tree == null) - return -1; - - return tree.TokenStartIndex; - } - - public virtual int GetTokenStopIndex(object t) - { - ITree tree = GetTree(t); - if (tree == null) - return -1; - - return tree.TokenStopIndex; - } - - public virtual object GetParent(object t) - { - ITree tree = GetTree(t); - if (tree == null) - return null; - - return tree.Parent; - } - - public virtual void SetParent(object t, object parent) - { - ITree tree = GetTree(t); - if (tree == null) - return; - - ITree parentTree = GetTree(parent); - tree.Parent = parentTree; - } - - public virtual int GetChildIndex(object t) - { - ITree tree = GetTree(t); - if (tree == null) - return 0; - - return tree.ChildIndex; - } - - public virtual void SetChildIndex(object t, int index) - { - ITree tree = GetTree(t); - if (tree == null) - return; - - tree.ChildIndex = index; - } - - public virtual void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) - { - ITree tree = GetTree(parent); - if (tree == null) - return; - - tree.ReplaceChildren(startChildIndex, stopChildIndex, t); - } - - protected virtual ITree GetTree(object t) - { - if (t == null) - return null; - - ITree tree = t as ITree; - if (tree == null) - throw new NotSupportedException(); - - return tree; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs deleted file mode 100644 index 3b5a01e..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs +++ /dev/null @@ -1,663 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - using Console = System.Console; - using IList = System.Collections.IList; - using InvalidOperationException = System.InvalidOperationException; - using StringBuilder = System.Text.StringBuilder; - - /** A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. - * - * This node stream sucks all nodes out of the tree specified in - * the constructor during construction and makes pointers into - * the tree using an array of Object pointers. The stream necessarily - * includes pointers to DOWN and UP and EOF nodes. - * - * This stream knows how to mark/release for backtracking. - * - * This stream is most suitable for tree interpreters that need to - * jump around a lot or for tree parsers requiring speed (at cost of memory). - * There is some duplicated functionality here with UnBufferedTreeNodeStream - * but just in bookkeeping, not tree walking etc... - * - * TARGET DEVELOPERS: - * - * This is the old CommonTreeNodeStream that buffered up entire node stream. - * No need to implement really as new CommonTreeNodeStream is much better - * and covers what we need. - * - * @see CommonTreeNodeStream - */ - public class BufferedTreeNodeStream : ITreeNodeStream, ITokenStreamInformation - { - public const int DEFAULT_INITIAL_BUFFER_SIZE = 100; - public const int INITIAL_CALL_STACK_SIZE = 10; - - protected sealed class StreamIterator : IEnumerator - { - BufferedTreeNodeStream _outer; - int _index; - - public StreamIterator( BufferedTreeNodeStream outer ) - { - _outer = outer; - _index = -1; - } - - #region IEnumerator Members - - public object Current - { - get - { - if ( _index < _outer.nodes.Count ) - return _outer.nodes[_index]; - - return _outer.eof; - } - } - - #endregion - - #region IDisposable Members - - public void Dispose() - { - } - - #endregion - - #region IEnumerator Members - - public bool MoveNext() - { - if ( _index < _outer.nodes.Count ) - _index++; - - return _index < _outer.nodes.Count; - } - - public void Reset() - { - _index = -1; - } - - #endregion - } - - // all these navigation nodes are shared and hence they - // cannot contain any line/column info - - protected object down; - protected object up; - protected object eof; - - /** The complete mapping from stream index to tree node. - * This buffer includes pointers to DOWN, UP, and EOF nodes. - * It is built upon ctor invocation. The elements are type - * Object as we don't what the trees look like. - * - * Load upon first need of the buffer so we can set token types - * of interest for reverseIndexing. Slows us down a wee bit to - * do all of the if p==-1 testing everywhere though. - */ - protected IList nodes; - - /** Pull nodes from which tree? */ - protected object root; - - /** IF this tree (root) was created from a token stream, track it. */ - protected ITokenStream tokens; - - /** What tree adaptor was used to build these trees */ - ITreeAdaptor adaptor; - - /** Reuse same DOWN, UP navigation nodes unless this is true */ - bool uniqueNavigationNodes = false; - - /** The index into the nodes list of the current node (next node - * to consume). If -1, nodes array not filled yet. - */ - protected int p = -1; - - /** Track the last mark() call result value for use in rewind(). */ - protected int lastMarker; - - /** Stack of indexes used for push/pop calls */ - protected Stack calls; - - public BufferedTreeNodeStream( object tree ) - : this( new CommonTreeAdaptor(), tree ) - { - } - - public BufferedTreeNodeStream( ITreeAdaptor adaptor, object tree ) - : this( adaptor, tree, DEFAULT_INITIAL_BUFFER_SIZE ) - { - } - - public BufferedTreeNodeStream( ITreeAdaptor adaptor, object tree, int initialBufferSize ) - { - this.root = tree; - this.adaptor = adaptor; - nodes = new List( initialBufferSize ); - down = adaptor.Create( TokenTypes.Down, "DOWN" ); - up = adaptor.Create( TokenTypes.Up, "UP" ); - eof = adaptor.Create( TokenTypes.EndOfFile, "EOF" ); - } - - #region Properties - - public virtual int Count - { - get - { - if ( p == -1 ) - { - throw new InvalidOperationException( "Cannot determine the Count before the buffer is filled." ); - } - return nodes.Count; - } - } - - public virtual object TreeSource - { - get - { - return root; - } - } - - public virtual string SourceName - { - get - { - return TokenStream.SourceName; - } - } - - public virtual ITokenStream TokenStream - { - get - { - return tokens; - } - set - { - tokens = value; - } - } - - public virtual ITreeAdaptor TreeAdaptor - { - get - { - return adaptor; - } - set - { - adaptor = value; - } - } - - public virtual bool UniqueNavigationNodes - { - get - { - return uniqueNavigationNodes; - } - set - { - uniqueNavigationNodes = value; - } - } - - public virtual IToken LastToken - { - get - { - return TreeAdaptor.GetToken(LB(1)); - } - } - - public virtual IToken LastRealToken - { - get - { - int i = 0; - IToken token; - do - { - i++; - token = TreeAdaptor.GetToken(LB(i)); - } while (token != null && token.Line <= 0); - - return token; - } - } - - public virtual int MaxLookBehind - { - get - { - return int.MaxValue; - } - } - - #endregion - - /** Walk tree with depth-first-search and fill nodes buffer. - * Don't do DOWN, UP nodes if its a list (t is isNil). - */ - protected virtual void FillBuffer() - { - FillBuffer( root ); - //Console.Out.WriteLine( "revIndex=" + tokenTypeToStreamIndexesMap ); - p = 0; // buffer of nodes intialized now - } - - public virtual void FillBuffer( object t ) - { - bool nil = adaptor.IsNil( t ); - if ( !nil ) - { - nodes.Add( t ); // add this node - } - // add DOWN node if t has children - int n = adaptor.GetChildCount( t ); - if ( !nil && n > 0 ) - { - AddNavigationNode( TokenTypes.Down ); - } - // and now add all its children - for ( int c = 0; c < n; c++ ) - { - object child = adaptor.GetChild( t, c ); - FillBuffer( child ); - } - // add UP node if t has children - if ( !nil && n > 0 ) - { - AddNavigationNode( TokenTypes.Up ); - } - } - - /** What is the stream index for node? 0..n-1 - * Return -1 if node not found. - */ - protected virtual int GetNodeIndex( object node ) - { - if ( p == -1 ) - { - FillBuffer(); - } - for ( int i = 0; i < nodes.Count; i++ ) - { - object t = nodes[i]; - if ( t == node ) - { - return i; - } - } - return -1; - } - - /** As we flatten the tree, we use UP, DOWN nodes to represent - * the tree structure. When debugging we need unique nodes - * so instantiate new ones when uniqueNavigationNodes is true. - */ - protected virtual void AddNavigationNode( int ttype ) - { - object navNode = null; - if ( ttype == TokenTypes.Down ) - { - if ( UniqueNavigationNodes ) - { - navNode = adaptor.Create( TokenTypes.Down, "DOWN" ); - } - else - { - navNode = down; - } - } - else - { - if ( UniqueNavigationNodes ) - { - navNode = adaptor.Create( TokenTypes.Up, "UP" ); - } - else - { - navNode = up; - } - } - nodes.Add( navNode ); - } - - public virtual object this[int i] - { - get - { - if ( p == -1 ) - { - throw new InvalidOperationException( "Cannot get the node at index i before the buffer is filled." ); - } - return nodes[i]; - } - } - - public virtual object LT( int k ) - { - if ( p == -1 ) - { - FillBuffer(); - } - if ( k == 0 ) - { - return null; - } - if ( k < 0 ) - { - return LB( -k ); - } - //System.out.print("LT(p="+p+","+k+")="); - if ( ( p + k - 1 ) >= nodes.Count ) - { - return eof; - } - return nodes[p + k - 1]; - } - - public virtual object GetCurrentSymbol() - { - return LT( 1 ); - } - -#if false - public virtual object getLastTreeNode() - { - int i = Index; - if ( i >= size() ) - { - i--; // if at EOF, have to start one back - } - Console.Out.WriteLine( "start last node: " + i + " size==" + nodes.Count ); - while ( i >= 0 && - ( adaptor.getType( this[i] ) == TokenTypes.EOF || - adaptor.getType( this[i] ) == TokenTypes.UP || - adaptor.getType( this[i] ) == TokenTypes.DOWN ) ) - { - i--; - } - Console.Out.WriteLine( "stop at node: " + i + " " + nodes[i] ); - return nodes[i]; - } -#endif - - /** Look backwards k nodes */ - protected virtual object LB( int k ) - { - if ( k == 0 ) - { - return null; - } - if ( ( p - k ) < 0 ) - { - return null; - } - return nodes[p - k]; - } - - public virtual void Consume() - { - if ( p == -1 ) - { - FillBuffer(); - } - p++; - } - - public virtual int LA( int i ) - { - return adaptor.GetType( LT( i ) ); - } - - public virtual int Mark() - { - if ( p == -1 ) - { - FillBuffer(); - } - lastMarker = Index; - return lastMarker; - } - - public virtual void Release( int marker ) - { - // no resources to release - } - - public virtual int Index - { - get - { - return p; - } - } - - public virtual void Rewind( int marker ) - { - Seek( marker ); - } - - public virtual void Rewind() - { - Seek( lastMarker ); - } - - public virtual void Seek( int index ) - { - if ( p == -1 ) - { - FillBuffer(); - } - p = index; - } - - /** - * Make stream jump to a new location, saving old location. - * Switch back with pop(). - * - */ - public virtual void Push( int index ) - { - if ( calls == null ) - { - calls = new Stack(); - } - calls.Push( p ); // save current index - Seek( index ); - } - - /** - * Seek back to previous index saved during last push() call. - * Return top of stack (return index). - * - */ - public virtual int Pop() - { - int ret = calls.Pop(); - Seek( ret ); - return ret; - } - - public virtual void Reset() - { - p = 0; - lastMarker = 0; - if ( calls != null ) - { - calls.Clear(); - } - } - - public virtual IEnumerator Iterator() - { - if ( p == -1 ) - { - FillBuffer(); - } - - return new StreamIterator( this ); - } - - // TREE REWRITE INTERFACE - - public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) - { - if ( parent != null ) - { - adaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); - } - } - - /** Used for testing, just return the token type stream */ - public virtual string ToTokenTypeString() - { - if ( p == -1 ) - { - FillBuffer(); - } - StringBuilder buf = new StringBuilder(); - for ( int i = 0; i < nodes.Count; i++ ) - { - object t = nodes[i]; - buf.Append( " " ); - buf.Append( adaptor.GetType( t ) ); - } - return buf.ToString(); - } - - /** Debugging */ - public virtual string ToTokenString( int start, int stop ) - { - if ( p == -1 ) - { - FillBuffer(); - } - StringBuilder buf = new StringBuilder(); - for ( int i = start; i < nodes.Count && i <= stop; i++ ) - { - object t = nodes[i]; - buf.Append( " " ); - buf.Append( adaptor.GetToken( t ) ); - } - return buf.ToString(); - } - - public virtual string ToString( object start, object stop ) - { - Console.Out.WriteLine( "toString" ); - if ( start == null || stop == null ) - { - return null; - } - if ( p == -1 ) - { - throw new InvalidOperationException( "Buffer is not yet filled." ); - } - //Console.Out.WriteLine( "stop: " + stop ); - if ( start is CommonTree ) - Console.Out.Write( "toString: " + ( (CommonTree)start ).Token + ", " ); - else - Console.Out.WriteLine( start ); - if ( stop is CommonTree ) - Console.Out.WriteLine( ( (CommonTree)stop ).Token ); - else - Console.Out.WriteLine( stop ); - // if we have the token stream, use that to dump text in order - if ( tokens != null ) - { - int beginTokenIndex = adaptor.GetTokenStartIndex( start ); - int endTokenIndex = adaptor.GetTokenStopIndex( stop ); - // if it's a tree, use start/stop index from start node - // else use token range from start/stop nodes - if ( adaptor.GetType( stop ) == TokenTypes.Up ) - { - endTokenIndex = adaptor.GetTokenStopIndex( start ); - } - else if ( adaptor.GetType( stop ) == TokenTypes.EndOfFile ) - { - endTokenIndex = Count - 2; // don't use EOF - } - return tokens.ToString( beginTokenIndex, endTokenIndex ); - } - // walk nodes looking for start - object t = null; - int i = 0; - for ( ; i < nodes.Count; i++ ) - { - t = nodes[i]; - if ( t == start ) - { - break; - } - } - // now walk until we see stop, filling string buffer with text - StringBuilder buf = new StringBuilder(); - t = nodes[i]; - while ( t != stop ) - { - string text = adaptor.GetText( t ); - if ( text == null ) - { - text = " " + adaptor.GetType( t ).ToString(); - } - buf.Append( text ); - i++; - t = nodes[i]; - } - // include stop node too - string text2 = adaptor.GetText( stop ); - if ( text2 == null ) - { - text2 = " " + adaptor.GetType( stop ).ToString(); - } - buf.Append( text2 ); - return buf.ToString(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs deleted file mode 100644 index 3bd9138..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs +++ /dev/null @@ -1,142 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - - /** A node representing erroneous token range in token stream */ - [System.Serializable] - public class CommonErrorNode : CommonTree - { - public IIntStream input; - public IToken start; - public IToken stop; - public RecognitionException trappedException; - - public CommonErrorNode( ITokenStream input, IToken start, IToken stop, - RecognitionException e ) - { - //System.out.println("start: "+start+", stop: "+stop); - if ( stop == null || - ( stop.TokenIndex < start.TokenIndex && - stop.Type != TokenTypes.EndOfFile ) ) - { - // sometimes resync does not consume a token (when LT(1) is - // in follow set. So, stop will be 1 to left to start. adjust. - // Also handle case where start is the first token and no token - // is consumed during recovery; LT(-1) will return null. - stop = start; - } - this.input = input; - this.start = start; - this.stop = stop; - this.trappedException = e; - } - - #region Properties - public override bool IsNil - { - get - { - return false; - } - } - public override string Text - { - get - { - string badText = null; - if ( start is IToken ) - { - int i = ( (IToken)start ).TokenIndex; - int j = ( (IToken)stop ).TokenIndex; - if ( ( (IToken)stop ).Type == TokenTypes.EndOfFile ) - { - j = ( (ITokenStream)input ).Count; - } - badText = ( (ITokenStream)input ).ToString( i, j ); - } - else if ( start is ITree ) - { - badText = ( (ITreeNodeStream)input ).ToString( start, stop ); - } - else - { - // people should subclass if they alter the tree type so this - // next one is for sure correct. - badText = ""; - } - return badText; - } - set - { - } - } - public override int Type - { - get - { - return TokenTypes.Invalid; - } - set - { - } - } - #endregion - - public override string ToString() - { - if ( trappedException is MissingTokenException ) - { - return ""; - } - else if ( trappedException is UnwantedTokenException ) - { - return ""; - } - else if ( trappedException is MismatchedTokenException ) - { - return ""; - } - else if ( trappedException is NoViableAltException ) - { - return ""; - } - return ""; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs deleted file mode 100644 index 33f9bda..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs +++ /dev/null @@ -1,296 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using ArgumentNullException = System.ArgumentNullException; - - /** - * A tree node that is wrapper for a Token object. After 3.0 release - * while building tree rewrite stuff, it became clear that computing - * parent and child index is very difficult and cumbersome. Better to - * spend the space in every tree node. If you don't want these extra - * fields, it's easy to cut them out in your own BaseTree subclass. - * - */ - [System.Serializable] - public class CommonTree : BaseTree - { - /** A single token is the payload */ - private IToken _token; - - /** - * What token indexes bracket all tokens associated with this node - * and below? - * - */ - protected int startIndex = -1; - protected int stopIndex = -1; - - /** Who is the parent node of this node; if null, implies node is root */ - CommonTree parent; - - /** What index is this node in the child list? Range: 0..n-1 */ - int childIndex = -1; - - public CommonTree() - { - } - - public CommonTree( CommonTree node ) - : base( node ) - { - if (node == null) - throw new ArgumentNullException("node"); - - this.Token = node.Token; - this.startIndex = node.startIndex; - this.stopIndex = node.stopIndex; - } - - public CommonTree( IToken t ) - { - this.Token = t; - } - - #region Properties - - public override int CharPositionInLine - { - get - { - if ( Token == null || Token.CharPositionInLine == -1 ) - { - if ( ChildCount > 0 ) - return Children[0].CharPositionInLine; - - return 0; - } - return Token.CharPositionInLine; - } - - set - { - base.CharPositionInLine = value; - } - } - - public override int ChildIndex - { - get - { - return childIndex; - } - - set - { - childIndex = value; - } - } - - public override bool IsNil - { - get - { - return Token == null; - } - } - - public override int Line - { - get - { - if ( Token == null || Token.Line == 0 ) - { - if ( ChildCount > 0 ) - return Children[0].Line; - - return 0; - } - - return Token.Line; - } - - set - { - base.Line = value; - } - } - - public override ITree Parent - { - get - { - return parent; - } - - set - { - parent = (CommonTree)value; - } - } - - public override string Text - { - get - { - if ( Token == null ) - return null; - - return Token.Text; - } - - set - { - } - } - - public IToken Token - { - get - { - return _token; - } - - set - { - _token = value; - } - } - - public override int TokenStartIndex - { - get - { - if ( startIndex == -1 && Token != null ) - return Token.TokenIndex; - - return startIndex; - } - - set - { - startIndex = value; - } - } - - public override int TokenStopIndex - { - get - { - if ( stopIndex == -1 && Token != null ) - { - return Token.TokenIndex; - } - return stopIndex; - } - - set - { - stopIndex = value; - } - } - - public override int Type - { - get - { - if ( Token == null ) - return TokenTypes.Invalid; - - return Token.Type; - } - - set - { - } - } - - #endregion - - public override ITree DupNode() - { - return new CommonTree( this ); - } - - /** - * For every node in this subtree, make sure it's start/stop token's - * are set. Walk depth first, visit bottom up. Only updates nodes - * with at least one token index < 0. - * - */ - public virtual void SetUnknownTokenBoundaries() - { - if ( Children == null ) - { - if ( startIndex < 0 || stopIndex < 0 ) - startIndex = stopIndex = Token.TokenIndex; - - return; - } - - foreach (ITree childTree in Children) - { - CommonTree commonTree = childTree as CommonTree; - if (commonTree == null) - continue; - - commonTree.SetUnknownTokenBoundaries(); - } - - if ( startIndex >= 0 && stopIndex >= 0 ) - return; // already set - - if ( Children.Count > 0 ) - { - ITree firstChild = Children[0]; - ITree lastChild = Children[Children.Count - 1]; - startIndex = firstChild.TokenStartIndex; - stopIndex = lastChild.TokenStopIndex; - } - } - - public override string ToString() - { - if (IsNil) - return "nil"; - - if (Type == TokenTypes.Invalid) - return ""; - - if (Token == null) - return string.Empty; - - return Token.Text; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs deleted file mode 100644 index 18c7505..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs +++ /dev/null @@ -1,112 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - - /** - * A TreeAdaptor that works with any Tree implementation. It provides - * really just factory methods; all the work is done by BaseTreeAdaptor. - * If you would like to have different tokens created than ClassicToken - * objects, you need to override this and then set the parser tree adaptor to - * use your subclass. - * - * - * - * To get your parser to build nodes of a different type, override - * create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). - * dupNode is called to duplicate nodes during rewrite operations. - * - */ - public class CommonTreeAdaptor : BaseTreeAdaptor - { - public override object Create( IToken payload ) - { - return new CommonTree( payload ); - } - - /** - * Tell me how to create a token for use with imaginary token nodes. - * For example, there is probably no input symbol associated with imaginary - * token DECL, but you need to create it as a payload or whatever for - * the DECL node as in ^(DECL type ID). - * - * - * - * If you care what the token payload objects' type is, you should - * override this method and any other createToken variant. - * - */ - public override IToken CreateToken( int tokenType, string text ) - { - return new CommonToken( tokenType, text ); - } - - /** - * Tell me how to create a token for use with imaginary token nodes. - * For example, there is probably no input symbol associated with imaginary - * token DECL, but you need to create it as a payload or whatever for - * the DECL node as in ^(DECL type ID). - * - * - * - * This is a variant of createToken where the new token is derived from - * an actual real input token. Typically this is for converting '{' - * tokens to BLOCK etc... You'll see - * - * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; - * - * If you care what the token payload objects' type is, you should - * override this method and any other createToken variant. - * - */ - public override IToken CreateToken( IToken fromToken ) - { - return new CommonToken( fromToken ); - } - - /** - * What is the Token associated with this node? If - * you are not using CommonTree, then you must - * override this in your own adaptor. - * - */ - public override IToken GetToken( object t ) - { - if ( t is CommonTree ) - { - return ( (CommonTree)t ).Token; - } - return null; // no idea what to do - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs deleted file mode 100644 index f9cb0a7..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs +++ /dev/null @@ -1,312 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - using Antlr.Runtime.Misc; - - using StringBuilder = System.Text.StringBuilder; - - [System.Serializable] - public class CommonTreeNodeStream : LookaheadStream, ITreeNodeStream, IPositionTrackingStream - { - public const int DEFAULT_INITIAL_BUFFER_SIZE = 100; - public const int INITIAL_CALL_STACK_SIZE = 10; - - /** Pull nodes from which tree? */ - private readonly object _root; - - /** If this tree (root) was created from a token stream, track it. */ - protected ITokenStream tokens; - - /** What tree adaptor was used to build these trees */ - [System.NonSerialized] - private ITreeAdaptor _adaptor; - - /** The tree iterator we are using */ - private readonly TreeIterator _it; - - /** Stack of indexes used for push/pop calls */ - private Stack _calls; - - /** Tree (nil A B C) trees like flat A B C streams */ - private bool _hasNilRoot = false; - - /** Tracks tree depth. Level=0 means we're at root node level. */ - private int _level = 0; - - /** - * Tracks the last node before the start of {@link #data} which contains - * position information to provide information for error reporting. This is - * tracked in addition to {@link #prevElement} which may or may not contain - * position information. - * - * @see #hasPositionInformation - * @see RecognitionException#extractInformationFromTreeNodeStream - */ - private object _previousLocationElement; - - public CommonTreeNodeStream( object tree ) - : this( new CommonTreeAdaptor(), tree ) - { - } - - public CommonTreeNodeStream( ITreeAdaptor adaptor, object tree ) - { - this._root = tree; - this._adaptor = adaptor; - _it = new TreeIterator( adaptor, _root ); - } - - #region Properties - - public virtual string SourceName - { - get - { - if ( TokenStream == null ) - return null; - - return TokenStream.SourceName; - } - } - - public virtual ITokenStream TokenStream - { - get - { - return tokens; - } - - set - { - tokens = value; - } - } - - public virtual ITreeAdaptor TreeAdaptor - { - get - { - return _adaptor; - } - - set - { - _adaptor = value; - } - } - - public virtual object TreeSource - { - get - { - return _root; - } - } - - public virtual bool UniqueNavigationNodes - { - get - { - return false; - } - - set - { - } - } - - #endregion - - public override void Reset() - { - base.Reset(); - _it.Reset(); - _hasNilRoot = false; - _level = 0; - _previousLocationElement = null; - if ( _calls != null ) - _calls.Clear(); - } - - public override object NextElement() - { - _it.MoveNext(); - object t = _it.Current; - //System.out.println("pulled "+adaptor.getType(t)); - if ( t == _it.up ) - { - _level--; - if ( _level == 0 && _hasNilRoot ) - { - _it.MoveNext(); - return _it.Current; // don't give last UP; get EOF - } - } - else if ( t == _it.down ) - { - _level++; - } - - if ( _level == 0 && TreeAdaptor.IsNil( t ) ) - { - // if nil root, scarf nil, DOWN - _hasNilRoot = true; - _it.MoveNext(); - t = _it.Current; // t is now DOWN, so get first real node next - _level++; - _it.MoveNext(); - t = _it.Current; - } - - return t; - } - - public override object Dequeue() - { - object result = base.Dequeue(); - if (_p == 0 && HasPositionInformation(PreviousElement)) - _previousLocationElement = PreviousElement; - - return result; - } - - public override bool IsEndOfFile(object o) - { - return TreeAdaptor.GetType(o) == CharStreamConstants.EndOfFile; - } - - public virtual int LA( int i ) - { - return TreeAdaptor.GetType( LT( i ) ); - } - - /** Make stream jump to a new location, saving old location. - * Switch back with pop(). - */ - public virtual void Push( int index ) - { - if ( _calls == null ) - _calls = new Stack(); - - _calls.Push( _p ); // save current index - Seek( index ); - } - - /** Seek back to previous index saved during last push() call. - * Return top of stack (return index). - */ - public virtual int Pop() - { - int ret = _calls.Pop(); - Seek( ret ); - return ret; - } - - /** - * Returns an element containing position information. If {@code allowApproximateLocation} is {@code false}, then - * this method will return the {@code LT(1)} element if it contains position information, and otherwise return {@code null}. - * If {@code allowApproximateLocation} is {@code true}, then this method will return the last known element containing position information. - * - * @see #hasPositionInformation - */ - public object GetKnownPositionElement(bool allowApproximateLocation) - { - object node = _data[_p]; - if (HasPositionInformation(node)) - return node; - - if (!allowApproximateLocation) - return null; - - for (int index = _p - 1; index >= 0; index--) - { - node = _data[index]; - if (HasPositionInformation(node)) - return node; - } - - return _previousLocationElement; - } - - public bool HasPositionInformation(object node) - { - IToken token = TreeAdaptor.GetToken(node); - if (token == null) - return false; - - if (token.Line <= 0) - return false; - - return true; - } - - #region Tree rewrite interface - - public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) - { - if ( parent != null ) - { - TreeAdaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); - } - } - - #endregion - - public virtual string ToString( object start, object stop ) - { - // we'll have to walk from start to stop in tree; we're not keeping - // a complete node stream buffer - return "n/a"; - } - - /** For debugging; destructive: moves tree iterator to end. */ - public virtual string ToTokenTypeString() - { - Reset(); - StringBuilder buf = new StringBuilder(); - object o = LT( 1 ); - int type = TreeAdaptor.GetType( o ); - while ( type != TokenTypes.EndOfFile ) - { - buf.Append( " " ); - buf.Append( type ); - Consume(); - o = LT( 1 ); - type = TreeAdaptor.GetType( o ); - } - return buf.ToString(); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/DotTreeGenerator.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/DotTreeGenerator.cs deleted file mode 100644 index 8a35b45..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/DotTreeGenerator.cs +++ /dev/null @@ -1,216 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - using StringBuilder = System.Text.StringBuilder; - - /** A utility class to generate DOT diagrams (graphviz) from - * arbitrary trees. You can pass in your own templates and - * can pass in any kind of tree or use Tree interface method. - * I wanted this separator so that you don't have to include - * ST just to use the org.antlr.runtime.tree.* package. - * This is a set of non-static methods so you can subclass - * to override. For example, here is an invocation: - * - * CharStream input = new ANTLRInputStream(System.in); - * TLexer lex = new TLexer(input); - * CommonTokenStream tokens = new CommonTokenStream(lex); - * TParser parser = new TParser(tokens); - * TParser.e_return r = parser.e(); - * Tree t = (Tree)r.tree; - * System.out.println(t.toStringTree()); - * DOTTreeGenerator gen = new DOTTreeGenerator(); - * StringTemplate st = gen.toDOT(t); - * System.out.println(st); - */ - public class DotTreeGenerator - { - readonly string[] HeaderLines = - { - "digraph {", - "", - "\tordering=out;", - "\tranksep=.4;", - "\tbgcolor=\"lightgrey\"; node [shape=box, fixedsize=false, fontsize=12, fontname=\"Helvetica-bold\", fontcolor=\"blue\"", - "\t\twidth=.25, height=.25, color=\"black\", fillcolor=\"white\", style=\"filled, solid, bold\"];", - "\tedge [arrowsize=.5, color=\"black\", style=\"bold\"]", - "" - }; - const string Footer = "}"; - const string NodeFormat = " {0} [label=\"{1}\"];"; - const string EdgeFormat = " {0} -> {1} // \"{2}\" -> \"{3}\""; - - /** Track node to number mapping so we can get proper node name back */ - Dictionary nodeToNumberMap = new Dictionary(); - - /** Track node number so we can get unique node names */ - int nodeNumber = 0; - - /** Generate DOT (graphviz) for a whole tree not just a node. - * For example, 3+4*5 should generate: - * - * digraph { - * node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", - * width=.4, height=.2]; - * edge [arrowsize=.7] - * "+"->3 - * "+"->"*" - * "*"->4 - * "*"->5 - * } - * - * Takes a Tree interface object. - */ - public virtual string ToDot( object tree, ITreeAdaptor adaptor ) - { - StringBuilder builder = new StringBuilder(); - foreach ( string line in HeaderLines ) - builder.AppendLine( line ); - - nodeNumber = 0; - var nodes = DefineNodes( tree, adaptor ); - nodeNumber = 0; - var edges = DefineEdges( tree, adaptor ); - - foreach ( var s in nodes ) - builder.AppendLine( s ); - - builder.AppendLine(); - - foreach ( var s in edges ) - builder.AppendLine( s ); - - builder.AppendLine(); - - builder.AppendLine( Footer ); - return builder.ToString(); - } - - public virtual string ToDot( ITree tree ) - { - return ToDot( tree, new CommonTreeAdaptor() ); - } - protected virtual IEnumerable DefineNodes( object tree, ITreeAdaptor adaptor ) - { - if ( tree == null ) - yield break; - - int n = adaptor.GetChildCount( tree ); - if ( n == 0 ) - { - // must have already dumped as child from previous - // invocation; do nothing - yield break; - } - - // define parent node - yield return GetNodeText( adaptor, tree ); - - // for each child, do a " [label=text]" node def - for ( int i = 0; i < n; i++ ) - { - object child = adaptor.GetChild( tree, i ); - yield return GetNodeText( adaptor, child ); - foreach ( var t in DefineNodes( child, adaptor ) ) - yield return t; - } - } - - protected virtual IEnumerable DefineEdges( object tree, ITreeAdaptor adaptor ) - { - if ( tree == null ) - yield break; - - int n = adaptor.GetChildCount( tree ); - if ( n == 0 ) - { - // must have already dumped as child from previous - // invocation; do nothing - yield break; - } - - string parentName = "n" + GetNodeNumber( tree ); - - // for each child, do a parent -> child edge using unique node names - string parentText = adaptor.GetText( tree ); - for ( int i = 0; i < n; i++ ) - { - object child = adaptor.GetChild( tree, i ); - string childText = adaptor.GetText( child ); - string childName = "n" + GetNodeNumber( child ); - yield return string.Format( EdgeFormat, parentName, childName, FixString( parentText ), FixString( childText ) ); - foreach ( var t in DefineEdges( child, adaptor ) ) - yield return t; - } - } - - protected virtual string GetNodeText( ITreeAdaptor adaptor, object t ) - { - string text = adaptor.GetText( t ); - string uniqueName = "n" + GetNodeNumber( t ); - return string.Format( NodeFormat, uniqueName, FixString( text ) ); - } - - protected virtual int GetNodeNumber( object t ) - { - int i; - if ( nodeToNumberMap.TryGetValue( t, out i ) ) - { - return i; - } - else - { - nodeToNumberMap[t] = nodeNumber; - nodeNumber++; - return nodeNumber - 1; - } - } - - protected virtual string FixString( string text ) - { - if ( text != null ) - { - text = System.Text.RegularExpressions.Regex.Replace( text, "\"", "\\\\\"" ); - text = System.Text.RegularExpressions.Regex.Replace( text, "\\t", " " ); - text = System.Text.RegularExpressions.Regex.Replace( text, "\\n", "\\\\n" ); - text = System.Text.RegularExpressions.Regex.Replace( text, "\\r", "\\\\r" ); - - if ( text.Length > 20 ) - text = text.Substring( 0, 8 ) + "..." + text.Substring( text.Length - 8 ); - } - - return text; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/IPositionTrackingStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/IPositionTrackingStream.cs deleted file mode 100644 index 8bc8945..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/IPositionTrackingStream.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* - [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. - */ - -namespace Antlr.Runtime.Tree -{ - /** - * - * @author Sam Harwell - */ - public interface IPositionTrackingStream - { - /** - * Returns an element containing concrete information about the current - * position in the stream. - * - * @param allowApproximateLocation if {@code false}, this method returns - * {@code null} if an element containing exact information about the current - * position is not available - */ - object GetKnownPositionElement(bool allowApproximateLocation); - - /** - * Determines if the specified {@code element} contains concrete position - * information. - * - * @param element the element to check - * @return {@code true} if {@code element} contains concrete position - * information, otherwise {@code false} - */ - bool HasPositionInformation(object element); - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs deleted file mode 100644 index a3eb034..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs +++ /dev/null @@ -1,173 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - /** - * What does a tree look like? ANTLR has a number of support classes - * such as CommonTreeNodeStream that work on these kinds of trees. You - * don't have to make your trees implement this interface, but if you do, - * you'll be able to use more support code. - * - * - * - * NOTE: When constructing trees, ANTLR can build any kind of tree; it can - * even use Token objects as trees if you add a child list to your tokens. - * - * This is a tree node without any payload; just navigation and factory stuff. - * - */ - public interface ITree - { - - ITree GetChild( int i ); - - int ChildCount - { - get; - } - - // Tree tracks parent and child index now > 3.0 - - ITree Parent - { - get; - set; - } - - /** Is there is a node above with token type ttype? */ - bool HasAncestor( int ttype ); - - /** Walk upwards and get first ancestor with this token type. */ - ITree GetAncestor( int ttype ); - - /** - * Return a list of all ancestors of this node. The first node of - * list is the root and the last is the parent of this node. - * - */ - IList GetAncestors(); - - /** This node is what child index? 0..n-1 */ - int ChildIndex - { - get; - set; - } - - /** Set the parent and child index values for all children */ - void FreshenParentAndChildIndexes(); - - /** - * Add t as a child to this node. If t is null, do nothing. If t - * is nil, add all children of t to this' children. - * - */ - void AddChild( ITree t ); - - /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ - void SetChild( int i, ITree t ); - - object DeleteChild( int i ); - - /** - * Delete children from start to stop and replace with t even if t is - * a list (nil-root tree). num of children can increase or decrease. - * For huge child lists, inserting children can force walking rest of - * children to set their childindex; could be slow. - * - */ - void ReplaceChildren( int startChildIndex, int stopChildIndex, object t ); - - /** - * Indicates the node is a nil node but may still have children, meaning - * the tree is a flat list. - * - */ - bool IsNil - { - get; - } - - /** - * What is the smallest token index (indexing from 0) for this node - * and its children? - * - */ - int TokenStartIndex - { - get; - set; - } - - /** - * What is the largest token index (indexing from 0) for this node - * and its children? - * - */ - int TokenStopIndex - { - get; - set; - } - - ITree DupNode(); - - /** Return a token type; needed for tree parsing */ - int Type - { - get; - } - - string Text - { - get; - } - - /** In case we don't have a token payload, what is the line for errors? */ - int Line - { - get; - } - - int CharPositionInLine - { - get; - } - - string ToStringTree(); - - string ToString(); - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs deleted file mode 100644 index 30230cc..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs +++ /dev/null @@ -1,346 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - - /** - * How to create and navigate trees. Rather than have a separate factory - * and adaptor, I've merged them. Makes sense to encapsulate. - * - * - * - * This takes the place of the tree construction code generated in the - * generated code in 2.x and the ASTFactory. - * - * I do not need to know the type of a tree at all so they are all - * generic Objects. This may increase the amount of typecasting needed. :( - * - */ - public interface ITreeAdaptor - { - #region Construction - - /** - * Create a tree node from Token object; for CommonTree type trees, - * then the token just becomes the payload. This is the most - * common create call. - * - * - * - * Override if you want another kind of node to be built. - * - */ - object Create(IToken payload); - - /** - * Create a new node derived from a token, with a new token type. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG[$tokenLabel]. - * - * - * - * This should invoke createToken(Token). - * - */ - object Create(int tokenType, IToken fromToken); - - /** - * Same as create(tokenType,fromToken) except set the text too. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG[$tokenLabel, "IMAG"]. - * - * - * - * This should invoke createToken(Token). - * - */ - object Create(int tokenType, IToken fromToken, string text); - - /** - * Same as create(fromToken) except set the text too. - * This is invoked when the text terminal option is set, as in - * IMAG<text='IMAG'>. - * - * - * - * This should invoke createToken(Token). - * - */ - object Create(IToken fromToken, string text); - - /** - * Create a new node derived from a token, with a new token type. - * This is invoked from an imaginary node ref on right side of a - * rewrite rule as IMAG["IMAG"]. - * - * - * - * This should invoke createToken(int,String). - * - */ - object Create(int tokenType, string text); - - /** Duplicate a single tree node. - * Override if you want another kind of node to be built. - */ - object DupNode(object treeNode); - - object DupNode(int type, object treeNode); - - object DupNode(object treeNode, string text); - - object DupNode(int type, object treeNode, string text); - - /** Duplicate tree recursively, using dupNode() for each node */ - object DupTree( object tree ); - - /** - * Return a nil node (an empty but non-null node) that can hold - * a list of element as the children. If you want a flat tree (a list) - * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" - * - */ - object Nil(); - - /** - * Return a tree node representing an error. This node records the - * tokens consumed during error recovery. The start token indicates the - * input symbol at which the error was detected. The stop token indicates - * the last symbol consumed during recovery. - * - * - * - * You must specify the input stream so that the erroneous text can - * be packaged up in the error node. The exception could be useful - * to some applications; default implementation stores ptr to it in - * the CommonErrorNode. - * - * This only makes sense during token parsing, not tree parsing. - * Tree parsing should happen only when parsing and tree construction - * succeed. - * - */ - object ErrorNode( ITokenStream input, IToken start, IToken stop, RecognitionException e ); - - /** Is tree considered a nil node used to make lists of child nodes? */ - bool IsNil( object tree ); - - /** - * Add a child to the tree t. If child is a flat tree (a list), make all - * in list children of t. Warning: if t has no children, but child does - * and child isNil then you can decide it is ok to move children to t via - * t.children = child.children; i.e., without copying the array. Just - * make sure that this is consistent with have the user will build - * ASTs. Do nothing if t or child is null. - * - */ - void AddChild( object t, object child ); - - /** - * If oldRoot is a nil root, just copy or move the children to newRoot. - * If not a nil root, make oldRoot a child of newRoot. - * - * - * - * old=^(nil a b c), new=r yields ^(r a b c) - * old=^(a b c), new=r yields ^(r ^(a b c)) - * - * If newRoot is a nil-rooted single child tree, use the single - * child as the new root node. - * - * old=^(nil a b c), new=^(nil r) yields ^(r a b c) - * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) - * - * If oldRoot was null, it's ok, just return newRoot (even if isNil). - * - * old=null, new=r yields r - * old=null, new=^(nil r) yields ^(nil r) - * - * Return newRoot. Throw an exception if newRoot is not a - * simple node or nil root with a single child node--it must be a root - * node. If newRoot is ^(nil x) return x as newRoot. - * - * Be advised that it's ok for newRoot to point at oldRoot's - * children; i.e., you don't have to copy the list. We are - * constructing these nodes so we should have this control for - * efficiency. - * - */ - object BecomeRoot( object newRoot, object oldRoot ); - - /** - * Given the root of the subtree created for this rule, post process - * it to do any simplifications or whatever you want. A required - * behavior is to convert ^(nil singleSubtree) to singleSubtree - * as the setting of start/stop indexes relies on a single non-nil root - * for non-flat trees. - * - * - * - * Flat trees such as for lists like "idlist : ID+ ;" are left alone - * unless there is only one ID. For a list, the start/stop indexes - * are set in the nil node. - * - * This method is executed after all rule tree construction and right - * before setTokenBoundaries(). - * - */ - object RulePostProcessing( object root ); - - /** For identifying trees. - * - * - * How to identify nodes so we can say "add node to a prior node"? - * Even becomeRoot is an issue. Use System.identityHashCode(node) - * usually. - * - */ - int GetUniqueID( object node ); - - - // R e w r i t e R u l e s - - /** - * Create a node for newRoot make it the root of oldRoot. - * If oldRoot is a nil root, just copy or move the children to newRoot. - * If not a nil root, make oldRoot a child of newRoot. - * - * - * - * Return node created for newRoot. - * - * - * - * Be advised: when debugging ASTs, the DebugTreeAdaptor manually - * calls create(Token child) and then plain becomeRoot(node, node) - * because it needs to trap calls to create, but it can't since it delegates - * to not inherits from the TreeAdaptor. - * - */ - object BecomeRoot( IToken newRoot, object oldRoot ); - - #endregion - - - #region Content - - /** For tree parsing, I need to know the token type of a node */ - int GetType( object t ); - - /** Node constructors can set the type of a node */ - void SetType( object t, int type ); - - string GetText( object t ); - - /** Node constructors can set the text of a node */ - void SetText( object t, string text ); - - /** - * Return the token object from which this node was created. - * Currently used only for printing an error message. - * The error display routine in BaseRecognizer needs to - * display where the input the error occurred. If your - * tree of limitation does not store information that can - * lead you to the token, you can create a token filled with - * the appropriate information and pass that back. See - * BaseRecognizer.getErrorMessage(). - * - */ - IToken GetToken( object t ); - - /** - * Where are the bounds in the input token stream for this node and - * all children? Each rule that creates AST nodes will call this - * method right before returning. Flat trees (i.e., lists) will - * still usually have a nil root node just to hold the children list. - * That node would contain the start/stop indexes then. - * - */ - void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ); - - /** Get the token start index for this subtree; return -1 if no such index */ - int GetTokenStartIndex( object t ); - - /** Get the token stop index for this subtree; return -1 if no such index */ - int GetTokenStopIndex( object t ); - - #endregion - - - #region Navigation / Tree Parsing - - /** Get a child 0..n-1 node */ - object GetChild( object t, int i ); - - /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ - void SetChild( object t, int i, object child ); - - /** Remove ith child and shift children down from right. */ - object DeleteChild( object t, int i ); - - /** How many children? If 0, then this is a leaf node */ - int GetChildCount( object t ); - - /** - * Who is the parent node of this node; if null, implies node is root. - * If your node type doesn't handle this, it's ok but the tree rewrites - * in tree parsers need this functionality. - * - */ - object GetParent( object t ); - void SetParent( object t, object parent ); - - /** - * What index is this node in the child list? Range: 0..n-1 - * If your node type doesn't handle this, it's ok but the tree rewrites - * in tree parsers need this functionality. - * - */ - int GetChildIndex( object t ); - void SetChildIndex( object t, int index ); - - /** - * Replace from start to stop child index of parent with t, which might - * be a list. Number of children may be different after this call. - * - * - * - * If parent is null, don't do anything; must be at root of overall tree. - * Can't replace whatever points to the parent externally. Do nothing. - * - */ - void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ); - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs deleted file mode 100644 index 8f3f30a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs +++ /dev/null @@ -1,146 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - /** A stream of tree nodes, accessing nodes from a tree of some kind */ - public interface ITreeNodeStream : IIntStream - { - /** - * Get a tree node at an absolute index i; 0..n-1. - * If you don't want to buffer up nodes, then this method makes no - * sense for you. - * - */ - object this[int i] - { - get; - } - - /** - * Get tree node at current input pointer + {@code k} ahead where - * {@code k==1} is next node. {@code k<0} indicates nodes in the past. So - * {@code LT(-1)} is previous node, but implementations are not required to - * provide results for {@code k < -1}. {@code LT(0)} is undefined. For - * {@code k<=n}, return {@code null}. Return {@code null} for {@code LT(0)} - * and any index that results in an absolute address that is negative. - * - * - * - * This is analogous to {@link TokenStream#LT}, but this returns a tree node - * instead of a {@link Token}. Makes code generation identical for both - * parser and tree grammars. - * - */ - object LT( int k ); - - /** - * Where is this stream pulling nodes from? This is not the name, but - * the object that provides node objects. - * - */ - object TreeSource - { - get; - } - - /** - * If the tree associated with this stream was created from a - * {@link TokenStream}, you can specify it here. Used to do rule - * {@code $text} attribute in tree parser. Optional unless you use tree - * parser rule {@code $text} attribute or {@code output=template} and - * {@code rewrite=true} options. - * - */ - ITokenStream TokenStream - { - get; - } - - /** - * What adaptor can tell me how to interpret/navigate nodes and - * trees. E.g., get text of a node. - * - */ - ITreeAdaptor TreeAdaptor - { - get; - } - - /** - * As we flatten the tree, we use {@link Token#UP}, {@link Token#DOWN} nodes - * to represent the tree structure. When debugging we need unique nodes so - * we have to instantiate new ones. When doing normal tree parsing, it's - * slow and a waste of memory to create unique navigation nodes. Default - * should be {@code false}. - * - */ - bool UniqueNavigationNodes - { - get; - set; - } - - /** - * Return the text of all nodes from {@code start} to {@code stop}, - * inclusive. If the stream does not buffer all the nodes then it can still - * walk recursively from start until stop. You can always return - * {@code null} or {@code ""} too, but users should not access - * {@code $ruleLabel.text} in an action of course in that case. - * - */ - string ToString( object start, object stop ); - - - #region REWRITING TREES (used by tree parser) - - /** - * Replace children of {@code parent} from index {@code startChildIndex} to - * {@code stopChildIndex} with {@code t}, which might be a list. Number of - * children may be different after this call. The stream is notified because - * it is walking the tree and might need to know you are monkeying with the - * underlying tree. Also, it might be able to modify the node stream to - * avoid restreaming for future phases. - * - * - * - * If {@code parent} is {@code null}, don't do anything; must be at root of - * overall tree. Can't replace whatever points to the parent externally. Do - * nothing. - * - */ - void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ); - - #endregion - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs deleted file mode 100644 index bcf0156..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs +++ /dev/null @@ -1,90 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Antlr.Runtime.Misc; - - /** - * How to execute code for node t when a visitor visits node t. Execute - * pre() before visiting children and execute post() after visiting children. - * - */ - public interface ITreeVisitorAction - { - /** - * Execute an action before visiting children of t. Return t or - * a rewritten t. It is up to the visitor to decide what to do - * with the return value. Children of returned value will be - * visited if using TreeVisitor.visit(). - * - */ - object Pre( object t ); - - /** - * Execute an action after visiting children of t. Return t or - * a rewritten t. It is up to the visitor to decide what to do - * with the return value. - * - */ - object Post( object t ); - } - - public class TreeVisitorAction - : ITreeVisitorAction - { - private readonly Func _preAction; - private readonly Func _postAction; - - public TreeVisitorAction( Func preAction, Func postAction ) - { - _preAction = preAction; - _postAction = postAction; - } - - public object Pre( object t ) - { - if ( _preAction != null ) - return _preAction( t ); - - return t; - } - - public object Post( object t ) - { - if ( _postAction != null ) - return _postAction( t ); - - return t; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs deleted file mode 100644 index 149269a..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs +++ /dev/null @@ -1,167 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - using StringBuilder = System.Text.StringBuilder; - - /** - * A record of the rules used to match a token sequence. The tokens - * end up as the leaves of this tree and rule nodes are the interior nodes. - * This really adds no functionality, it is just an alias for CommonTree - * that is more meaningful (specific) and holds a String to display for a node. - * - */ - [System.Serializable] - public class ParseTree : BaseTree - { - public object payload; - public List hiddenTokens; - - public ParseTree( object label ) - { - this.payload = label; - } - - #region Properties - public override string Text - { - get - { - return ToString(); - } - set - { - } - } - public override int TokenStartIndex - { - get - { - return 0; - } - set - { - } - } - public override int TokenStopIndex - { - get - { - return 0; - } - set - { - } - } - public override int Type - { - get - { - return 0; - } - set - { - } - } - #endregion - - public override ITree DupNode() - { - return null; - } - - public override string ToString() - { - if ( payload is IToken ) - { - IToken t = (IToken)payload; - if ( t.Type == TokenTypes.EndOfFile ) - { - return ""; - } - return t.Text; - } - return payload.ToString(); - } - - /** - * Emit a token and all hidden nodes before. EOF node holds all - * hidden tokens after last real token. - * - */ - public virtual string ToStringWithHiddenTokens() - { - StringBuilder buf = new StringBuilder(); - if ( hiddenTokens != null ) - { - for ( int i = 0; i < hiddenTokens.Count; i++ ) - { - IToken hidden = (IToken)hiddenTokens[i]; - buf.Append( hidden.Text ); - } - } - string nodeText = this.ToString(); - if ( !nodeText.Equals( "" ) ) - buf.Append( nodeText ); - return buf.ToString(); - } - - /** - * Print out the leaves of this tree, which means printing original - * input back out. - * - */ - public virtual string ToInputString() - { - StringBuilder buf = new StringBuilder(); - ToStringLeaves( buf ); - return buf.ToString(); - } - - protected virtual void ToStringLeaves( StringBuilder buf ) - { - if ( payload is IToken ) - { // leaf node token? - buf.Append( this.ToStringWithHiddenTokens() ); - return; - } - for ( int i = 0; Children != null && i < Children.Count; i++ ) - { - ParseTree t = (ParseTree)Children[i]; - t.ToStringLeaves( buf ); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs deleted file mode 100644 index 4590287..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs +++ /dev/null @@ -1,96 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using ArgumentNullException = System.ArgumentNullException; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** - * Base class for all exceptions thrown during AST rewrite construction. - * This signifies a case where the cardinality of two or more elements - * in a subrule are different: (ID INT)+ where |ID|!=|INT| - * - */ - [System.Serializable] - public class RewriteCardinalityException : Exception - { - private readonly string _elementDescription; - - public RewriteCardinalityException() - { - } - - public RewriteCardinalityException(string elementDescription) - : this(elementDescription, elementDescription) - { - this._elementDescription = elementDescription; - } - - public RewriteCardinalityException(string elementDescription, Exception innerException) - : this(elementDescription, elementDescription, innerException) - { - } - - public RewriteCardinalityException(string message, string elementDescription) - : base(message) - { - _elementDescription = elementDescription; - } - - public RewriteCardinalityException(string message, string elementDescription, Exception innerException) - : base(message, innerException) - { - _elementDescription = elementDescription; - } - - protected RewriteCardinalityException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - throw new ArgumentNullException("info"); - - _elementDescription = info.GetString("ElementDescription"); - } - - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - throw new ArgumentNullException("info"); - - base.GetObjectData(info, context); - info.AddValue("ElementDescription", _elementDescription); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs deleted file mode 100644 index 43c51fe..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** No elements within a (...)+ in a rewrite rule */ - [System.Serializable] - public class RewriteEarlyExitException : RewriteCardinalityException - { - public RewriteEarlyExitException() - { - } - - public RewriteEarlyExitException(string elementDescription) - : base(elementDescription) - { - } - - public RewriteEarlyExitException(string elementDescription, Exception innerException) - : base(elementDescription, innerException) - { - } - - public RewriteEarlyExitException(string message, string elementDescription) - : base(message, elementDescription) - { - } - - public RewriteEarlyExitException(string message, string elementDescription, Exception innerException) - : base(message, elementDescription, innerException) - { - } - - protected RewriteEarlyExitException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs deleted file mode 100644 index 8390cd6..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** Ref to ID or expr but no tokens in ID stream or subtrees in expr stream */ - [System.Serializable] - public class RewriteEmptyStreamException : RewriteCardinalityException - { - public RewriteEmptyStreamException() - { - } - - public RewriteEmptyStreamException(string elementDescription) - : base(elementDescription) - { - } - - public RewriteEmptyStreamException(string elementDescription, Exception innerException) - : base(elementDescription, innerException) - { - } - - public RewriteEmptyStreamException(string message, string elementDescription) - : base(message, elementDescription) - { - } - - public RewriteEmptyStreamException(string message, string elementDescription, Exception innerException) - : base(message, elementDescription, innerException) - { - } - - protected RewriteEmptyStreamException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs deleted file mode 100644 index cb76ace..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs +++ /dev/null @@ -1,253 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - using IList = System.Collections.IList; - - /** - * A generic list of elements tracked in an alternative to be used in - * a -> rewrite rule. We need to subclass to fill in the next() method, - * which returns either an AST node wrapped around a token payload or - * an existing subtree. - * - * - * - * Once you start next()ing, do not try to add more elements. It will - * break the cursor tracking I believe. - * - * TODO: add mechanism to detect/puke on modification after reading from stream - * - * - * - * - */ - [System.Serializable] - public abstract class RewriteRuleElementStream - { - /** - * Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), - * which bumps it to 1 meaning no more elements. - * - */ - protected int cursor = 0; - - /** Track single elements w/o creating a list. Upon 2nd add, alloc list */ - protected object singleElement; - - /** The list of tokens or subtrees we are tracking */ - protected IList elements; - - /** Once a node / subtree has been used in a stream, it must be dup'd - * from then on. Streams are reset after subrules so that the streams - * can be reused in future subrules. So, reset must set a dirty bit. - * If dirty, then next() always returns a dup. - */ - protected bool dirty = false; - - /** The element or stream description; usually has name of the token or - * rule reference that this list tracks. Can include rulename too, but - * the exception would track that info. - */ - protected string elementDescription; - protected ITreeAdaptor adaptor; - - public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription ) - { - this.elementDescription = elementDescription; - this.adaptor = adaptor; - } - - /** Create a stream with one element */ - public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) - : this( adaptor, elementDescription ) - { - Add( oneElement ); - } - - /** Create a stream, but feed off an existing list */ - public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) - : this( adaptor, elementDescription ) - { - this.singleElement = null; - this.elements = elements; - } - - /** - * Reset the condition of this stream so that it appears we have - * not consumed any of its elements. Elements themselves are untouched. - * Once we reset the stream, any future use will need duplicates. Set - * the dirty bit. - * - */ - public virtual void Reset() - { - cursor = 0; - dirty = true; - } - - public virtual void Add( object el ) - { - //System.out.println("add '"+elementDescription+"' is "+el); - if ( el == null ) - { - return; - } - if ( elements != null ) - { // if in list, just add - elements.Add( el ); - return; - } - if ( singleElement == null ) - { // no elements yet, track w/o list - singleElement = el; - return; - } - // adding 2nd element, move to list - elements = new List( 5 ); - elements.Add( singleElement ); - singleElement = null; - elements.Add( el ); - } - - /** - * Return the next element in the stream. If out of elements, throw - * an exception unless size()==1. If size is 1, then return elements[0]. - * Return a duplicate node/subtree if stream is out of elements and - * size==1. If we've already used the element, dup (dirty bit set). - * - */ - public virtual object NextTree() - { - int n = Count; - if ( dirty || ( cursor >= n && n == 1 ) ) - { - // if out of elements and size is 1, dup - object el = NextCore(); - return Dup( el ); - } - // test size above then fetch - object el2 = NextCore(); - return el2; - } - - /** - * Do the work of getting the next element, making sure that it's - * a tree node or subtree. Deal with the optimization of single- - * element list versus list of size > 1. Throw an exception - * if the stream is empty or we're out of elements and size>1. - * protected so you can override in a subclass if necessary. - * - */ - protected virtual object NextCore() - { - int n = Count; - if ( n == 0 ) - { - throw new RewriteEmptyStreamException( elementDescription ); - } - if ( cursor >= n ) - { // out of elements? - if ( n == 1 ) - { // if size is 1, it's ok; return and we'll dup - return ToTree( singleElement ); - } - // out of elements and size was not 1, so we can't dup - throw new RewriteCardinalityException( elementDescription ); - } - // we have elements - if ( singleElement != null ) - { - cursor++; // move cursor even for single element list - return ToTree( singleElement ); - } - // must have more than one in list, pull from elements - object o = ToTree( elements[cursor] ); - cursor++; - return o; - } - - /** - * When constructing trees, sometimes we need to dup a token or AST - * subtree. Dup'ing a token means just creating another AST node - * around it. For trees, you must call the adaptor.dupTree() unless - * the element is for a tree root; then it must be a node dup. - * - */ - protected abstract object Dup( object el ); - - /** - * Ensure stream emits trees; tokens must be converted to AST nodes. - * AST nodes can be passed through unmolested. - * - */ - protected virtual object ToTree( object el ) - { - return el; - } - - public virtual bool HasNext - { - get - { - return ( singleElement != null && cursor < 1 ) || - ( elements != null && cursor < elements.Count ); - } - } - - public virtual int Count - { - get - { - int n = 0; - if ( singleElement != null ) - { - n = 1; - } - if ( elements != null ) - { - return elements.Count; - } - return n; - } - } - - public virtual string Description - { - get - { - return elementDescription; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs deleted file mode 100644 index eb434cc..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using IList = System.Collections.IList; - using NotSupportedException = System.NotSupportedException; - - /** - * Queues up nodes matched on left side of -> in a tree parser. This is - * the analog of RewriteRuleTokenStream for normal parsers. - * - */ - [System.Serializable] - public class RewriteRuleNodeStream : RewriteRuleElementStream - { - - public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription ) - : base( adaptor, elementDescription ) - { - } - - /** Create a stream with one element */ - public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) - : base( adaptor, elementDescription, oneElement ) - { - } - - /** Create a stream, but feed off an existing list */ - public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) - : base( adaptor, elementDescription, elements ) - { - } - - public virtual object NextNode() - { - return NextCore(); - } - - protected override object ToTree( object el ) - { - return adaptor.DupNode( el ); - } - - protected override object Dup( object el ) - { - // we dup every node, so don't have to worry about calling dup; short- - // circuited next() so it doesn't call. - throw new NotSupportedException( "dup can't be called for a node stream." ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs deleted file mode 100644 index 504b891..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs +++ /dev/null @@ -1,99 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using IList = System.Collections.IList; - - [System.Serializable] - public class RewriteRuleSubtreeStream : RewriteRuleElementStream - { - public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription ) - : base( adaptor, elementDescription ) - { - } - - /** Create a stream with one element */ - public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) - : base( adaptor, elementDescription, oneElement ) - { - } - - /** Create a stream, but feed off an existing list */ - public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) - : base( adaptor, elementDescription, elements ) - { - } - - /** - * Treat next element as a single node even if it's a subtree. - * This is used instead of next() when the result has to be a - * tree root node. Also prevents us from duplicating recently-added - * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration - * must dup the type node, but ID has been added. - * - * - * - * Referencing a rule result twice is ok; dup entire tree as - * we can't be adding trees as root; e.g., expr expr. - * - * Hideous code duplication here with super.next(). Can't think of - * a proper way to refactor. This needs to always call dup node - * and super.next() doesn't know which to call: dup node or dup tree. - * - */ - public virtual object NextNode() - { - //System.Console.WriteLine("nextNode: elements={0}, singleElement={1}", elements, ((ITree)singleElement).ToStringTree()); - int n = Count; - if ( dirty || ( cursor >= n && n == 1 ) ) - { - // if out of elements and size is 1, dup (at most a single node - // since this is for making root nodes). - object el = NextCore(); - return adaptor.DupNode( el ); - } - // test size above then fetch - object tree = NextCore(); - while (adaptor.IsNil(tree) && adaptor.GetChildCount(tree) == 1) - tree = adaptor.GetChild(tree, 0); - //System.Console.WriteLine("_next={0}", ((ITree)tree).ToStringTree()); - object el2 = adaptor.DupNode(tree); // dup just the root (want node here) - return el2; - } - - protected override object Dup( object el ) - { - return adaptor.DupTree( el ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs deleted file mode 100644 index 4441e47..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using IList = System.Collections.IList; - using NotSupportedException = System.NotSupportedException; - - [System.Serializable] - public class RewriteRuleTokenStream : RewriteRuleElementStream - { - - public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription ) - : base( adaptor, elementDescription ) - { - } - - /** Create a stream with one element */ - public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) - : base( adaptor, elementDescription, oneElement ) - { - } - - /** Create a stream, but feed off an existing list */ - public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) - : base( adaptor, elementDescription, elements ) - { - } - - /** Get next token from stream and make a node for it */ - public virtual object NextNode() - { - IToken t = (IToken)NextCore(); - return adaptor.Create( t ); - } - - public virtual IToken NextToken() - { - return (IToken)NextCore(); - } - - /** - * Don't convert to a tree unless they explicitly call nextTree. - * This way we can do hetero tree nodes in rewrite. - * - */ - protected override object ToTree( object el ) - { - return el; - } - - protected override object Dup( object el ) - { - throw new NotSupportedException( "dup can't be called for a token stream." ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TemplateTreeRuleReturnScope`2.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TemplateTreeRuleReturnScope`2.cs deleted file mode 100644 index 96ac54f..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TemplateTreeRuleReturnScope`2.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - public class TemplateTreeRuleReturnScope : TreeRuleReturnScope, ITemplateRuleReturnScope, ITemplateRuleReturnScope - { - private TTemplate _template; - - public TTemplate Template - { - get - { - return _template; - } - - set - { - _template = value; - } - } - - object ITemplateRuleReturnScope.Template - { - get - { - return Template; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs deleted file mode 100644 index ba44e2d..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs +++ /dev/null @@ -1,99 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Antlr.Runtime.Misc; - - public class TreeFilter : TreeParser - { - protected ITokenStream originalTokenStream; - protected ITreeAdaptor originalAdaptor; - - public TreeFilter( ITreeNodeStream input ) - : this( input, new RecognizerSharedState() ) - { - } - public TreeFilter( ITreeNodeStream input, RecognizerSharedState state ) - : base( input, state ) - { - originalAdaptor = input.TreeAdaptor; - originalTokenStream = input.TokenStream; - } - - public virtual void ApplyOnce( object t, Action whichRule ) - { - if ( t == null ) - return; - - try - { - // share TreeParser object but not parsing-related state - SetState(new RecognizerSharedState()); - SetTreeNodeStream(new CommonTreeNodeStream(originalAdaptor, t)); - ( (CommonTreeNodeStream)input ).TokenStream = originalTokenStream; - BacktrackingLevel = 1; - whichRule(); - BacktrackingLevel = 0; - } - catch ( RecognitionException ) - { - } - } - - public virtual void Downup( object t ) - { - TreeVisitor v = new TreeVisitor( new CommonTreeAdaptor() ); - Func pre = ( o ) => - { - ApplyOnce( o, Topdown ); - return o; - }; - Func post = ( o ) => - { - ApplyOnce( o, Bottomup ); - return o; - }; - v.Visit( t, pre, post ); - } - - // methods the downup strategy uses to do the up and down rules. - // to override, just define tree grammar rule topdown and turn on - // filter=true. - protected virtual void Topdown() - { - } - protected virtual void Bottomup() - { - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs deleted file mode 100644 index 02549d5..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs +++ /dev/null @@ -1,180 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - /** Return a node stream from a doubly-linked tree whose nodes - * know what child index they are. No remove() is supported. - * - * Emit navigation nodes (DOWN, UP, and EOF) to let show tree structure. - */ - public class TreeIterator : IEnumerator - { - protected ITreeAdaptor adaptor; - protected object root; - protected object tree; - protected bool firstTime = true; - private bool reachedEof; - - // navigation nodes to return during walk and at end - public object up; - public object down; - public object eof; - - /** If we emit UP/DOWN nodes, we need to spit out multiple nodes per - * next() call. - */ - protected Queue nodes; - - public TreeIterator( CommonTree tree ) - : this( new CommonTreeAdaptor(), tree ) - { - } - - public TreeIterator( ITreeAdaptor adaptor, object tree ) - { - this.adaptor = adaptor; - this.tree = tree; - this.root = tree; - nodes = new Queue(); - down = adaptor.Create( TokenTypes.Down, "DOWN" ); - up = adaptor.Create( TokenTypes.Up, "UP" ); - eof = adaptor.Create( TokenTypes.EndOfFile, "EOF" ); - } - - #region IEnumerator Members - - public object Current - { - get; - private set; - } - - #endregion - - #region IDisposable Members - - public void Dispose() - { - } - - #endregion - - #region IEnumerator Members - - public bool MoveNext() - { - if ( firstTime ) - { - // initial condition - firstTime = false; - if ( adaptor.GetChildCount( tree ) == 0 ) - { - // single node tree (special) - nodes.Enqueue( eof ); - } - Current = tree; - } - else - { - // if any queued up, use those first - if ( nodes != null && nodes.Count > 0 ) - { - Current = nodes.Dequeue(); - } - else - { - // no nodes left? - if ( tree == null ) - { - Current = eof; - } - else - { - // next node will be child 0 if any children - if ( adaptor.GetChildCount( tree ) > 0 ) - { - tree = adaptor.GetChild( tree, 0 ); - nodes.Enqueue( tree ); // real node is next after DOWN - Current = down; - } - else - { - // if no children, look for next sibling of tree or ancestor - object parent = adaptor.GetParent( tree ); - // while we're out of siblings, keep popping back up towards root - while ( parent != null && - adaptor.GetChildIndex( tree ) + 1 >= adaptor.GetChildCount( parent ) ) - { - nodes.Enqueue( up ); // we're moving back up - tree = parent; - parent = adaptor.GetParent( tree ); - } - - // no nodes left? - if ( parent == null ) - { - tree = null; // back at root? nothing left then - nodes.Enqueue( eof ); // add to queue, might have UP nodes in there - Current = nodes.Dequeue(); - } - else - { - // must have found a node with an unvisited sibling - // move to it and return it - int nextSiblingIndex = adaptor.GetChildIndex( tree ) + 1; - tree = adaptor.GetChild( parent, nextSiblingIndex ); - nodes.Enqueue( tree ); // add to queue, might have UP nodes in there - Current = nodes.Dequeue(); - } - } - } - } - } - - bool result = Current != eof || !reachedEof; - reachedEof = Current == eof; - return result; - } - - public void Reset() - { - firstTime = true; - tree = root; - nodes.Clear(); - } - - #endregion - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs deleted file mode 100644 index f5a1508..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs +++ /dev/null @@ -1,209 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using ConditionalAttribute = System.Diagnostics.ConditionalAttribute; - using Regex = System.Text.RegularExpressions.Regex; - using RegexOptions = System.Text.RegularExpressions.RegexOptions; - - /** - * A parser for a stream of tree nodes. "tree grammars" result in a subclass - * of this. All the error reporting and recovery is shared with Parser via - * the BaseRecognizer superclass. - * - */ - public class TreeParser : BaseRecognizer - { - public const int DOWN = TokenTypes.Down; - public const int UP = TokenTypes.Up; - - // precompiled regex used by inContext - static string dotdot = ".*[^.]\\.\\.[^.].*"; - static string doubleEtc = ".*\\.\\.\\.\\s+\\.\\.\\..*"; - static Regex dotdotPattern = new Regex( dotdot, RegexOptions.Compiled ); - static Regex doubleEtcPattern = new Regex( doubleEtc, RegexOptions.Compiled ); - - protected ITreeNodeStream input; - - public TreeParser( ITreeNodeStream input ) - : base() // highlight that we go to super to set state object - { - this.input = input; - } - - public TreeParser( ITreeNodeStream input, RecognizerSharedState state ) - : base( state ) // share the state object with another parser - { - this.input = input; - } - - public override void Reset() - { - base.Reset(); // reset all recognizer state variables - if ( input != null ) - { - input.Seek( 0 ); // rewind the input - } - } - - /** Set the input stream */ - public virtual void SetTreeNodeStream( ITreeNodeStream input ) - { - this.input = input; - } - - public virtual ITreeNodeStream GetTreeNodeStream() - { - return input; - } - - public override string SourceName - { - get - { - return input.SourceName; - } - } - - protected override object GetCurrentInputSymbol( IIntStream input ) - { - return ( (ITreeNodeStream)input ).LT( 1 ); - } - - protected override object GetMissingSymbol( IIntStream input, - RecognitionException e, - int expectedTokenType, - BitSet follow ) - { - string tokenText = - ""; - ITreeAdaptor adaptor = ((ITreeNodeStream)e.Input).TreeAdaptor; - return adaptor.Create(new CommonToken(expectedTokenType, tokenText)); - } - - /** - * Match '.' in tree parser has special meaning. Skip node or - * entire tree if node has children. If children, scan until - * corresponding UP node. - * - */ - public override void MatchAny( IIntStream ignore ) - { - state.errorRecovery = false; - state.failed = false; - // always consume the current node - input.Consume(); - // if the next node is DOWN, then the current node is a subtree: - // skip to corresponding UP. must count nesting level to get right UP - int look = input.LA( 1 ); - if ( look == DOWN ) - { - input.Consume(); - int level = 1; - while ( level > 0 ) - { - switch ( input.LA( 1 ) ) - { - case DOWN: - level++; - break; - case UP: - level--; - break; - case TokenTypes.EndOfFile: - return; - default: - break; - } - input.Consume(); - } - } - } - - /** - * We have DOWN/UP nodes in the stream that have no line info; override. - * plus we want to alter the exception type. Don't try to recover - * from tree parser errors inline... - * - */ - protected override object RecoverFromMismatchedToken( IIntStream input, int ttype, BitSet follow ) - { - throw new MismatchedTreeNodeException( ttype, (ITreeNodeStream)input ); - } - - /** - * Prefix error message with the grammar name because message is - * always intended for the programmer because the parser built - * the input tree not the user. - * - */ - public override string GetErrorHeader( RecognitionException e ) - { - return GrammarFileName + ": node from " + - ( e.ApproximateLineInfo ? "after " : "" ) + "line " + e.Line + ":" + e.CharPositionInLine; - } - - /** - * Tree parsers parse nodes they usually have a token object as - * payload. Set the exception token and do the default behavior. - * - */ - public override string GetErrorMessage( RecognitionException e, string[] tokenNames ) - { - if ( this is TreeParser ) - { - ITreeAdaptor adaptor = ( (ITreeNodeStream)e.Input ).TreeAdaptor; - e.Token = adaptor.GetToken( e.Node ); - if ( e.Token == null ) - { // could be an UP/DOWN node - e.Token = new CommonToken( adaptor.GetType( e.Node ), - adaptor.GetText( e.Node ) ); - } - } - return base.GetErrorMessage( e, tokenNames ); - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceIn( string ruleName, int ruleIndex ) - { - base.TraceIn( ruleName, ruleIndex, input.LT( 1 ) ); - } - - [Conditional("ANTLR_TRACE")] - public virtual void TraceOut( string ruleName, int ruleIndex ) - { - base.TraceOut( ruleName, ruleIndex, input.LT( 1 ) ); - } - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs deleted file mode 100644 index e742205..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs +++ /dev/null @@ -1,162 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using StringBuilder = System.Text.StringBuilder; - - public class TreePatternLexer - { - public const int Begin = 1; - public const int End = 2; - public const int Id = 3; - public const int Arg = 4; - public const int Percent = 5; - public const int Colon = 6; - public const int Dot = 7; - - /** The tree pattern to lex like "(A B C)" */ - protected string pattern; - - /** Index into input string */ - protected int p = -1; - - /** Current char */ - protected int c; - - /** How long is the pattern in char? */ - protected int n; - - /** Set when token type is ID or ARG (name mimics Java's StreamTokenizer) */ - public StringBuilder sval = new StringBuilder(); - - public bool error = false; - - public TreePatternLexer( string pattern ) - { - this.pattern = pattern; - this.n = pattern.Length; - Consume(); - } - - public virtual int NextToken() - { - sval.Length = 0; // reset, but reuse buffer - while ( c != CharStreamConstants.EndOfFile ) - { - if ( c == ' ' || c == '\n' || c == '\r' || c == '\t' ) - { - Consume(); - continue; - } - if ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c == '_' ) - { - sval.Append( (char)c ); - Consume(); - while ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || - ( c >= '0' && c <= '9' ) || c == '_' ) - { - sval.Append( (char)c ); - Consume(); - } - return Id; - } - if ( c == '(' ) - { - Consume(); - return Begin; - } - if ( c == ')' ) - { - Consume(); - return End; - } - if ( c == '%' ) - { - Consume(); - return Percent; - } - if ( c == ':' ) - { - Consume(); - return Colon; - } - if ( c == '.' ) - { - Consume(); - return Dot; - } - if ( c == '[' ) - { - // grab [x] as a string, returning x - Consume(); - while ( c != ']' ) - { - if ( c == '\\' ) - { - Consume(); - if ( c != ']' ) - { - sval.Append( '\\' ); - } - sval.Append( (char)c ); - } - else - { - sval.Append( (char)c ); - } - Consume(); - } - Consume(); - return Arg; - } - Consume(); - error = true; - return CharStreamConstants.EndOfFile; - } - return CharStreamConstants.EndOfFile; - } - - protected virtual void Consume() - { - p++; - if ( p >= n ) - { - c = CharStreamConstants.EndOfFile; - } - else - { - c = pattern[p]; - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs deleted file mode 100644 index 5112335..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs +++ /dev/null @@ -1,183 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using InvalidOperationException = System.InvalidOperationException; - - public class TreePatternParser - { - protected TreePatternLexer tokenizer; - protected int ttype; - protected TreeWizard wizard; - protected ITreeAdaptor adaptor; - - public TreePatternParser( TreePatternLexer tokenizer, TreeWizard wizard, ITreeAdaptor adaptor ) - { - this.tokenizer = tokenizer; - this.wizard = wizard; - this.adaptor = adaptor; - ttype = tokenizer.NextToken(); // kickstart - } - - public virtual object Pattern() - { - if ( ttype == TreePatternLexer.Begin ) - { - return ParseTree(); - } - else if ( ttype == TreePatternLexer.Id ) - { - object node = ParseNode(); - if ( ttype == CharStreamConstants.EndOfFile ) - { - return node; - } - return null; // extra junk on end - } - return null; - } - - public virtual object ParseTree() - { - if ( ttype != TreePatternLexer.Begin ) - throw new InvalidOperationException("No beginning."); - - ttype = tokenizer.NextToken(); - object root = ParseNode(); - if ( root == null ) - { - return null; - } - while ( ttype == TreePatternLexer.Begin || - ttype == TreePatternLexer.Id || - ttype == TreePatternLexer.Percent || - ttype == TreePatternLexer.Dot ) - { - if ( ttype == TreePatternLexer.Begin ) - { - object subtree = ParseTree(); - adaptor.AddChild( root, subtree ); - } - else - { - object child = ParseNode(); - if ( child == null ) - { - return null; - } - adaptor.AddChild( root, child ); - } - } - - if ( ttype != TreePatternLexer.End ) - throw new InvalidOperationException("No end."); - - ttype = tokenizer.NextToken(); - return root; - } - - public virtual object ParseNode() - { - // "%label:" prefix - string label = null; - if ( ttype == TreePatternLexer.Percent ) - { - ttype = tokenizer.NextToken(); - if ( ttype != TreePatternLexer.Id ) - { - return null; - } - label = tokenizer.sval.ToString(); - ttype = tokenizer.NextToken(); - if ( ttype != TreePatternLexer.Colon ) - { - return null; - } - ttype = tokenizer.NextToken(); // move to ID following colon - } - - // Wildcard? - if ( ttype == TreePatternLexer.Dot ) - { - ttype = tokenizer.NextToken(); - IToken wildcardPayload = new CommonToken( 0, "." ); - TreeWizard.TreePattern node = - new TreeWizard.WildcardTreePattern( wildcardPayload ); - if ( label != null ) - { - node.label = label; - } - return node; - } - - // "ID" or "ID[arg]" - if ( ttype != TreePatternLexer.Id ) - { - return null; - } - string tokenName = tokenizer.sval.ToString(); - ttype = tokenizer.NextToken(); - if ( tokenName.Equals( "nil" ) ) - { - return adaptor.Nil(); - } - string text = tokenName; - // check for arg - string arg = null; - if ( ttype == TreePatternLexer.Arg ) - { - arg = tokenizer.sval.ToString(); - text = arg; - ttype = tokenizer.NextToken(); - } - - // create node - int treeNodeType = wizard.GetTokenType( tokenName ); - if ( treeNodeType == TokenTypes.Invalid ) - { - return null; - } - object node2; - node2 = adaptor.Create( treeNodeType, text ); - if ( label != null && node2.GetType() == typeof( TreeWizard.TreePattern ) ) - { - ( (TreeWizard.TreePattern)node2 ).label = label; - } - if ( arg != null && node2.GetType() == typeof( TreeWizard.TreePattern ) ) - { - ( (TreeWizard.TreePattern)node2 ).hasTextArg = true; - } - return node2; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs deleted file mode 100644 index 16a38a2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs +++ /dev/null @@ -1,144 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Antlr.Runtime.Misc; - - using Console = System.Console; - - public class TreeRewriter : TreeParser - { - protected bool showTransformations; - - protected ITokenStream originalTokenStream; - protected ITreeAdaptor originalAdaptor; - - Func topdown_func; - Func bottomup_func; - - public TreeRewriter( ITreeNodeStream input ) - : this( input, new RecognizerSharedState() ) - { - } - public TreeRewriter( ITreeNodeStream input, RecognizerSharedState state ) - : base( input, state ) - { - originalAdaptor = input.TreeAdaptor; - originalTokenStream = input.TokenStream; - topdown_func = () => Topdown(); - bottomup_func = () => Bottomup(); - } - - public virtual object ApplyOnce( object t, Func whichRule ) - { - if ( t == null ) - return null; - - try - { - // share TreeParser object but not parsing-related state - SetState(new RecognizerSharedState()); - SetTreeNodeStream(new CommonTreeNodeStream(originalAdaptor, t)); - ( (CommonTreeNodeStream)input ).TokenStream = originalTokenStream; - BacktrackingLevel = 1; - IAstRuleReturnScope r = whichRule(); - BacktrackingLevel = 0; - if ( Failed ) - return t; - - if (showTransformations && r != null && !t.Equals(r.Tree) && r.Tree != null) - ReportTransformation(t, r.Tree); - - if ( r != null && r.Tree != null ) - return r.Tree; - else - return t; - } - catch ( RecognitionException ) - { - } - - return t; - } - - public virtual object ApplyRepeatedly( object t, Func whichRule ) - { - bool treeChanged = true; - while ( treeChanged ) - { - object u = ApplyOnce( t, whichRule ); - treeChanged = !t.Equals( u ); - t = u; - } - return t; - } - - public virtual object Downup( object t ) - { - return Downup( t, false ); - } - - public virtual object Downup( object t, bool showTransformations ) - { - this.showTransformations = showTransformations; - TreeVisitor v = new TreeVisitor( new CommonTreeAdaptor() ); - t = v.Visit( t, ( o ) => ApplyOnce( o, topdown_func ), ( o ) => ApplyRepeatedly( o, bottomup_func ) ); - return t; - } - - // methods the downup strategy uses to do the up and down rules. - // to override, just define tree grammar rule topdown and turn on - // filter=true. - protected virtual IAstRuleReturnScope Topdown() - { - return null; - } - - protected virtual IAstRuleReturnScope Bottomup() - { - return null; - } - - /** Override this if you need transformation tracing to go somewhere - * other than stdout or if you're not using ITree-derived trees. - */ - protected virtual void ReportTransformation(object oldTree, object newTree) - { - ITree old = oldTree as ITree; - ITree @new = newTree as ITree; - string oldMessage = old != null ? old.ToStringTree() : "??"; - string newMessage = @new != null ? @new.ToStringTree() : "??"; - Console.WriteLine("{0} -> {1}", oldMessage, newMessage); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope`1.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope`1.cs deleted file mode 100644 index 2a928e2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope`1.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2011 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - /** - * This is identical to the ParserRuleReturnScope except that - * the start property is a tree nodes not Token object - * when you are parsing trees. - * - */ - [System.Serializable] - public class TreeRuleReturnScope : IRuleReturnScope - { - private TTree _start; - - /** Gets the first node or root node of tree matched for this rule. */ - public TTree Start - { - get - { - return _start; - } - - set - { - _start = value; - } - } - - object IRuleReturnScope.Start - { - get - { - return Start; - } - } - - TTree IRuleReturnScope.Stop - { - get - { - return default(TTree); - } - } - - object IRuleReturnScope.Stop - { - get - { - return default(TTree); - } - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs deleted file mode 100644 index f6e49ea..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime.Tree -{ - using Antlr.Runtime.Misc; - - /** Do a depth first walk of a tree, applying pre() and post() actions as we go. */ - public class TreeVisitor - { - protected ITreeAdaptor adaptor; - - public TreeVisitor( ITreeAdaptor adaptor ) - { - this.adaptor = adaptor; - } - public TreeVisitor() - : this( new CommonTreeAdaptor() ) - { - } - - /** - * Visit every node in tree t and trigger an action for each node - * before/after having visited all of its children. Bottom up walk. - * Execute both actions even if t has no children. Ignore return - * results from transforming children since they will have altered - * the child list of this node (their parent). Return result of - * applying post action to this node. - * - */ - public object Visit( object t, ITreeVisitorAction action ) - { - // System.out.println("visit "+((Tree)t).toStringTree()); - bool isNil = adaptor.IsNil( t ); - if ( action != null && !isNil ) - { - t = action.Pre( t ); // if rewritten, walk children of new t - } - for ( int i = 0; i < adaptor.GetChildCount(t); i++ ) - { - object child = adaptor.GetChild( t, i ); - Visit( child, action ); - } - if ( action != null && !isNil ) - t = action.Post( t ); - return t; - } - - public object Visit( object t, Func preAction, Func postAction ) - { - return Visit( t, new TreeVisitorAction( preAction, postAction ) ); - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs deleted file mode 100644 index 98c759b..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs +++ /dev/null @@ -1,736 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -// TODO: build indexes for wizard -//#define BUILD_INDEXES - -namespace Antlr.Runtime.Tree -{ - using System.Collections.Generic; - - using IList = System.Collections.IList; -#if BUILD_INDEXES - using IDictionary = System.Collections.IDictionary; -#endif - - /** - * Build and navigate trees with this object. Must know about the names - * of tokens so you have to pass in a map or array of token names (from which - * this class can build the map). I.e., Token DECL means nothing unless the - * class can translate it to a token type. - * - * - * - * In order to create nodes and navigate, this class needs a TreeAdaptor. - * - * This class can build a token type -> node index for repeated use or for - * iterating over the various nodes with a particular type. - * - * This class works in conjunction with the TreeAdaptor rather than moving - * all this functionality into the adaptor. An adaptor helps build and - * navigate trees using methods. This class helps you do it with string - * patterns like "(A B C)". You can create a tree from that pattern or - * match subtrees against it. - * - */ - public class TreeWizard - { - protected ITreeAdaptor adaptor; - protected IDictionary tokenNameToTypeMap; - - public interface IContextVisitor - { - // TODO: should this be called visit or something else? - void Visit( object t, object parent, int childIndex, IDictionary labels ); - } - - public abstract class Visitor : IContextVisitor - { - public virtual void Visit( object t, object parent, int childIndex, IDictionary labels ) - { - Visit( t ); - } - public abstract void Visit( object t ); - } - - class ActionVisitor : Visitor - { - System.Action _action; - - public ActionVisitor( System.Action action ) - { - _action = action; - } - - public override void Visit( object t ) - { - _action( t ); - } - } - - /** - * When using %label:TOKENNAME in a tree for parse(), we must - * track the label. - * - */ - public class TreePattern : CommonTree - { - public string label; - public bool hasTextArg; - public TreePattern( IToken payload ) : - base( payload ) - { - } - public override string ToString() - { - if ( label != null ) - { - return "%" + label + ":"; //+ base.ToString(); - } - else - { - return base.ToString(); - } - } - } - - public class WildcardTreePattern : TreePattern - { - public WildcardTreePattern( IToken payload ) : - base( payload ) - { - } - } - - /** This adaptor creates TreePattern objects for use during scan() */ - public class TreePatternTreeAdaptor : CommonTreeAdaptor - { - public override object Create( IToken payload ) - { - return new TreePattern( payload ); - } - } - -#if BUILD_INDEXES - // TODO: build indexes for the wizard - - /** - * During fillBuffer(), we can make a reverse index from a set - * of token types of interest to the list of indexes into the - * node stream. This lets us convert a node pointer to a - * stream index semi-efficiently for a list of interesting - * nodes such as function definition nodes (you'll want to seek - * to their bodies for an interpreter). Also useful for doing - * dynamic searches; i.e., go find me all PLUS nodes. - * - */ - protected IDictionary> tokenTypeToStreamIndexesMap; - - /** - * If tokenTypesToReverseIndex set to INDEX_ALL then indexing - * occurs for all token types. - * - */ - public static readonly HashSet INDEX_ALL = new HashSet(); - - /** - * A set of token types user would like to index for faster lookup. - * If this is INDEX_ALL, then all token types are tracked. If null, - * then none are indexed. - * - */ - protected HashSet tokenTypesToReverseIndex = null; -#endif - - public TreeWizard( ITreeAdaptor adaptor ) - { - this.adaptor = adaptor; - } - - public TreeWizard( ITreeAdaptor adaptor, IDictionary tokenNameToTypeMap ) - { - this.adaptor = adaptor; - this.tokenNameToTypeMap = tokenNameToTypeMap; - } - - public TreeWizard( ITreeAdaptor adaptor, string[] tokenNames ) - { - this.adaptor = adaptor; - this.tokenNameToTypeMap = ComputeTokenTypes( tokenNames ); - } - - public TreeWizard( string[] tokenNames ) - : this( new CommonTreeAdaptor(), tokenNames ) - { - } - - /** - * Compute a Map<String, Integer> that is an inverted index of - * tokenNames (which maps int token types to names). - * - */ - public virtual IDictionary ComputeTokenTypes( string[] tokenNames ) - { - IDictionary m = new Dictionary(); - if ( tokenNames == null ) - { - return m; - } - for ( int ttype = TokenTypes.Min; ttype < tokenNames.Length; ttype++ ) - { - string name = tokenNames[ttype]; - m[name] = ttype; - } - return m; - } - - /** Using the map of token names to token types, return the type. */ - public virtual int GetTokenType( string tokenName ) - { - if ( tokenNameToTypeMap == null ) - { - return TokenTypes.Invalid; - } - - int value; - if ( tokenNameToTypeMap.TryGetValue( tokenName, out value ) ) - return value; - - return TokenTypes.Invalid; - } - - /** - * Walk the entire tree and make a node name to nodes mapping. - * For now, use recursion but later nonrecursive version may be - * more efficient. Returns Map<Integer, List> where the List is - * of your AST node type. The Integer is the token type of the node. - * - * - * - * TODO: save this index so that find and visit are faster - * - */ - public IDictionary Index( object t ) - { - IDictionary m = new Dictionary(); - IndexCore( t, m ); - return m; - } - - /** Do the work for index */ - protected virtual void IndexCore( object t, IDictionary m ) - { - if ( t == null ) - { - return; - } - int ttype = adaptor.GetType( t ); - IList elements; - if ( !m.TryGetValue( ttype, out elements ) || elements == null ) - { - elements = new List(); - m[ttype] = elements; - } - elements.Add( t ); - int n = adaptor.GetChildCount( t ); - for ( int i = 0; i < n; i++ ) - { - object child = adaptor.GetChild( t, i ); - IndexCore( child, m ); - } - } - - class FindTreeWizardVisitor : TreeWizard.Visitor - { - IList _nodes; - public FindTreeWizardVisitor( IList nodes ) - { - _nodes = nodes; - } - public override void Visit( object t ) - { - _nodes.Add( t ); - } - } - class FindTreeWizardContextVisitor : TreeWizard.IContextVisitor - { - TreeWizard _outer; - TreePattern _tpattern; - IList _subtrees; - public FindTreeWizardContextVisitor( TreeWizard outer, TreePattern tpattern, IList subtrees ) - { - _outer = outer; - _tpattern = tpattern; - _subtrees = subtrees; - } - - public void Visit( object t, object parent, int childIndex, IDictionary labels ) - { - if ( _outer.ParseCore( t, _tpattern, null ) ) - { - _subtrees.Add( t ); - } - } - } - - /** Return a List of tree nodes with token type ttype */ - public virtual IList Find( object t, int ttype ) - { - IList nodes = new List(); - Visit( t, ttype, new FindTreeWizardVisitor( nodes ) ); - return nodes; - } - - /** Return a List of subtrees matching pattern. */ - public virtual IList Find( object t, string pattern ) - { - IList subtrees = new List(); - // Create a TreePattern from the pattern - TreePatternLexer tokenizer = new TreePatternLexer( pattern ); - TreePatternParser parser = - new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); - TreePattern tpattern = (TreePattern)parser.Pattern(); - // don't allow invalid patterns - if ( tpattern == null || - tpattern.IsNil || - tpattern.GetType() == typeof( WildcardTreePattern ) ) - { - return null; - } - int rootTokenType = tpattern.Type; - Visit( t, rootTokenType, new FindTreeWizardContextVisitor( this, tpattern, subtrees ) ); - return subtrees; - } - - public virtual object FindFirst( object t, int ttype ) - { - return null; - } - - public virtual object FindFirst( object t, string pattern ) - { - return null; - } - - /** - * Visit every ttype node in t, invoking the visitor. This is a quicker - * version of the general visit(t, pattern) method. The labels arg - * of the visitor action method is never set (it's null) since using - * a token type rather than a pattern doesn't let us set a label. - * - */ - public void Visit( object t, int ttype, IContextVisitor visitor ) - { - VisitCore( t, null, 0, ttype, visitor ); - } - - public void Visit( object t, int ttype, System.Action action ) - { - Visit( t, ttype, new ActionVisitor( action ) ); - } - - /** Do the recursive work for visit */ - protected virtual void VisitCore( object t, object parent, int childIndex, int ttype, IContextVisitor visitor ) - { - if ( t == null ) - { - return; - } - if ( adaptor.GetType( t ) == ttype ) - { - visitor.Visit( t, parent, childIndex, null ); - } - int n = adaptor.GetChildCount( t ); - for ( int i = 0; i < n; i++ ) - { - object child = adaptor.GetChild( t, i ); - VisitCore( child, t, i, ttype, visitor ); - } - } - - class VisitTreeWizardContextVisitor : TreeWizard.IContextVisitor - { - TreeWizard _outer; - IContextVisitor _visitor; - IDictionary _labels; - TreePattern _tpattern; - - public VisitTreeWizardContextVisitor( TreeWizard outer, IContextVisitor visitor, IDictionary labels, TreePattern tpattern ) - { - _outer = outer; - _visitor = visitor; - _labels = labels; - _tpattern = tpattern; - } - - public void Visit( object t, object parent, int childIndex, IDictionary unusedlabels ) - { - // the unusedlabels arg is null as visit on token type doesn't set. - _labels.Clear(); - if ( _outer.ParseCore( t, _tpattern, _labels ) ) - { - _visitor.Visit( t, parent, childIndex, _labels ); - } - } - } - - /** - * For all subtrees that match the pattern, execute the visit action. - * The implementation uses the root node of the pattern in combination - * with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. - * Patterns with wildcard roots are also not allowed. - * - */ - public void Visit( object t, string pattern, IContextVisitor visitor ) - { - // Create a TreePattern from the pattern - TreePatternLexer tokenizer = new TreePatternLexer( pattern ); - TreePatternParser parser = - new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); - TreePattern tpattern = (TreePattern)parser.Pattern(); - // don't allow invalid patterns - if ( tpattern == null || - tpattern.IsNil || - tpattern.GetType() == typeof( WildcardTreePattern ) ) - { - return; - } - IDictionary labels = new Dictionary(); // reused for each _parse - int rootTokenType = tpattern.Type; - Visit( t, rootTokenType, new VisitTreeWizardContextVisitor( this, visitor, labels, tpattern ) ); - } - - /** - * Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels - * on the various nodes and '.' (dot) as the node/subtree wildcard, - * return true if the pattern matches and fill the labels Map with - * the labels pointing at the appropriate nodes. Return false if - * the pattern is malformed or the tree does not match. - * - * - * - * If a node specifies a text arg in pattern, then that must match - * for that node in t. - * - * TODO: what's a better way to indicate bad pattern? Exceptions are a hassle - * - */ - public bool Parse( object t, string pattern, IDictionary labels ) - { - TreePatternLexer tokenizer = new TreePatternLexer( pattern ); - TreePatternParser parser = - new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); - TreePattern tpattern = (TreePattern)parser.Pattern(); - /* - System.out.println("t="+((Tree)t).toStringTree()); - System.out.println("scant="+tpattern.toStringTree()); - */ - bool matched = ParseCore( t, tpattern, labels ); - return matched; - } - - public bool Parse( object t, string pattern ) - { - return Parse( t, pattern, null ); - } - - /** - * Do the work for parse. Check to see if the t2 pattern fits the - * structure and token types in t1. Check text if the pattern has - * text arguments on nodes. Fill labels map with pointers to nodes - * in tree matched against nodes in pattern with labels. - * - */ - protected virtual bool ParseCore( object t1, TreePattern tpattern, IDictionary labels ) - { - // make sure both are non-null - if ( t1 == null || tpattern == null ) - { - return false; - } - // check roots (wildcard matches anything) - if ( tpattern.GetType() != typeof( WildcardTreePattern ) ) - { - if ( adaptor.GetType( t1 ) != tpattern.Type ) - { - return false; - } - // if pattern has text, check node text - if ( tpattern.hasTextArg && !adaptor.GetText( t1 ).Equals( tpattern.Text ) ) - { - return false; - } - } - if ( tpattern.label != null && labels != null ) - { - // map label in pattern to node in t1 - labels[tpattern.label] = t1; - } - // check children - int n1 = adaptor.GetChildCount( t1 ); - int n2 = tpattern.ChildCount; - if ( n1 != n2 ) - { - return false; - } - for ( int i = 0; i < n1; i++ ) - { - object child1 = adaptor.GetChild( t1, i ); - TreePattern child2 = (TreePattern)tpattern.GetChild( i ); - if ( !ParseCore( child1, child2, labels ) ) - { - return false; - } - } - return true; - } - - /** - * Create a tree or node from the indicated tree pattern that closely - * follows ANTLR tree grammar tree element syntax: - * - * (root child1 ... child2). - * - * - * - * You can also just pass in a node: ID - * - * Any node can have a text argument: ID[foo] - * (notice there are no quotes around foo--it's clear it's a string). - * - * nil is a special name meaning "give me a nil node". Useful for - * making lists: (nil A B C) is a list of A B C. - * - */ - public virtual object Create( string pattern ) - { - TreePatternLexer tokenizer = new TreePatternLexer( pattern ); - TreePatternParser parser = new TreePatternParser( tokenizer, this, adaptor ); - object t = parser.Pattern(); - return t; - } - - /** - * Compare t1 and t2; return true if token types/text, structure match exactly. - * The trees are examined in their entirety so that (A B) does not match - * (A B C) nor (A (B C)). - * - * - * - * TODO: allow them to pass in a comparator - * TODO: have a version that is nonstatic so it can use instance adaptor - * - * I cannot rely on the tree node's equals() implementation as I make - * no constraints at all on the node types nor interface etc... - * - */ - public static bool Equals( object t1, object t2, ITreeAdaptor adaptor ) - { - return EqualsCore( t1, t2, adaptor ); - } - - /** - * Compare type, structure, and text of two trees, assuming adaptor in - * this instance of a TreeWizard. - * - */ - public new bool Equals( object t1, object t2 ) - { - return EqualsCore( t1, t2, adaptor ); - } - - protected static bool EqualsCore( object t1, object t2, ITreeAdaptor adaptor ) - { - // make sure both are non-null - if ( t1 == null || t2 == null ) - { - return false; - } - // check roots - if ( adaptor.GetType( t1 ) != adaptor.GetType( t2 ) ) - { - return false; - } - if ( !adaptor.GetText( t1 ).Equals( adaptor.GetText( t2 ) ) ) - { - return false; - } - // check children - int n1 = adaptor.GetChildCount( t1 ); - int n2 = adaptor.GetChildCount( t2 ); - if ( n1 != n2 ) - { - return false; - } - for ( int i = 0; i < n1; i++ ) - { - object child1 = adaptor.GetChild( t1, i ); - object child2 = adaptor.GetChild( t2, i ); - if ( !EqualsCore( child1, child2, adaptor ) ) - { - return false; - } - } - return true; - } - -#if BUILD_INDEXES - // TODO: next stuff taken from CommonTreeNodeStream - - /** - * Given a node, add this to the reverse index tokenTypeToStreamIndexesMap. - * You can override this method to alter how indexing occurs. The - * default is to create a - * - * Map<Integer token type,ArrayList<Integer stream index>> - * - * - * - * This data structure allows you to find all nodes with type INT in order. - * - * If you really need to find a node of type, say, FUNC quickly then perhaps - * - * Map<Integertoken type,Map<Object tree node,Integer stream index>> - * - * would be better for you. The interior maps map a tree node to - * the index so you don't have to search linearly for a specific node. - * - * If you change this method, you will likely need to change - * getNodeIndex(), which extracts information. - * - */ - protected void fillReverseIndex( object node, int streamIndex ) - { - //System.out.println("revIndex "+node+"@"+streamIndex); - if ( tokenTypesToReverseIndex == null ) - { - return; // no indexing if this is empty (nothing of interest) - } - if ( tokenTypeToStreamIndexesMap == null ) - { - tokenTypeToStreamIndexesMap = new Dictionary>(); // first indexing op - } - int tokenType = adaptor.getType( node ); - if ( !( tokenTypesToReverseIndex == INDEX_ALL || - tokenTypesToReverseIndex.Contains( tokenType ) ) ) - { - return; // tokenType not of interest - } - IList indexes; - - if ( !tokenTypeToStreamIndexesMap.TryGetValue( tokenType, out indexes ) || indexes == null ) - { - indexes = new List(); // no list yet for this token type - indexes.Add( streamIndex ); // not there yet, add - tokenTypeToStreamIndexesMap[tokenType] = indexes; - } - else - { - if ( !indexes.Contains( streamIndex ) ) - { - indexes.Add( streamIndex ); // not there yet, add - } - } - } - - /** - * Track the indicated token type in the reverse index. Call this - * repeatedly for each type or use variant with Set argument to - * set all at once. - * - * - * - */ - public void reverseIndex( int tokenType ) - { - if ( tokenTypesToReverseIndex == null ) - { - tokenTypesToReverseIndex = new HashSet(); - } - else if ( tokenTypesToReverseIndex == INDEX_ALL ) - { - return; - } - tokenTypesToReverseIndex.add( tokenType ); - } - - /** - * Track the indicated token types in the reverse index. Set - * to INDEX_ALL to track all token types. - * - */ - public void reverseIndex( HashSet tokenTypes ) - { - tokenTypesToReverseIndex = tokenTypes; - } - - /** - * Given a node pointer, return its index into the node stream. - * This is not its Token stream index. If there is no reverse map - * from node to stream index or the map does not contain entries - * for node's token type, a linear search of entire stream is used. - * - * - * - * Return -1 if exact node pointer not in stream. - * - */ - public int getNodeIndex( object node ) - { - //System.out.println("get "+node); - if ( tokenTypeToStreamIndexesMap == null ) - { - return getNodeIndexLinearly( node ); - } - int tokenType = adaptor.getType( node ); - IList indexes; - if ( !tokenTypeToStreamIndexesMap.TryGetValue( tokenType, out indexes ) || indexes == null ) - { - //System.out.println("found linearly; stream index = "+getNodeIndexLinearly(node)); - return getNodeIndexLinearly( node ); - } - for ( int i = 0; i < indexes.size(); i++ ) - { - int streamIndex = indexes[i]; - object n = get( streamIndex ); - if ( n == node ) - { - //System.out.println("found in index; stream index = "+streamIndexI); - return streamIndex; // found it! - } - } - return -1; - } -#endif - - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/UnbufferedTokenStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/UnbufferedTokenStream.cs deleted file mode 100644 index c1bfcb2..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/UnbufferedTokenStream.cs +++ /dev/null @@ -1,172 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2009 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. - */ - -namespace Antlr.Runtime -{ - using Antlr.Runtime.Misc; - using CLSCompliant = System.CLSCompliantAttribute; - using NotSupportedException = System.NotSupportedException; - using IndexOutOfRangeException = System.IndexOutOfRangeException; - - /** A token stream that pulls tokens from the code source on-demand and - * without tracking a complete buffer of the tokens. This stream buffers - * the minimum number of tokens possible. It's the same as - * OnDemandTokenStream except that OnDemandTokenStream buffers all tokens. - * - * You can't use this stream if you pass whitespace or other off-channel - * tokens to the parser. The stream can't ignore off-channel tokens. - * - * You can only look backwards 1 token: LT(-1). - * - * Use this when you need to read from a socket or other infinite stream. - * - * @see BufferedTokenStream - * @see CommonTokenStream - */ - public class UnbufferedTokenStream : LookaheadStream, ITokenStream, ITokenStreamInformation - { - [CLSCompliant(false)] - protected ITokenSource tokenSource; - protected int tokenIndex; // simple counter to set token index in tokens - - /** Skip tokens on any channel but this one; this is how we skip whitespace... */ - protected int channel = TokenChannels.Default; - - private readonly ListStack _realTokens = new ListStack() { null }; - - public UnbufferedTokenStream(ITokenSource tokenSource) - { - this.tokenSource = tokenSource; - } - - public ITokenSource TokenSource - { - get - { - return this.tokenSource; - } - } - - public string SourceName - { - get - { - return TokenSource.SourceName; - } - } - - #region ITokenStreamInformation Members - - public IToken LastToken - { - get - { - return LB(1); - } - } - - public IToken LastRealToken - { - get - { - return _realTokens.Peek(); - } - } - - public int MaxLookBehind - { - get - { - return 1; - } - } - - public override int Mark() - { - _realTokens.Push(_realTokens.Peek()); - return base.Mark(); - } - - public override void Release(int marker) - { - base.Release(marker); - _realTokens.Pop(); - } - - public override void Clear() - { - _realTokens.Clear(); - _realTokens.Push(null); - } - - public override void Consume() - { - base.Consume(); - if (PreviousElement != null && PreviousElement.Line > 0) - _realTokens[_realTokens.Count - 1] = PreviousElement; - } - - #endregion - - public override IToken NextElement() - { - IToken t = this.tokenSource.NextToken(); - t.TokenIndex = this.tokenIndex++; - return t; - } - - public override bool IsEndOfFile(IToken o) - { - return o.Type == CharStreamConstants.EndOfFile; - } - - public IToken Get(int i) - { - throw new NotSupportedException("Absolute token indexes are meaningless in an unbuffered stream"); - } - - public int LA(int i) - { - return LT(i).Type; - } - - public string ToString(int start, int stop) - { - return "n/a"; - } - - public string ToString(IToken start, IToken stop) - { - return "n/a"; - } - } -} diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs deleted file mode 100644 index 89b3481..0000000 --- a/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2005-2008 Terence Parr - * All rights reserved. - * - * Conversion to C#: - * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. - * 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. - */ - -namespace Antlr.Runtime -{ - using System.Collections.Generic; - using Exception = System.Exception; - using SerializationInfo = System.Runtime.Serialization.SerializationInfo; - using StreamingContext = System.Runtime.Serialization.StreamingContext; - - /** An extra token while parsing a TokenStream */ - [System.Serializable] - public class UnwantedTokenException : MismatchedTokenException - { - public UnwantedTokenException() - { - } - - public UnwantedTokenException(string message) - : base(message) - { - } - - public UnwantedTokenException(string message, Exception innerException) - : base(message, innerException) - { - } - - public UnwantedTokenException(int expecting, IIntStream input) - : base(expecting, input) - { - } - - public UnwantedTokenException(int expecting, IIntStream input, IList tokenNames) - : base(expecting, input, tokenNames) - { - } - - public UnwantedTokenException(string message, int expecting, IIntStream input, IList tokenNames) - : base(message, expecting, input, tokenNames) - { - } - - public UnwantedTokenException(string message, int expecting, IIntStream input, IList tokenNames, Exception innerException) - : base(message, expecting, input, tokenNames, innerException) - { - } - - protected UnwantedTokenException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - - public virtual IToken UnexpectedToken - { - get - { - return Token; - } - } - - public override string ToString() - { - //int unexpectedType = getUnexpectedType(); - //string unexpected = ( tokenNames != null && unexpectedType >= 0 && unexpectedType < tokenNames.Length ) ? tokenNames[unexpectedType] : unexpectedType.ToString(); - string expected = (TokenNames != null && Expecting >= 0 && Expecting < TokenNames.Count) ? TokenNames[Expecting] : Expecting.ToString(); - - string exp = ", expected " + expected; - if (Expecting == TokenTypes.Invalid) - { - exp = ""; - } - if (Token == null) - { - return "UnwantedTokenException(found=" + null + exp + ")"; - } - return "UnwantedTokenException(found=" + Token.Text + exp + ")"; - } - } -} diff --git a/runtime/Java/pom.xml b/runtime/Java/pom.xml index 7d655c0..e6bfbd5 100644 --- a/runtime/Java/pom.xml +++ b/runtime/Java/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - org.antlr antlr-runtime jar @@ -15,8 +14,8 @@ org.antlr antlr-master - 3.5.2 - ../.. + 3.5.3 + ../../pom.xml ANTLR 3 Runtime @@ -64,4 +63,24 @@ + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.3.1 + + 1.8 + false + + + + + javadoc + + + + + + diff --git a/runtime/Python/README b/runtime/Python/README index 98a50bb..49aedd8 100644 --- a/runtime/Python/README +++ b/runtime/Python/README @@ -44,6 +44,11 @@ $ python setup.py install See for more information. +If this fails due to an obscure setuptools error, you may need a newer bootstrap +script (ez_setup.py): see for full +setuptools installation instructions, or simply download the given ez_setup.py +script, place it in this folder, and run the above setup.py command. + 5) DOCUMENTATION ================ diff --git a/runtime/Python/ez_setup.py b/runtime/Python/ez_setup.py index 38c09c6..a3e69dc 100644 --- a/runtime/Python/ez_setup.py +++ b/runtime/Python/ez_setup.py @@ -1,228 +1,391 @@ -#!python -"""Bootstrap setuptools installation +#!/usr/bin/env python -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. +""" +Setuptools bootstrapping installer. -This file can also be run as a script to install or upgrade setuptools. +Run this script to install or upgrade setuptools. """ + +import os +import shutil import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data +import tempfile +import zipfile +import optparse +import subprocess +import platform +import textwrap +import contextlib +import warnings + +from distutils import log + +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +try: + from site import USER_SITE +except ImportError: + USER_SITE = None + +DEFAULT_VERSION = "15.0" +DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" +DEFAULT_SAVE_DIR = os.curdir + + +def _python_cmd(*args): + """ + Execute a command. + + Return True if the command succeeded. + """ + args = (sys.executable,) + args + return subprocess.call(args) == 0 + + +def _install(archive_filename, install_args=()): + """Install Setuptools.""" + with archive_context(archive_filename): + # installing + log.warn('Installing Setuptools') + if not _python_cmd('setup.py', 'install', *install_args): + log.warn('Something went wrong during the installation.') + log.warn('See the error message above.') + # exitcode will be 2 + return 2 + + +def _build_egg(egg, archive_filename, to_dir): + """Build Setuptools egg.""" + with archive_context(archive_filename): + # building an egg + log.warn('Building a Setuptools egg in %s', to_dir) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') + + +class ContextualZipFile(zipfile.ZipFile): + + """Supplement ZipFile class to support context manager for Python 2.6.""" + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + def __new__(cls, *args, **kwargs): + """Construct a ZipFile or ContextualZipFile as appropriate.""" + if hasattr(zipfile.ZipFile, '__exit__'): + return zipfile.ZipFile(*args, **kwargs) + return super(ContextualZipFile, cls).__new__(cls) + + +@contextlib.contextmanager +def archive_context(filename): + """ + Unzip filename to a temporary directory, set to the cwd. + + The unzipped target is cleaned up after. + """ + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + with ContextualZipFile(filename) as archive: + archive.extractall() + + # going in the directory + subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) + os.chdir(subdir) + log.warn('Now working in %s', subdir) + yield + + finally: + os.chdir(old_wd) + shutil.rmtree(tmpdir) + + +def _do_download(version, download_base, to_dir, download_delay): + """Download Setuptools.""" + egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' + % (version, sys.version_info[0], sys.version_info[1])) + if not os.path.exists(egg): + archive = download_setuptools(version, download_base, + to_dir, download_delay) + _build_egg(egg, archive, to_dir) + sys.path.insert(0, egg) + + # Remove previously-imported pkg_resources if present (see + # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). + if 'pkg_resources' in sys.modules: + del sys.modules['pkg_resources'] + + import setuptools + setuptools.bootstrap_install_from = egg def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path + version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=DEFAULT_SAVE_DIR, download_delay=15): + """ + Ensure that a setuptools version is installed. - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. + Return None. Raise SystemExit if the requested version + or later cannot be installed. """ + to_dir = os.path.abspath(to_dir) + + # prior to importing, capture the module state for + # representative modules. + rep_modules = 'pkg_resources', 'setuptools' + imported = set(sys.modules).intersection(rep_modules) + try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) + import pkg_resources + pkg_resources.require("setuptools>=" + version) + # a suitable version is already installed + return except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg + # pkg_resources not available; setuptools is not installed; download + pass + except pkg_resources.DistributionNotFound: + # no version of setuptools was found; allow download + pass + except pkg_resources.VersionConflict as VC_err: + if imported: + _conflict_bail(VC_err, version) - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) + # otherwise, unload pkg_resources to allow the downloaded version to + # take precedence. + del pkg_resources + _unload_pkg_resources() - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) + return _do_download(version, download_base, to_dir, download_delay) -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. +def _conflict_bail(VC_err, version): """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) + Setuptools was imported prior to invocation, so it is + unsafe to unload it. Bail out. + """ + conflict_tmpl = textwrap.dedent(""" + The required version of setuptools (>={version}) is not available, + and can't be installed while this script is running. Please + install a more recent version first, using + 'easy_install -U setuptools'. + + (Currently using {VC_err.args[0]!r}) + """) + msg = conflict_tmpl.format(**locals()) + sys.stderr.write(msg) + sys.exit(2) -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" +def _unload_pkg_resources(): + del_modules = [ + name for name in sys.modules + if name.startswith('pkg_resources') + ] + for mod_name in del_modules: + del sys.modules[mod_name] + + +def _clean_check(cmd, target): + """ + Run the command to download target. + + If the command fails, clean up before re-raising the error. + """ try: - import setuptools - except ImportError: - egg = None + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + if os.access(target, os.F_OK): + os.unlink(target) + raise + + +def download_file_powershell(url, target): + """ + Download the file at url to target using Powershell. + + Powershell will validate trust. + Raise an exception if the command cannot complete. + """ + target = os.path.abspath(target) + ps_cmd = ( + "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " + "[System.Net.CredentialCache]::DefaultCredentials; " + "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" + % vars() + ) + cmd = [ + 'powershell', + '-Command', + ps_cmd, + ] + _clean_check(cmd, target) + + +def has_powershell(): + """Determine if Powershell is available.""" + if platform.system() != 'Windows': + return False + cmd = ['powershell', '-Command', 'echo test'] + with open(os.path.devnull, 'wb') as devnull: try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True +download_file_powershell.viable = has_powershell + + +def download_file_curl(url, target): + cmd = ['curl', url, '--silent', '--output', target] + _clean_check(cmd, target) + + +def has_curl(): + cmd = ['curl', '--version'] + with open(os.path.devnull, 'wb') as devnull: try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True +download_file_curl.viable = has_curl +def download_file_wget(url, target): + cmd = ['wget', url, '--quiet', '--output-document', target] + _clean_check(cmd, target) -def update_md5(filenames): - """Update our built-in md5 registry""" - import re - from md5 import md5 +def has_wget(): + cmd = ['wget', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True +download_file_wget.viable = has_wget - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) +def download_file_insecure(url, target): + """Use Python to download the file, without connection authentication.""" + src = urlopen(url) + try: + # Read all the data in one block. + data = src.read() + finally: + src.close() - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() + # Write all the data in one block to avoid creating a partial file. + with open(target, "wb") as dst: + dst.write(data) +download_file_insecure.viable = lambda: True - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() +def get_best_downloader(): + downloaders = ( + download_file_powershell, + download_file_curl, + download_file_wget, + download_file_insecure, + ) + viable_downloaders = (dl for dl in downloaders if dl.viable()) + return next(viable_downloaders, None) -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) +def download_setuptools( + version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=DEFAULT_SAVE_DIR, delay=15, + downloader_factory=get_best_downloader): + """ + Download setuptools from a specified location and return its filename. + `version` should be a valid setuptools version number that is available + as an sdist for download under the `download_base` URL (which should end + with a '/'). `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + ``downloader_factory`` should be a function taking no arguments and + returning a function for downloading a URL to a target. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + zip_name = "setuptools-%s.zip" % version + url = download_base + zip_name + saveto = os.path.join(to_dir, zip_name) + if not os.path.exists(saveto): # Avoid repeated downloads + log.warn("Downloading %s", url) + downloader = downloader_factory() + downloader(url, saveto) + return os.path.realpath(saveto) +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the setuptools package. + Returns list of command line arguments. + """ + return ['--user'] if options.user_install else [] + + +def _parse_args(): + """Parse the command line for options.""" + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the setuptools package') + parser.add_option( + '--insecure', dest='downloader_factory', action='store_const', + const=lambda: download_file_insecure, default=get_best_downloader, + help='Use internal, non-validating downloader' + ) + parser.add_option( + '--version', help="Specify which version to download", + default=DEFAULT_VERSION, + ) + parser.add_option( + '--to-dir', + help="Directory to save (and re-use) package", + default=DEFAULT_SAVE_DIR, + ) + options, args = parser.parse_args() + # positional arguments are ignored + return options + + +def _download_args(options): + """Return args for download_setuptools function from cmdline args.""" + return dict( + version=options.version, + download_base=options.download_base, + downloader_factory=options.downloader_factory, + to_dir=options.to_dir, + ) + + +def main(): + """Install or upgrade setuptools and EasyInstall.""" + options = _parse_args() + archive = download_setuptools(**_download_args(options)) + return _install(archive, _build_install_args(options)) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/runtime/Python3/README b/runtime/Python3/README index 821d4d7..63dc3a9 100644 --- a/runtime/Python3/README +++ b/runtime/Python3/README @@ -40,6 +40,11 @@ $ python3 setup.py install See for more information. +If this fails due to an obscure setuptools error, you may need a newer bootstrap +script (ez_setup.py): see for full +setuptools installation instructions, or simply download the given ez_setup.py +script, place it in this folder, and run the above setup.py command. + 5) DOCUMENTATION ================ diff --git a/runtime/Python3/ez_setup.py b/runtime/Python3/ez_setup.py index 3ea2e66..a3e69dc 100644 --- a/runtime/Python3/ez_setup.py +++ b/runtime/Python3/ez_setup.py @@ -1,485 +1,391 @@ -#!python -"""Bootstrap distribute installation +#!/usr/bin/env python -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from distribute_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. +""" +Setuptools bootstrapping installer. -This file can also be run as a script to install or upgrade setuptools. +Run this script to install or upgrade setuptools. """ + import os +import shutil import sys -import time -import fnmatch import tempfile -import tarfile +import zipfile +import optparse +import subprocess +import platform +import textwrap +import contextlib +import warnings + from distutils import log +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + try: from site import USER_SITE except ImportError: USER_SITE = None -try: - import subprocess +DEFAULT_VERSION = "15.0" +DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" +DEFAULT_SAVE_DIR = os.curdir - def _python_cmd(*args): - args = (sys.executable,) + args - return subprocess.call(args) == 0 -except ImportError: - # will be used for python 2.3 - def _python_cmd(*args): - args = (sys.executable,) + args - # quoting arguments if windows - if sys.platform == 'win32': - def quote(arg): - if ' ' in arg: - return '"%s"' % arg - return arg - args = [quote(arg) for arg in args] - return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 - -DEFAULT_VERSION = "0.6.14" -DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" -SETUPTOOLS_FAKED_VERSION = "0.6c11" - -SETUPTOOLS_PKG_INFO = """\ -Metadata-Version: 1.0 -Name: setuptools -Version: %s -Summary: xxxx -Home-page: xxx -Author: xxx -Author-email: xxx -License: xxx -Description: xxx -""" % SETUPTOOLS_FAKED_VERSION - - -def _install(tarball): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - tar.close() +def _python_cmd(*args): + """ + Execute a command. + + Return True if the command succeeded. + """ + args = (sys.executable,) + args + return subprocess.call(args) == 0 - # going in the directory - subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) - os.chdir(subdir) - log.warn('Now working in %s', subdir) +def _install(archive_filename, install_args=()): + """Install Setuptools.""" + with archive_context(archive_filename): # installing - log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install'): + log.warn('Installing Setuptools') + if not _python_cmd('setup.py', 'install', *install_args): log.warn('Something went wrong during the installation.') log.warn('See the error message above.') - finally: - os.chdir(old_wd) + # exitcode will be 2 + return 2 + + +def _build_egg(egg, archive_filename, to_dir): + """Build Setuptools egg.""" + with archive_context(archive_filename): + # building an egg + log.warn('Building a Setuptools egg in %s', to_dir) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') -def _build_egg(egg, tarball, to_dir): - # extracting the tarball +class ContextualZipFile(zipfile.ZipFile): + + """Supplement ZipFile class to support context manager for Python 2.6.""" + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + def __new__(cls, *args, **kwargs): + """Construct a ZipFile or ContextualZipFile as appropriate.""" + if hasattr(zipfile.ZipFile, '__exit__'): + return zipfile.ZipFile(*args, **kwargs) + return super(ContextualZipFile, cls).__new__(cls) + + +@contextlib.contextmanager +def archive_context(filename): + """ + Unzip filename to a temporary directory, set to the cwd. + + The unzipped target is cleaned up after. + """ tmpdir = tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) old_wd = os.getcwd() try: os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - tar.close() + with ContextualZipFile(filename) as archive: + archive.extractall() # going in the directory subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) os.chdir(subdir) log.warn('Now working in %s', subdir) - - # building an egg - log.warn('Building a Distribute egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + yield finally: os.chdir(old_wd) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') + shutil.rmtree(tmpdir) def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' + """Download Setuptools.""" + egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' % (version, sys.version_info[0], sys.version_info[1])) if not os.path.exists(egg): - tarball = download_setuptools(version, download_base, + archive = download_setuptools(version, download_base, to_dir, download_delay) - _build_egg(egg, tarball, to_dir) + _build_egg(egg, archive, to_dir) sys.path.insert(0, egg) + + # Remove previously-imported pkg_resources if present (see + # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). + if 'pkg_resources' in sys.modules: + del sys.modules['pkg_resources'] + import setuptools setuptools.bootstrap_install_from = egg -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15, no_fake=True): - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - was_imported = 'pkg_resources' in sys.modules or \ - 'setuptools' in sys.modules - try: - try: - import pkg_resources - if not hasattr(pkg_resources, '_distribute'): - if not no_fake: - _fake_setuptools() - raise ImportError - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("distribute>="+version) - return - except pkg_resources.VersionConflict: - e = sys.exc_info()[1] - if was_imported: - sys.stderr.write( - "The required version of distribute (>=%s) is not available,\n" - "and can't be installed while this script is running. Please\n" - "install a more recent version first, using\n" - "'easy_install -U distribute'." - "\n\n(Currently using %r)\n" % (version, e.args[0])) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return _do_download(version, download_base, to_dir, - download_delay) - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, - download_delay) - finally: - if not no_fake: - _create_fake_setuptools_pkg_info(to_dir) - -def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, delay=15): - """Download distribute from a specified location and return its filename +def use_setuptools( + version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=DEFAULT_SAVE_DIR, download_delay=15): + """ + Ensure that a setuptools version is installed. - `version` should be a valid distribute version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. + Return None. Raise SystemExit if the requested version + or later cannot be installed. """ - # making sure we use the absolute path to_dir = os.path.abspath(to_dir) + + # prior to importing, capture the module state for + # representative modules. + rep_modules = 'pkg_resources', 'setuptools' + imported = set(sys.modules).intersection(rep_modules) + try: - from urllib.request import urlopen + import pkg_resources + pkg_resources.require("setuptools>=" + version) + # a suitable version is already installed + return except ImportError: - from urllib2 import urlopen - tgz_name = "distribute-%s.tar.gz" % version - url = download_base + tgz_name - saveto = os.path.join(to_dir, tgz_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - log.warn("Downloading %s", url) - src = urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = src.read() - dst = open(saveto, "wb") - dst.write(data) - finally: - if src: - src.close() - if dst: - dst.close() - return os.path.realpath(saveto) + # pkg_resources not available; setuptools is not installed; download + pass + except pkg_resources.DistributionNotFound: + # no version of setuptools was found; allow download + pass + except pkg_resources.VersionConflict as VC_err: + if imported: + _conflict_bail(VC_err, version) -def _no_sandbox(function): - def __no_sandbox(*args, **kw): - try: - from setuptools.sandbox import DirectorySandbox - if not hasattr(DirectorySandbox, '_old'): - def violation(*args): - pass - DirectorySandbox._old = DirectorySandbox._violation - DirectorySandbox._violation = violation - patched = True - else: - patched = False - except ImportError: - patched = False + # otherwise, unload pkg_resources to allow the downloaded version to + # take precedence. + del pkg_resources + _unload_pkg_resources() + + return _do_download(version, download_base, to_dir, download_delay) - try: - return function(*args, **kw) - finally: - if patched: - DirectorySandbox._violation = DirectorySandbox._old - del DirectorySandbox._old - - return __no_sandbox - -def _patch_file(path, content): - """Will backup the file then patch it""" - existing_content = open(path).read() - if existing_content == content: - # already patched - log.warn('Already patched.') - return False - log.warn('Patching...') - _rename_path(path) - f = open(path, 'w') - try: - f.write(content) - finally: - f.close() - return True -_patch_file = _no_sandbox(_patch_file) +def _conflict_bail(VC_err, version): + """ + Setuptools was imported prior to invocation, so it is + unsafe to unload it. Bail out. + """ + conflict_tmpl = textwrap.dedent(""" + The required version of setuptools (>={version}) is not available, + and can't be installed while this script is running. Please + install a more recent version first, using + 'easy_install -U setuptools'. -def _same_content(path, content): - return open(path).read() == content + (Currently using {VC_err.args[0]!r}) + """) + msg = conflict_tmpl.format(**locals()) + sys.stderr.write(msg) + sys.exit(2) -def _rename_path(path): - new_name = path + '.OLD.%s' % time.time() - log.warn('Renaming %s into %s', path, new_name) - os.rename(path, new_name) - return new_name -def _remove_flat_installation(placeholder): - if not os.path.isdir(placeholder): - log.warn('Unkown installation at %s', placeholder) - return False - found = False - for file in os.listdir(placeholder): - if fnmatch.fnmatch(file, 'setuptools*.egg-info'): - found = True - break - if not found: - log.warn('Could not locate setuptools*.egg-info') - return +def _unload_pkg_resources(): + del_modules = [ + name for name in sys.modules + if name.startswith('pkg_resources') + ] + for mod_name in del_modules: + del sys.modules[mod_name] - log.warn('Removing elements out of the way...') - pkg_info = os.path.join(placeholder, file) - if os.path.isdir(pkg_info): - patched = _patch_egg_dir(pkg_info) - else: - patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) - if not patched: - log.warn('%s already patched.', pkg_info) +def _clean_check(cmd, target): + """ + Run the command to download target. + + If the command fails, clean up before re-raising the error. + """ + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + if os.access(target, os.F_OK): + os.unlink(target) + raise + + +def download_file_powershell(url, target): + """ + Download the file at url to target using Powershell. + + Powershell will validate trust. + Raise an exception if the command cannot complete. + """ + target = os.path.abspath(target) + ps_cmd = ( + "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " + "[System.Net.CredentialCache]::DefaultCredentials; " + "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" + % vars() + ) + cmd = [ + 'powershell', + '-Command', + ps_cmd, + ] + _clean_check(cmd, target) + + +def has_powershell(): + """Determine if Powershell is available.""" + if platform.system() != 'Windows': return False - # now let's move the files out of the way - for element in ('setuptools', 'pkg_resources.py', 'site.py'): - element = os.path.join(placeholder, element) - if os.path.exists(element): - _rename_path(element) - else: - log.warn('Could not find the %s element of the ' - 'Setuptools distribution', element) + cmd = ['powershell', '-Command', 'echo test'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False return True +download_file_powershell.viable = has_powershell -_remove_flat_installation = _no_sandbox(_remove_flat_installation) -def _after_install(dist): - log.warn('After install bootstrap.') - placeholder = dist.get_command_obj('install').install_purelib - _create_fake_setuptools_pkg_info(placeholder) +def download_file_curl(url, target): + cmd = ['curl', url, '--silent', '--output', target] + _clean_check(cmd, target) -def _create_fake_setuptools_pkg_info(placeholder): - if not placeholder or not os.path.exists(placeholder): - log.warn('Could not find the install location') - return - pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) - setuptools_file = 'setuptools-%s-py%s.egg-info' % \ - (SETUPTOOLS_FAKED_VERSION, pyver) - pkg_info = os.path.join(placeholder, setuptools_file) - if os.path.exists(pkg_info): - log.warn('%s already exists', pkg_info) - return - log.warn('Creating %s', pkg_info) - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() +def has_curl(): + cmd = ['curl', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True +download_file_curl.viable = has_curl - pth_file = os.path.join(placeholder, 'setuptools.pth') - log.warn('Creating %s', pth_file) - f = open(pth_file, 'w') - try: - f.write(os.path.join(os.curdir, setuptools_file)) - finally: - f.close() -_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info) +def download_file_wget(url, target): + cmd = ['wget', url, '--quiet', '--output-document', target] + _clean_check(cmd, target) -def _patch_egg_dir(path): - # let's check if it's already patched - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - if os.path.exists(pkg_info): - if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): - log.warn('%s already patched.', pkg_info) + +def has_wget(): + cmd = ['wget', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: return False - _rename_path(path) - os.mkdir(path) - os.mkdir(os.path.join(path, 'EGG-INFO')) - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - f = open(pkg_info, 'w') + return True +download_file_wget.viable = has_wget + + +def download_file_insecure(url, target): + """Use Python to download the file, without connection authentication.""" + src = urlopen(url) try: - f.write(SETUPTOOLS_PKG_INFO) + # Read all the data in one block. + data = src.read() finally: - f.close() - return True + src.close() -_patch_egg_dir = _no_sandbox(_patch_egg_dir) - -def _before_install(): - log.warn('Before install bootstrap.') - _fake_setuptools() - - -def _under_prefix(location): - if 'install' not in sys.argv: - return True - args = sys.argv[sys.argv.index('install')+1:] - for index, arg in enumerate(args): - for option in ('--root', '--prefix'): - if arg.startswith('%s=' % option): - top_dir = arg.split('root=')[-1] - return location.startswith(top_dir) - elif arg == option: - if len(args) > index: - top_dir = args[index+1] - return location.startswith(top_dir) - if arg == '--user' and USER_SITE is not None: - return location.startswith(USER_SITE) - return True + # Write all the data in one block to avoid creating a partial file. + with open(target, "wb") as dst: + dst.write(data) +download_file_insecure.viable = lambda: True -def _fake_setuptools(): - log.warn('Scanning installed packages') - try: - import pkg_resources - except ImportError: - # we're cool - log.warn('Setuptools or Distribute does not seem to be installed.') - return - ws = pkg_resources.working_set - try: - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', - replacement=False)) - except TypeError: - # old distribute API - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) - - if setuptools_dist is None: - log.warn('No setuptools distribution found') - return - # detecting if it was already faked - setuptools_location = setuptools_dist.location - log.warn('Setuptools installation detected at %s', setuptools_location) - - # if --root or --preix was provided, and if - # setuptools is not located in them, we don't patch it - if not _under_prefix(setuptools_location): - log.warn('Not patching, --root or --prefix is installing Distribute' - ' in another location') - return +def get_best_downloader(): + downloaders = ( + download_file_powershell, + download_file_curl, + download_file_wget, + download_file_insecure, + ) + viable_downloaders = (dl for dl in downloaders if dl.viable()) + return next(viable_downloaders, None) - # let's see if its an egg - if not setuptools_location.endswith('.egg'): - log.warn('Non-egg installation') - res = _remove_flat_installation(setuptools_location) - if not res: - return - else: - log.warn('Egg installation') - pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') - if (os.path.exists(pkg_info) and - _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): - log.warn('Already patched.') - return - log.warn('Patching...') - # let's create a fake egg replacing setuptools one - res = _patch_egg_dir(setuptools_location) - if not res: - return - log.warn('Patched done.') - _relaunch() - - -def _relaunch(): - log.warn('Relaunching...') - # we have to relaunch the process - # pip marker to avoid a relaunch bug - if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']: - sys.argv[0] = 'setup.py' - args = [sys.executable] + sys.argv - sys.exit(subprocess.call(args)) - - -def _extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). + +def download_setuptools( + version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=DEFAULT_SAVE_DIR, delay=15, + downloader_factory=get_best_downloader): """ - import copy - import operator - from tarfile import ExtractError - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 - self.extract(tarinfo, path) - - # Reverse sort directories. - if sys.version_info < (2, 4): - def sorter(dir1, dir2): - return cmp(dir1.name, dir2.name) - directories.sort(sorter) - directories.reverse() - else: - directories.sort(key=operator.attrgetter('name'), reverse=True) - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError: - e = sys.exc_info()[1] - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) + Download setuptools from a specified location and return its filename. + + `version` should be a valid setuptools version number that is available + as an sdist for download under the `download_base` URL (which should end + with a '/'). `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + + ``downloader_factory`` should be a function taking no arguments and + returning a function for downloading a URL to a target. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + zip_name = "setuptools-%s.zip" % version + url = download_base + zip_name + saveto = os.path.join(to_dir, zip_name) + if not os.path.exists(saveto): # Avoid repeated downloads + log.warn("Downloading %s", url) + downloader = downloader_factory() + downloader(url, saveto) + return os.path.realpath(saveto) -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - tarball = download_setuptools() - _install(tarball) +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the setuptools package. + Returns list of command line arguments. + """ + return ['--user'] if options.user_install else [] + + +def _parse_args(): + """Parse the command line for options.""" + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the setuptools package') + parser.add_option( + '--insecure', dest='downloader_factory', action='store_const', + const=lambda: download_file_insecure, default=get_best_downloader, + help='Use internal, non-validating downloader' + ) + parser.add_option( + '--version', help="Specify which version to download", + default=DEFAULT_VERSION, + ) + parser.add_option( + '--to-dir', + help="Directory to save (and re-use) package", + default=DEFAULT_SAVE_DIR, + ) + options, args = parser.parse_args() + # positional arguments are ignored + return options + + +def _download_args(options): + """Return args for download_setuptools function from cmdline args.""" + return dict( + version=options.version, + download_base=options.download_base, + downloader_factory=options.downloader_factory, + to_dir=options.to_dir, + ) + + +def main(): + """Install or upgrade setuptools and EasyInstall.""" + options = _parse_args() + archive = download_setuptools(**_download_args(options)) + return _install(archive, _build_install_args(options)) if __name__ == '__main__': - main(sys.argv[1:]) + sys.exit(main()) diff --git a/tool/CHANGES.txt b/tool/CHANGES.txt index 0770dcb..c8f55da 100644 --- a/tool/CHANGES.txt +++ b/tool/CHANGES.txt @@ -1,3 +1,11 @@ +**************************************************************************** +As of ANTLR 3.5.2, March 25 2014, we are no longer updating this file. Instead, +we are using the github release mechanism. For example, here is +3.5.2 release notes: + +https://github.com/antlr/antlr3/releases/tag/3.5.2 +**************************************************************************** + ANTLR 3.5 Release January 4, 2012 diff --git a/tool/pom.xml b/tool/pom.xml index cc5134d..3098aeb 100644 --- a/tool/pom.xml +++ b/tool/pom.xml @@ -16,7 +16,7 @@ org.antlr antlr-master - 3.5.2 + 3.5.3 @@ -63,14 +63,10 @@ - org.antlr antlr3-maven-plugin - 3.5 - - target/generated-sources/antlr/org/antlr/grammar/v3 - + 3.5.2 diff --git a/tool/src/BUILD.bazel b/tool/src/BUILD.bazel new file mode 100644 index 0000000..30e9de7 --- /dev/null +++ b/tool/src/BUILD.bazel @@ -0,0 +1,145 @@ +"""BUILD.bazel file for ANTLR 3.""" + +load("@rules_java//java:defs.bzl", "java_binary", "java_library", "java_test") + +package(default_visibility = ["//visibility:private"]) + +java_binary( + name = "tool", + main_class = "org.antlr.Tool", + visibility = ["//:__pkg__"], + runtime_deps = [":tool_lib"], +) + +java_library( + name = "tool_lib", + srcs = glob(["main/java/**/*.java"]) + [ + "main/java/org/antlr/grammar/v3/ANTLRLexer.java", + "main/java/org/antlr/grammar/v3/ANTLRParser.java", + "main/java/org/antlr/grammar/v3/ANTLRTreePrinter.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Lexer.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Parser.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Tree.java", + "main/java/org/antlr/grammar/v3/ActionAnalysis.java", + "main/java/org/antlr/grammar/v3/ActionTranslator.java", + "main/java/org/antlr/grammar/v3/AssignTokenTypesWalker.java", + "main/java/org/antlr/grammar/v3/CodeGenTreeWalker.java", + "main/java/org/antlr/grammar/v3/DefineGrammarItemsWalker.java", + "main/java/org/antlr/grammar/v3/LeftRecursiveRuleWalker.java", + "main/java/org/antlr/grammar/v3/TreeToNFAConverter.java", + ], + javacopts = [ + "-Xep:EqualsHashCode:OFF", + ], + resource_strip_prefix = "tool/src/main/resources", + resources = glob(["main/resources/**/*.stg"]), + visibility = ["//visibility:public"], + deps = [ + ":tool_bootstrap", + "//:java_runtime", + "@stringtemplate4", + ], +) + +genrule( + name = "tool_bootstrap", + srcs = [ + "main/antlr3/org/antlr/grammar/v3/ANTLR.g", + "main/antlr3/org/antlr/grammar/v3/ANTLRTreePrinter.g", + "main/antlr3/org/antlr/grammar/v3/ANTLRv3.g", + "main/antlr3/org/antlr/grammar/v3/ANTLRv3Tree.g", + "main/antlr3/org/antlr/grammar/v3/ActionAnalysis.g", + "main/antlr3/org/antlr/grammar/v3/ActionTranslator.g", + "main/antlr3/org/antlr/grammar/v3/AssignTokenTypesWalker.g", + "main/antlr3/org/antlr/grammar/v3/CodeGenTreeWalker.g", + "main/antlr3/org/antlr/grammar/v3/DefineGrammarItemsWalker.g", + "main/antlr3/org/antlr/grammar/v3/LeftRecursiveRuleWalker.g", + "main/antlr3/org/antlr/grammar/v3/TreeToNFAConverter.g", + ], + outs = [ + "main/java/org/antlr/grammar/v3/ANTLRLexer.java", + "main/java/org/antlr/grammar/v3/ANTLRParser.java", + "main/java/org/antlr/grammar/v3/ANTLRTreePrinter.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Lexer.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Parser.java", + "main/java/org/antlr/grammar/v3/ANTLRv3Tree.java", + "main/java/org/antlr/grammar/v3/ActionAnalysis.java", + "main/java/org/antlr/grammar/v3/ActionTranslator.java", + "main/java/org/antlr/grammar/v3/AssignTokenTypesWalker.java", + "main/java/org/antlr/grammar/v3/CodeGenTreeWalker.java", + "main/java/org/antlr/grammar/v3/DefineGrammarItemsWalker.java", + "main/java/org/antlr/grammar/v3/LeftRecursiveRuleWalker.java", + "main/java/org/antlr/grammar/v3/TreeToNFAConverter.java", + ], + cmd = """ + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ANTLR.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ANTLRTreePrinter.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ANTLRv3.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ANTLRv3Tree.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ActionAnalysis.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/ActionTranslator.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/AssignTokenTypesWalker.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/CodeGenTreeWalker.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/DefineGrammarItemsWalker.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/LeftRecursiveRuleWalker.g) + $(JAVA) -cp $(location @antlr3_bootstrap//jar) org.antlr.Tool -fo $(RULEDIR)/main/java/org/antlr/grammar/v3 $(location :main/antlr3/org/antlr/grammar/v3/TreeToNFAConverter.g) + """, + toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"], + tools = ["@antlr3_bootstrap//jar"], +) + +java_test( + name = "tests", + srcs = glob(["test/java/**/*.java"]), + args = [ + "org.antlr.test.TestASTConstruction", + "org.antlr.test.TestAttributes", + "org.antlr.test.TestAutoAST", + "org.antlr.test.TestBufferedTreeNodeStream", + "org.antlr.test.TestCharDFAConversion", + "org.antlr.test.TestCommonTokenStream", + "org.antlr.test.TestCompositeGrammars", + "org.antlr.test.TestDFAConversion", + "org.antlr.test.TestDFAMatching", + "org.antlr.test.TestFastQueue", + "org.antlr.test.TestHeteroAST", + "org.antlr.test.TestInterpretedLexing", + "org.antlr.test.TestInterpretedParsing", + "org.antlr.test.TestIntervalSet", + "org.antlr.test.TestJavaCodeGeneration", + "org.antlr.test.TestLeftRecursion", + "org.antlr.test.TestLexer", + "org.antlr.test.TestMessages", + "org.antlr.test.TestNFAConstruction", + "org.antlr.test.TestRewriteAST", + "org.antlr.test.TestRewriteTemplates", + "org.antlr.test.TestSemanticPredicateEvaluation", + "org.antlr.test.TestSemanticPredicates", + "org.antlr.test.TestSets", + "org.antlr.test.TestSymbolDefinitions", + "org.antlr.test.TestSyntacticPredicateEvaluation", + "org.antlr.test.TestSyntaxErrors", + "org.antlr.test.TestTemplates", + "org.antlr.test.TestTokenRewriteStream", + "org.antlr.test.TestTopologicalSort", + "org.antlr.test.TestTreeGrammarRewriteAST", + "org.antlr.test.TestTreeIterator", + "org.antlr.test.TestTreeNodeStream", + "org.antlr.test.TestTreeParsing", + "org.antlr.test.TestTrees", + "org.antlr.test.TestTreeWizard", + ], + javacopts = [ + "-Xep:JUnit4RunWithMissing:OFF", + ], + main_class = "org.junit.runner.JUnitCore", + use_testrunner = False, + visibility = ["//:__pkg__"], + deps = [ + ":tool_lib", + "//:java_runtime", + "@hamcrest_core//jar", + "@junit//jar", + "@stringtemplate4", + ], +) diff --git a/tool/src/main/resources/org/antlr/codegen/templates/Cpp/Cpp.stg b/tool/src/main/resources/org/antlr/codegen/templates/Cpp/Cpp.stg index d94024b..571b0b1 100755 --- a/tool/src/main/resources/org/antlr/codegen/templates/Cpp/Cpp.stg +++ b/tool/src/main/resources/org/antlr/codegen/templates/Cpp/Cpp.stg @@ -1007,7 +1007,7 @@ parser( grammar, bitsets, ASTLabelType, superClass="Parser", - labelType="ImplTraits::CommonTokenType*", + labelType="const ImplTraits::CommonTokenType*", members={} ) ::= << diff --git a/tool/src/test/java/org/antlr/test/TestAutoAST.java b/tool/src/test/java/org/antlr/test/TestAutoAST.java index 14aeed0..b7295c2 100644 --- a/tool/src/test/java/org/antlr/test/TestAutoAST.java +++ b/tool/src/test/java/org/antlr/test/TestAutoAST.java @@ -369,7 +369,7 @@ public class TestAutoAST extends BaseTest { @Test public void testSetRootWithLabel() throws Exception { - + String grammar = "grammar T;\n" + "options {output=AST;}\n" + @@ -807,7 +807,7 @@ public class TestAutoAST extends BaseTest { // S U P P O R T - public void _test() throws Exception { + private void _test() throws Exception { String grammar = "grammar T;\n" + "options {output=AST;}\n" + diff --git a/tool/src/test/java/org/antlr/test/TestCharDFAConversion.java b/tool/src/test/java/org/antlr/test/TestCharDFAConversion.java index c1af910..8dd4e06 100644 --- a/tool/src/test/java/org/antlr/test/TestCharDFAConversion.java +++ b/tool/src/test/java/org/antlr/test/TestCharDFAConversion.java @@ -499,7 +499,7 @@ public class TestCharDFAConversion extends BaseTest { // S U P P O R T - public void _template() throws Exception { + private void _template() throws Exception { Grammar g = new Grammar( "grammar T;\n"+ "a : A | B;"); diff --git a/tool/src/test/java/org/antlr/test/TestDFAConversion.java b/tool/src/test/java/org/antlr/test/TestDFAConversion.java index b30bd20..cd06d64 100644 --- a/tool/src/test/java/org/antlr/test/TestDFAConversion.java +++ b/tool/src/test/java/org/antlr/test/TestDFAConversion.java @@ -1524,7 +1524,7 @@ As a result, alternative(s) 2 were disabled for that input // S U P P O R T - public void _template() throws Exception { + private void _template() throws Exception { Grammar g = new Grammar( "parser grammar t;\n"+ "a : A | B;"); diff --git a/tool/src/test/java/org/antlr/test/TestSemanticPredicateEvaluation.java b/tool/src/test/java/org/antlr/test/TestSemanticPredicateEvaluation.java index 6da7f31..dfc9e9c 100644 --- a/tool/src/test/java/org/antlr/test/TestSemanticPredicateEvaluation.java +++ b/tool/src/test/java/org/antlr/test/TestSemanticPredicateEvaluation.java @@ -225,7 +225,7 @@ public class TestSemanticPredicateEvaluation extends BaseTest { // S U P P O R T - public void _test() throws Exception { + private void _test() throws Exception { String grammar = "grammar T;\n" + "options {output=AST;}\n" + diff --git a/tool/src/test/java/org/antlr/test/TestSemanticPredicates.java b/tool/src/test/java/org/antlr/test/TestSemanticPredicates.java index 0ad540c..73b9bfe 100644 --- a/tool/src/test/java/org/antlr/test/TestSemanticPredicates.java +++ b/tool/src/test/java/org/antlr/test/TestSemanticPredicates.java @@ -185,7 +185,7 @@ public class TestSemanticPredicates extends BaseTest { ".s1-B->:s2=>1\n"; checkDecision(g, 1, expecting, new int[] {2}, new int[] {1,2}, "A B", new int[] {1}, null, 3); - } + } */ @Test public void testHoist2() throws Exception { @@ -768,7 +768,7 @@ public class TestSemanticPredicates extends BaseTest { // S U P P O R T - public void _template() throws Exception { + private void _template() throws Exception { Grammar g = new Grammar( "parser grammar t;\n"+ "a : A | B;"); -- cgit v1.2.3 From f193236f81e14b49873c7d6c1ef6d26fba60efc3 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Sat, 15 Oct 2022 21:33:29 -0700 Subject: Fix errorprone warnings that should be errors This commit is part of a large scale change to fix errorprone errors that have been downgraded to warnings in the android source tree, so that they can be promoted to errors again. The full list of changes include the following, but not all will be present in any one individual commit: BadAnnotationImplementation BadShiftAmount BanJNDI BoxedPrimitiveEquality ComparableType ComplexBooleanConstant CollectionToArraySafeParameter ConditionalExpressionNumericPromotion DangerousLiteralNull DoubleBraceInitialization DurationFrom DurationTemporalUnit EmptyTopLevelDeclaration EqualsNull EqualsReference FormatString FromTemporalAccessor GetClassOnAnnotation GetClassOnClass HashtableContains IdentityBinaryExpression IdentityHashMapBoxing InstantTemporalUnit InvalidTimeZoneID InvalidZoneId IsInstanceIncompatibleType JUnitParameterMethodNotFound LockOnBoxedPrimitive MathRoundIntLong MislabeledAndroidString MisusedDayOfYear MissingSuperCall MisusedWeekYear ModifyingCollectionWithItself NoCanIgnoreReturnValueOnClasses NonRuntimeAnnotation NullableOnContainingClass NullTernary OverridesJavaxInjectableMethod ParcelableCreator PeriodFrom PreconditionsInvalidPlaceholder ProtoBuilderReturnValueIgnored ProtoFieldNullComparison RandomModInteger RectIntersectReturnValueIgnored ReturnValueIgnored SelfAssignment SelfComparison SelfEquals SizeGreaterThanOrEqualsZero StringBuilderInitWithChar TreeToString TryFailThrowable UnnecessaryCheckNotNull UnusedCollectionModifiedInPlace XorPower See https://errorprone.info/bugpatterns for more information on the checks. Bug: 253827323 Test: m RUN_ERROR_PRONE=true javac-check Change-Id: Ied6ef35b36969aae537ec342ed7b4f4935b30148 --- Android.bp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Android.bp b/Android.bp index d4a1660..18bd40a 100644 --- a/Android.bp +++ b/Android.bp @@ -53,6 +53,9 @@ java_library_host { //Remove DOTTreeGenerator.java, so that we don't have the StringTemplate library as a dependency exclude_srcs: ["runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java"], errorprone: { - javacflags: ["-Xep:MissingOverride:OFF"], // b/73499927 + javacflags: [ + "-Xep:MissingOverride:OFF", // b/73499927 + "-Xep:EqualsHashCode:WARN", + ], }, } -- cgit v1.2.3