public static LexerNFA ConvertToNFA(LexerSpec spec) { spec = spec.HasBeenSimplified ? spec : spec.Simplify(); var equivalenceClasses = MakeEquivalenceClasses(spec); var nfa = new NFA<LexerAction>(equivalenceClasses.Count); var modeMap = spec.Modes.ToDictionary(m => m, m => nfa.AddState(true)); for(var i = 0; i < spec.Rules.Count; i++) spec.Rules[i].AddStates(modeMap, equivalenceClasses, nfa, i, spec.DefaultChannel); return new LexerNFA(spec, modeMap, equivalenceClasses, nfa); }
public static LexerNFA ConvertToNFA(LexerSpec spec) { spec = spec.HasBeenSimplified ? spec : spec.Simplify(); var equivalenceClasses = MakeEquivalenceClasses(spec); var nfa = new NFA <LexerAction>(equivalenceClasses.Count); var modeMap = spec.Modes.ToDictionary(m => m, m => nfa.AddState(true)); for (var i = 0; i < spec.Rules.Count; i++) { spec.Rules[i].AddStates(modeMap, equivalenceClasses, nfa, i, spec.DefaultChannel); } return(new LexerNFA(spec, modeMap, equivalenceClasses, nfa)); }