예제 #1
0
        protected ExpressionInfo Build(string expression, ParamMode mode, string paramStr, IKeyWordProvider provider)
        {
            ExpressionInfo expressionInfo;

            switch (mode)
            {
            case ParamMode.Expression:
            {
                var relatedExpressionInfo = new RelatedExpressionInfo();
                var strArry = paramStr.Replace(provider.ExpressionString, string.Empty).Split(provider.ExpressionSplitChar);
                relatedExpressionInfo.InvokeName = strArry[0];
                if (strArry.Length == 2)
                {
                    relatedExpressionInfo.ReturnTypeName = strArry[1];
                }

                expressionInfo = relatedExpressionInfo;
            }

            break;

            case ParamMode.Func:
            {
                var funcExpressionInfo = new FuncExpressionInfo();
                var strArry            = paramStr.Replace(provider.FuncString, string.Empty).Split(provider.ExpressionSplitChar);
                funcExpressionInfo.Name = strArry[0];
                if (strArry.Length > 1)
                {
                    funcExpressionInfo.InvokeName = strArry[1];
                }

                expressionInfo = funcExpressionInfo;
            }

            break;

            default:
                expressionInfo = new ExpressionInfo();
                break;
            }

            expressionInfo.Mode = mode;
            expressionInfo.Str  = paramStr;

            return(expressionInfo);
        }
예제 #2
0
        public string Regular(string expression, ExpressionInfo expressionInfo, Expression exps, IEnumerable <Type> staticTypes)
        {
            string replace             = string.Empty;
            var    text                = expressionInfo.Str + "(";
            RelatedExpressionInfo info = (RelatedExpressionInfo)expressionInfo;
            Regex reg;
            var   v = expression.IndexOf(text, expressionInfo.StartIndex);

            if (v == -1)
            {
                reg     = new Regex(expressionInfo.Str);
                replace = $"{ExpressInvoke}<{info.ReturnTypeName}>({ParserCenter.GLOBAL_EPXRESSION_NAME}, \"{info.InvokeName}\")";
                return(reg.Replace(expression, replace, 1, expressionInfo.StartIndex));
            }

            replace = $"{ExpressInvoke}<{info.ReturnTypeName}>({ParserCenter.GLOBAL_EPXRESSION_NAME}, \"{info.InvokeName}\",";
            reg     = new Regex(expressionInfo.Str + "\\(");
            var str = reg.Replace(expression, replace, 1, expressionInfo.StartIndex);

            return(str);
        }