public LexerNFA(LexerSpec lexerSpec, IDictionary <Mode, State> modeMap, CodePointEquivalenceClasses equivalenceClasses, NFA <LexerAction> nfa) { this.LexerSpec = lexerSpec; ModeMap = new Dictionary <Mode, State>(modeMap); EquivalenceClasses = equivalenceClasses; Nfa = nfa; }
public LexerDFA(LexerSpec lexerSpec, IDictionary <Mode, State> modeMap, CodePointEquivalenceClasses equivalenceClasses, DFA <LexerAction> dfa) { LexerSpec = lexerSpec; ModeMap = new Dictionary <Mode, State>(modeMap); EquivalenceClasses = equivalenceClasses; Dfa = dfa; }
private static CodePointEquivalenceClasses MakeEquivalenceClasses(LexerSpec spec) { var equivalenceClasses = new CodePointEquivalenceClasses(); foreach (var rule in spec.Rules) { rule.Expression.MakeEquivalenceClasses(equivalenceClasses); } return(equivalenceClasses); }
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)); }
public LexerCodeGenerator( LexerSpec lexerSpec, IReadOnlyDictionary<Mode, State> modeMap, int errorState, IDictionary<int, int[]> planeOffsets, IList<Input> equivalenceTable, int[] rowMap, int[] transitions, int[] actionMap, LexerAction[] actions) { this.lexerSpec = lexerSpec; this.modeMap = modeMap; this.errorState = errorState; this.planeOffsets = planeOffsets; this.equivalenceTable = equivalenceTable; this.rowMap = rowMap; this.transitions = transitions; this.actionMap = actionMap; this.actions = actions; }
public LexerCodeGenerator( LexerSpec lexerSpec, IReadOnlyDictionary <Mode, State> modeMap, int errorState, IDictionary <int, int[]> planeOffsets, IList <Input> equivalenceTable, int[] rowMap, int[] transitions, int[] actionMap, LexerAction[] actions) { this.lexerSpec = lexerSpec; this.modeMap = modeMap; this.errorState = errorState; this.planeOffsets = planeOffsets; this.equivalenceTable = equivalenceTable; this.rowMap = rowMap; this.transitions = transitions; this.actionMap = actionMap; this.actions = actions; }
private static CodePointEquivalenceClasses MakeEquivalenceClasses(LexerSpec spec) { var equivalenceClasses = new CodePointEquivalenceClasses(); foreach(var rule in spec.Rules) rule.Expression.MakeEquivalenceClasses(equivalenceClasses); return equivalenceClasses; }