Antlr4.Tool.GrammarParserInterpreter.FindOuterMostDecisionStates C# (CSharp) Method

FindOuterMostDecisionStates() public method

public FindOuterMostDecisionStates ( ) : Antlr4.Runtime.Sharpen.BitSet
return Antlr4.Runtime.Sharpen.BitSet
        public virtual BitSet FindOuterMostDecisionStates()
        {
            BitSet track = new BitSet(atn.states.Count);
            int numberOfDecisions = atn.NumberOfDecisions;
            for (int i = 0; i < numberOfDecisions; i++)
            {
                DecisionState decisionState = atn.GetDecisionState(i);
                RuleStartState startState = atn.ruleToStartState[decisionState.ruleIndex];
                // Look for StarLoopEntryState that is in any left recursive rule
                if (decisionState is StarLoopEntryState)
                {
                    StarLoopEntryState loopEntry = (StarLoopEntryState)decisionState;
                    if (loopEntry.precedenceRuleDecision)
                    {
                        // Recursive alts always result in a (...)* in the transformed
                        // left recursive rule and that always has a BasicBlockStartState
                        // even if just 1 recursive alt exists.
                        ATNState blockStart = loopEntry.Transition(0).target;
                        // track the StarBlockStartState associated with the recursive alternatives
                        track.Set(blockStart.stateNumber);
                    }
                }
                else if (startState.Transition(0).target == decisionState)
                {
                    // always track outermost block for any rule if it exists
                    track.Set(decisionState.stateNumber);
                }
            }
            return track;
        }