From f8c643304ba758b987cfde10172cb69e6c2ecb01 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Sat, 16 Feb 2013 09:47:31 -0600 Subject: [PATCH] Add type mappings for BitSet; update mapping for BigInteger to use System.Numerics.BigInteger --- Antlr4.Runtime/Atn/ATNConfigSet.cs | 13 +++--- Antlr4.Runtime/Atn/ATNSimulator.cs | 3 +- Antlr4.Runtime/Atn/ParserATNSimulator.cs | 45 ++++++++++--------- Antlr4.Runtime/Atn/SemanticContext.cs | 5 ++- Antlr4.Runtime/BaseErrorListener.cs | 3 +- Antlr4.Runtime/BufferedTokenStream.cs | 5 ++- Antlr4.Runtime/Dfa/DFAState.cs | 5 ++- Antlr4.Runtime/DiagnosticErrorListener.cs | 3 +- Antlr4.Runtime/IParserErrorListener.cs | 3 +- .../Misc/RuleDependencyProcessor.cs | 30 ++++++------- Antlr4.Runtime/ProxyParserErrorListener.cs | 3 +- reference/sharpen-all-options.txt | 3 +- 12 files changed, 66 insertions(+), 55 deletions(-) diff --git a/Antlr4.Runtime/Atn/ATNConfigSet.cs b/Antlr4.Runtime/Atn/ATNConfigSet.cs index 16bd91df8..3626a3b02 100644 --- a/Antlr4.Runtime/Atn/ATNConfigSet.cs +++ b/Antlr4.Runtime/Atn/ATNConfigSet.cs @@ -28,6 +28,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; +using System.Collections; using System.Collections.Generic; using System.Text; using Antlr4.Runtime.Atn; @@ -81,7 +82,7 @@ namespace Antlr4.Runtime.Atn private int uniqueAlt; - private BitSet conflictingAlts; + private BitArray conflictingAlts; private bool hasSemanticContext; @@ -159,13 +160,13 @@ namespace Antlr4.Runtime.Atn /// set. /// [NotNull] - public virtual BitSet GetRepresentedAlternatives() + public virtual BitArray GetRepresentedAlternatives() { if (conflictingAlts != null) { - return (BitSet)conflictingAlts.Clone(); + return (BitArray)conflictingAlts.Clone(); } - BitSet alts = new BitSet(); + BitArray alts = new BitArray(); foreach (ATNConfig config in this) { alts.Set(config.GetAlt()); @@ -597,12 +598,12 @@ namespace Antlr4.Runtime.Atn hasSemanticContext = true; } - public virtual BitSet GetConflictingAlts() + public virtual BitArray GetConflictingAlts() { return conflictingAlts; } - public virtual void SetConflictingAlts(BitSet conflictingAlts) + public virtual void SetConflictingAlts(BitArray conflictingAlts) { EnsureWritable(); this.conflictingAlts = conflictingAlts; diff --git a/Antlr4.Runtime/Atn/ATNSimulator.cs b/Antlr4.Runtime/Atn/ATNSimulator.cs index 325ff66a1..b9360af3f 100644 --- a/Antlr4.Runtime/Atn/ATNSimulator.cs +++ b/Antlr4.Runtime/Atn/ATNSimulator.cs @@ -28,6 +28,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; +using System.Collections; using System.Collections.Generic; using System.IO; using Antlr4.Runtime.Atn; @@ -799,7 +800,7 @@ nextState_break: ; { return true; } - BitSet reachable = new BitSet(atn.states.Count); + BitArray reachable = new BitArray(atn.states.Count); IDeque worklist = new ArrayDeque(); worklist.AddItem(transition.followState); while (!worklist.IsEmpty()) diff --git a/Antlr4.Runtime/Atn/ParserATNSimulator.cs b/Antlr4.Runtime/Atn/ParserATNSimulator.cs index dc5314150..605dec509 100644 --- a/Antlr4.Runtime/Atn/ParserATNSimulator.cs +++ b/Antlr4.Runtime/Atn/ParserATNSimulator.cs @@ -27,6 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Collections; using System.Collections.Generic; using Antlr4.Runtime; using Antlr4.Runtime.Atn; @@ -543,7 +544,7 @@ namespace Antlr4.Runtime.Atn { input.Seek(startIndex); } - BitSet predictions = EvalSemanticContext(s.predicates, outerContext, true); + BitArray predictions = EvalSemanticContext(s.predicates, outerContext, true); if (predictions.Cardinality() == 1) { return predictions.NextSetBit(0); @@ -574,8 +575,8 @@ namespace Antlr4.Runtime.Atn { input.Seek(startIndex); } - BitSet alts = EvalSemanticContext(s.predicates, outerContext, reportAmbiguities && - predictionMode == PredictionMode.LlExactAmbigDetection); + BitArray alts = EvalSemanticContext(s.predicates, outerContext, reportAmbiguities + && predictionMode == PredictionMode.LlExactAmbigDetection); switch (alts.Cardinality()) { case 0: @@ -726,7 +727,7 @@ namespace Antlr4.Runtime.Atn input.Seek(startIndex); } // always use complete evaluation here since we'll want to retry with full context if still ambiguous - BitSet alts = EvalSemanticContext(predPredictions, outerContext, true); + BitArray alts = EvalSemanticContext(predPredictions, outerContext, true); if (alts.Cardinality() == 1) { return alts.NextSetBit(0); @@ -756,8 +757,8 @@ namespace Antlr4.Runtime.Atn { input.Seek(startIndex); } - BitSet alts = EvalSemanticContext(D.predicates, outerContext, reportAmbiguities && - predictionMode == PredictionMode.LlExactAmbigDetection); + BitArray alts = EvalSemanticContext(D.predicates, outerContext, reportAmbiguities + && predictionMode == PredictionMode.LlExactAmbigDetection); D.prediction = ATN.InvalidAltNumber; switch (alts.Cardinality()) { @@ -801,7 +802,7 @@ namespace Antlr4.Runtime.Atn { if (previous.s0 != null) { - BitSet alts = new BitSet(); + BitArray alts = new BitArray(); foreach (ATNConfig config in previous.s0.configs) { if (config.GetReachesIntoOuterContext() || config.GetState() is RuleStopState) @@ -1138,7 +1139,7 @@ namespace Antlr4.Runtime.Atn public virtual DFAState.PredPrediction[] PredicateDFAState(DFAState D, ATNConfigSet configs, int nalts) { - BitSet conflictingAlts = GetConflictingAltsFromConfigSet(configs); + BitArray conflictingAlts = GetConflictingAltsFromConfigSet(configs); SemanticContext[] altToPred = GetPredsForAmbigAlts(conflictingAlts, configs, nalts ); // altToPred[uniqueAlt] is now our validating predicate (if any) @@ -1155,7 +1156,7 @@ namespace Antlr4.Runtime.Atn return predPredictions; } - public virtual SemanticContext[] GetPredsForAmbigAlts(BitSet ambigAlts, ATNConfigSet + public virtual SemanticContext[] GetPredsForAmbigAlts(BitArray ambigAlts, ATNConfigSet configs, int nalts) { // REACH=[1|1|[]|0:0, 1|2|[]|0:1] @@ -1192,7 +1193,7 @@ namespace Antlr4.Runtime.Atn return altToPred; } - public virtual DFAState.PredPrediction[] GetPredicatePredictions(BitSet ambigAlts + public virtual DFAState.PredPrediction[] GetPredicatePredictions(BitArray ambigAlts , SemanticContext[] altToPred) { IList pairs = new List(); @@ -1240,10 +1241,10 @@ namespace Antlr4.Runtime.Atn /// predicate indicates an alt containing an /// unpredicated config which behaves as "always true." /// - public virtual BitSet EvalSemanticContext(DFAState.PredPrediction[] predPredictions + public virtual BitArray EvalSemanticContext(DFAState.PredPrediction[] predPredictions , ParserRuleContext outerContext, bool complete) { - BitSet predictions = new BitSet(); + BitArray predictions = new BitArray(); foreach (DFAState.PredPrediction pair in predPredictions) { if (pair.pred == null) @@ -1614,7 +1615,7 @@ namespace Antlr4.Runtime.Atn private static readonly IComparer StateAltSortComparator = new _IComparer_1557 (); - private BitSet IsConflicted(ATNConfigSet configset, PredictionContextCache contextCache + private BitArray IsConflicted(ATNConfigSet configset, PredictionContextCache contextCache ) { if (configset.GetUniqueAlt() != ATN.InvalidAltNumber || configset.Count <= 1) @@ -1625,7 +1626,7 @@ namespace Antlr4.Runtime.Atn configs.Sort(StateAltSortComparator); bool exact = !configset.GetDipsIntoOuterContext() && predictionMode == PredictionMode .LlExactAmbigDetection; - BitSet alts = new BitSet(); + BitArray alts = new BitArray(); int minAlt = configs[0].GetAlt(); alts.Set(minAlt); // quick check 1 & 2 => if we assume #1 holds and check #2 against the @@ -1645,12 +1646,12 @@ namespace Antlr4.Runtime.Atn currentState = stateNumber; } } - BitSet representedAlts = null; + BitArray representedAlts = null; if (exact) { currentState = configs[0].GetState().GetNonStopStateNumber(); // get the represented alternatives of the first state - representedAlts = new BitSet(); + representedAlts = new BitArray(); int maxAlt = minAlt; for (int i_1 = 0; i_1 < configs.Count; i_1++) { @@ -1801,19 +1802,19 @@ namespace Antlr4.Runtime.Atn return alts; } - protected internal virtual BitSet GetConflictingAltsFromConfigSet(ATNConfigSet configs - ) + protected internal virtual BitArray GetConflictingAltsFromConfigSet(ATNConfigSet + configs) { - BitSet conflictingAlts = configs.GetConflictingAlts(); + BitArray conflictingAlts = configs.GetConflictingAlts(); if (conflictingAlts == null && configs.GetUniqueAlt() != ATN.InvalidAltNumber) { - conflictingAlts = new BitSet(); + conflictingAlts = new BitArray(); conflictingAlts.Set(configs.GetUniqueAlt()); } return conflictingAlts; } - protected internal virtual int ResolveToMinAlt(DFAState D, BitSet conflictingAlts + protected internal virtual int ResolveToMinAlt(DFAState D, BitArray conflictingAlts ) { // kill dead alts so we don't chase them ever @@ -2115,7 +2116,7 @@ namespace Antlr4.Runtime.Atn /// If context sensitive parsing, we know it's ambiguity not conflict public virtual void ReportAmbiguity(DFA dfa, DFAState D, int startIndex, int stopIndex - , BitSet ambigAlts, ATNConfigSet configs) + , BitArray ambigAlts, ATNConfigSet configs) { if (debug || retry_debug) { diff --git a/Antlr4.Runtime/Atn/SemanticContext.cs b/Antlr4.Runtime/Atn/SemanticContext.cs index 1db82d145..f8db934a4 100644 --- a/Antlr4.Runtime/Atn/SemanticContext.cs +++ b/Antlr4.Runtime/Atn/SemanticContext.cs @@ -366,8 +366,9 @@ namespace Antlr4.Runtime.Atn return result; } - /// ParserATNSimulator.GetPredsForAmbigAlts(Sharpen.BitSet, ATNConfigSet, int) + /// ParserATNSimulator.GetPredsForAmbigAlts(System.Collections.BitArray, ATNConfigSet, int) + /// public static SemanticContext Or(SemanticContext a, SemanticContext b) { if (a == null) diff --git a/Antlr4.Runtime/BaseErrorListener.cs b/Antlr4.Runtime/BaseErrorListener.cs index 37f13b9f4..d4f89ea80 100644 --- a/Antlr4.Runtime/BaseErrorListener.cs +++ b/Antlr4.Runtime/BaseErrorListener.cs @@ -27,6 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Collections; using Antlr4.Runtime; using Antlr4.Runtime.Atn; using Antlr4.Runtime.Dfa; @@ -44,7 +45,7 @@ namespace Antlr4.Runtime } public virtual void ReportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int - stopIndex, BitSet ambigAlts, ATNConfigSet configs) + stopIndex, BitArray ambigAlts, ATNConfigSet configs) { } diff --git a/Antlr4.Runtime/BufferedTokenStream.cs b/Antlr4.Runtime/BufferedTokenStream.cs index 14b03d987..2deab891a 100644 --- a/Antlr4.Runtime/BufferedTokenStream.cs +++ b/Antlr4.Runtime/BufferedTokenStream.cs @@ -28,6 +28,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; +using System.Collections; using System.Collections.Generic; using System.Text; using Antlr4.Runtime; @@ -381,7 +382,7 @@ namespace Antlr4.Runtime /// 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) + public virtual IList GetTokens(int start, int stop, BitArray types) { LazyInit(); if (start < 0 || stop >= tokens.Count || stop < 0 || start >= tokens.Count) @@ -412,7 +413,7 @@ namespace Antlr4.Runtime public virtual IList GetTokens(int start, int stop, int ttype) { - BitSet s = new BitSet(ttype); + BitArray s = new BitArray(ttype); s.Set(ttype); return GetTokens(start, stop, s); } diff --git a/Antlr4.Runtime/Dfa/DFAState.cs b/Antlr4.Runtime/Dfa/DFAState.cs index 250977ec9..f701b81d4 100644 --- a/Antlr4.Runtime/Dfa/DFAState.cs +++ b/Antlr4.Runtime/Dfa/DFAState.cs @@ -28,6 +28,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; +using System.Collections; using System.Collections.Generic; using System.Text; using Antlr4.Runtime.Atn; @@ -111,7 +112,7 @@ namespace Antlr4.Runtime.Dfa /// Symbols in this set require a global context transition before matching an input symbol. /// [Nullable] - private BitSet contextSymbols; + private BitArray contextSymbols; /// /// This list is computed by @@ -190,7 +191,7 @@ namespace Antlr4.Runtime.Dfa { return; } - contextSymbols = new BitSet(); + contextSymbols = new BitArray(); contextEdges = new SingletonEdgeMap(-1, atn.states.Count - 1); } } diff --git a/Antlr4.Runtime/DiagnosticErrorListener.cs b/Antlr4.Runtime/DiagnosticErrorListener.cs index 72799378c..0e4f60c25 100644 --- a/Antlr4.Runtime/DiagnosticErrorListener.cs +++ b/Antlr4.Runtime/DiagnosticErrorListener.cs @@ -27,6 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Collections; using Antlr4.Runtime; using Antlr4.Runtime.Atn; using Antlr4.Runtime.Dfa; @@ -38,7 +39,7 @@ namespace Antlr4.Runtime public class DiagnosticErrorListener : BaseErrorListener { public override void ReportAmbiguity(Parser recognizer, DFA dfa, int startIndex, - int stopIndex, BitSet ambigAlts, ATNConfigSet configs) + int stopIndex, BitArray ambigAlts, ATNConfigSet configs) { string format = "reportAmbiguity d=%s: ambigAlts=%s, input='%s'"; recognizer.NotifyErrorListeners(string.Format(format, GetDecisionDescription(recognizer diff --git a/Antlr4.Runtime/IParserErrorListener.cs b/Antlr4.Runtime/IParserErrorListener.cs index ee60951b0..0386f1ee1 100644 --- a/Antlr4.Runtime/IParserErrorListener.cs +++ b/Antlr4.Runtime/IParserErrorListener.cs @@ -27,6 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Collections; using Antlr4.Runtime; using Antlr4.Runtime.Atn; using Antlr4.Runtime.Dfa; @@ -49,7 +50,7 @@ namespace Antlr4.Runtime /// that can match the input sequence. This method is only called when we are parsing with /// full context. /// - void ReportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, BitSet + void ReportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, BitArray ambigAlts, ATNConfigSet configs); void ReportAttemptingFullContext(Parser recognizer, DFA dfa, int startIndex, int diff --git a/Antlr4.Runtime/Misc/RuleDependencyProcessor.cs b/Antlr4.Runtime/Misc/RuleDependencyProcessor.cs index 01cd55879..1665148f0 100644 --- a/Antlr4.Runtime/Misc/RuleDependencyProcessor.cs +++ b/Antlr4.Runtime/Misc/RuleDependencyProcessor.cs @@ -171,12 +171,12 @@ namespace Antlr4.Runtime.Misc EnumSet dependents = EnumSet.Of(Dependents.Self, dependency.GetItem1( ).Dependents()); ReportUnimplementedDependents(dependency, dependents); - BitSet checked = new BitSet(); + BitArray checked = new BitArray(); int highestRequiredDependency = CheckDependencyVersion(dependency, ruleNames, ruleVersions , effectiveRule, null); if (dependents.Contains(Dependents.Parents)) { - BitSet parents = relations.parents[dependency.GetItem1().Rule()]; + BitArray parents = relations.parents[dependency.GetItem1().Rule()]; for (int parent = parents.NextSetBit(0); parent >= 0; parent = parents.NextSetBit (parent + 1)) { @@ -192,7 +192,7 @@ namespace Antlr4.Runtime.Misc } if (dependents.Contains(Dependents.Children)) { - BitSet children = relations.children[dependency.GetItem1().Rule()]; + BitArray children = relations.children[dependency.GetItem1().Rule()]; for (int child = children.NextSetBit(0); child >= 0; child = children.NextSetBit( child + 1)) { @@ -208,7 +208,7 @@ namespace Antlr4.Runtime.Misc } if (dependents.Contains(Dependents.Ancestors)) { - BitSet ancestors = relations.GetAncestors(dependency.GetItem1().Rule()); + BitArray ancestors = relations.GetAncestors(dependency.GetItem1().Rule()); for (int ancestor = ancestors.NextSetBit(0); ancestor >= 0; ancestor = ancestors. NextSetBit(ancestor + 1)) { @@ -224,7 +224,7 @@ namespace Antlr4.Runtime.Misc } if (dependents.Contains(Dependents.Descendants)) { - BitSet descendants = relations.GetDescendants(dependency.GetItem1().Rule()); + BitArray descendants = relations.GetDescendants(dependency.GetItem1().Rule()); for (int descendant = descendants.NextSetBit(0); descendant >= 0; descendant = descendants .NextSetBit(descendant + 1)) { @@ -782,21 +782,21 @@ namespace Antlr4.Runtime.Misc private sealed class RuleRelations { - private readonly BitSet[] parents; + private readonly BitArray[] parents; - private readonly BitSet[] children; + private readonly BitArray[] children; public RuleRelations(int ruleCount) { - parents = new BitSet[ruleCount]; + parents = new BitArray[ruleCount]; for (int i = 0; i < ruleCount; i++) { - parents[i] = new BitSet(); + parents[i] = new BitArray(); } - children = new BitSet[ruleCount]; + children = new BitArray[ruleCount]; for (int i_1 = 0; i_1 < ruleCount; i_1++) { - children[i_1] = new BitSet(); + children[i_1] = new BitArray(); } } @@ -817,9 +817,9 @@ namespace Antlr4.Runtime.Misc return true; } - public BitSet GetAncestors(int rule) + public BitArray GetAncestors(int rule) { - BitSet ancestors = new BitSet(); + BitArray ancestors = new BitArray(); ancestors.Or(parents[rule]); while (true) { @@ -837,9 +837,9 @@ namespace Antlr4.Runtime.Misc return ancestors; } - public BitSet GetDescendants(int rule) + public BitArray GetDescendants(int rule) { - BitSet descendants = new BitSet(); + BitArray descendants = new BitArray(); descendants.Or(children[rule]); while (true) { diff --git a/Antlr4.Runtime/ProxyParserErrorListener.cs b/Antlr4.Runtime/ProxyParserErrorListener.cs index ef48ed9e6..c6fbff6a7 100644 --- a/Antlr4.Runtime/ProxyParserErrorListener.cs +++ b/Antlr4.Runtime/ProxyParserErrorListener.cs @@ -27,6 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Collections; using System.Collections.Generic; using Antlr4.Runtime; using Antlr4.Runtime.Atn; @@ -44,7 +45,7 @@ namespace Antlr4.Runtime } public virtual void ReportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int - stopIndex, BitSet ambigAlts, ATNConfigSet configs) + stopIndex, BitArray ambigAlts, ATNConfigSet configs) { foreach (IAntlrErrorListener listener in GetDelegates()) { diff --git a/reference/sharpen-all-options.txt b/reference/sharpen-all-options.txt index e5ec4a755..7ba3ff889 100644 --- a/reference/sharpen-all-options.txt +++ b/reference/sharpen-all-options.txt @@ -115,6 +115,7 @@ -typeMapping java.net.InetAddress System.Net.IPAddress -typeMapping java.util.TimeZone System.TimeZoneInfo -typeMapping java.util.ArrayList<> System.Collections.Generic.List +-typeMapping java.util.BitSet System.Collections.BitArray -typeMapping java.util.zip.Inflater ICSharpCode.SharpZipLib.Zip.Compression.Inflater -typeMapping java.util.zip.Deflater ICSharpCode.SharpZipLib.Zip.Compression.Deflater -typeMapping java.util.zip.ZipException ICSharpCode.SharpZipLib.SharpZipBaseException @@ -131,7 +132,7 @@ -typeMapping java.net.SocketAddress System.Net.EndPoint -typeMapping java.net.Socket System.Net.Sockets.Socket -typeMapping java.net.ServerSocket System.Net.Sockets.Socket --typeMapping java.math.BigInteger Mono.Math.BigInteger +-typeMapping java.math.BigInteger System.Numerics.BigInteger -typeMapping java.util.Properties Sharpen.Properties -typeMapping java.util.concurrent.Semaphore System.Threading.Semaphore -typeMapping java.util.Enumeration System.Collections.Generic.IEnumeration