Пример #1
0
        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);
        }