/// <summary> /// 将源字符串分析为 Lambda 表达式树 /// 由于传入的字符串可能不正确或者不支持,需要捕获异常 /// </summary> /// <typeparam name="T">委托类型</typeparam> /// <param name="source">用于分析的源字符串.</param> /// <param name="assemblies">可能用到的程序集列表.</param> /// <param name="namespaces">分析过程中可能用到的命名空间列表.</param> /// <returns>分析完成的 Lambda 表达式树.</returns> public static Expression <T> Parse <T>(string source, Assembly[] assemblies, params string[] namespaces) { var parseResult = SymbolParser.Parse(source); var parser = new ExpressionParser(parseResult, typeof(T), namespaces, assemblies); return(parser.ToLambdaExpression <T>()); }
/// <summary> /// 解析 /// </summary> /// <param name="source">源字符串</param> /// <returns>SymbolParseResult</returns> public static SymbolParseResult Parse(string source) { var parser = new SymbolParser(source); List <Token> tokens = new List <Token>(); while (true) { var token = parser.CurrentToken(); tokens.Add(token); if (token.Type == TokenType.End) { break; } } return(new SymbolParseResult(tokens)); }