internal static int[][] EmitLexer(bool optimize, params Ast[] expressions) { var parts = new KeyValuePair <int, int[][]> [expressions.Length]; for (var i = 0; i < expressions.Length; ++i) { var l = new List <int[]>(); FA fa = null; if (optimize) { try { fa = FA.FromAst(expressions[i]); } // we can't do lazy expressions catch (NotSupportedException) { } } //fa = null;// for testing if (null != fa) { EmitPart(fa, l); } else { EmitPart(expressions[i], l); } parts[i] = new KeyValuePair <int, int[][]>(i, l.ToArray()); } var result = EmitLexer(parts); if (optimize) { result = _RemoveDeadCode(result); } return(result); }