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); }
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); }