Exemplo n.º 1
0
        /// <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>());
        }
Exemplo n.º 2
0
        /// <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));
        }