Antlr3.Analysis.DecisionProbe.ComputeAltToProblemMaps C# (CSharp) Method

ComputeAltToProblemMaps() private method

private ComputeAltToProblemMaps ( IEnumerable dfaStatesUnaliased, IDictionary configurationsMap, IDictionary altToTargetToCallSitesMap, DFAState>.IDictionary altToDFAState ) : void
dfaStatesUnaliased IEnumerable
configurationsMap IDictionary
altToTargetToCallSitesMap IDictionary
altToDFAState DFAState>.IDictionary
return void
        private void ComputeAltToProblemMaps( IEnumerable<int> dfaStatesUnaliased,
                                             IDictionary<int,IList<NFAConfiguration>> configurationsMap,
                                             IDictionary<int,IDictionary<string,ICollection<NFAState>>> altToTargetToCallSitesMap,
                                             IDictionary<int, DFAState> altToDFAState )
        {
            foreach ( int stateI in dfaStatesUnaliased )
            {
                // walk this DFA's config list
                IList<NFAConfiguration> configs;
                configurationsMap.TryGetValue(stateI, out configs);
                for ( int i = 0; i < configs.Count; i++ )
                {
                    NFAConfiguration c = (NFAConfiguration)configs[i];
                    NFAState ruleInvocationState = _dfa.Nfa.GetState( c.State );
                    Transition transition0 = ruleInvocationState.transition[0];
                    RuleClosureTransition @ref = (RuleClosureTransition)transition0;
                    string targetRule = ( (NFAState)@ref.Target ).enclosingRule.Name;
                    int altI = c.Alt;
                    IDictionary<string, ICollection<NFAState>> targetToCallSiteMap;
                    altToTargetToCallSitesMap.TryGetValue(altI, out targetToCallSiteMap);
                    if ( targetToCallSiteMap == null )
                    {
                        targetToCallSiteMap = new Dictionary<string, ICollection<NFAState>>();
                        altToTargetToCallSitesMap[altI] = targetToCallSiteMap;
                    }
                    ICollection<NFAState> callSites;
                    targetToCallSiteMap.TryGetValue(targetRule, out callSites);
                    if ( callSites == null )
                    {
                        callSites = new HashSet<NFAState>();
                        targetToCallSiteMap[targetRule] = callSites;
                    }
                    callSites.Add( ruleInvocationState );
                    // track one problem DFA state per alt
                    DFAState state;
                    if ( !altToDFAState.TryGetValue( altI, out state ) || state == null )
                    {
                        DFAState sampleBadState = _dfa.GetState( stateI );
                        altToDFAState[altI] = sampleBadState;
                    }
                }
            }
        }