Beispiel #1
0
 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;
 }
Beispiel #2
0
 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;
 }
Beispiel #7
0
 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;
        }