static int[][] _BuildLexer(IList <_LexRule> rules, bool dump) { if (dump) { Console.WriteLine(); } var exprs = new List <KeyValuePair <int, object> >(); for (int ic = rules.Count, i = 0; i < ic; ++i) { var r = rules[i]; if (null != r.Literal) { exprs.Add(new KeyValuePair <int, object>(r.Id, r.Literal)); } else if (null != r.Regex) { exprs.Add(new KeyValuePair <int, object>(r.Id, Ast.Parse(LexContext.Create(r.Regex)))); } else { exprs.Add(new KeyValuePair <int, object>(r.Id, r.Part)); } } var prog = Lex.CompileLexer(true, exprs.ToArray()); if (dump) { Console.Error.WriteLine("Disassembly of optimized lexer:"); Console.Error.WriteLine(Lex.Disassemble(prog)); Console.Error.WriteLine(); } return(prog); }