Antlr4.Automata.LexerATNFactory.CreateATN C# (CSharp) Method

CreateATN() public method

public CreateATN ( ) : ATN
return Antlr4.Runtime.Atn.ATN
        public override ATN CreateATN()
        {
            // BUILD ALL START STATES (ONE PER MODE)
            ICollection<string> modes = ((LexerGrammar)g).modes.Keys;
            foreach (string modeName in modes)
            {
                // create s0, start state; implied Tokens rule node
                TokensStartState startState = NewState<TokensStartState>(null);
                atn.DefineMode(modeName, startState);
            }

            // INIT ACTION, RULE->TOKEN_TYPE MAP
            atn.ruleToTokenType = new int[g.rules.Count];
            foreach (Rule r in g.rules.Values)
            {
                atn.ruleToTokenType[r.index] = g.GetTokenType(r.name);
            }

            // CREATE ATN FOR EACH RULE
            _CreateATN(g.rules.Values);

            atn.lexerActions = new ILexerAction[indexToActionMap.Count];
            foreach (KeyValuePair<int, ILexerAction> entry in indexToActionMap)
            {
                atn.lexerActions[entry.Key] = entry.Value;
            }

            // LINK MODE START STATE TO EACH TOKEN RULE
            foreach (string modeName in modes)
            {
                IList<Rule> rules = ((LexerGrammar)g).modes[modeName];
                TokensStartState startState = atn.modeNameToStartState[modeName];
                foreach (Rule r in rules)
                {
                    if (!r.IsFragment())
                    {
                        RuleStartState s = atn.ruleToStartState[r.index];
                        Epsilon(startState, s);
                    }
                }
            }

            ATNOptimizer.Optimize(g, atn);
            return atn;
        }