Example #1
0
 private static Parser <Expression> StringTerm(ValuePropertyContainer container)
 {
     return((from op in StringOperatorTerm
             from value in ParserUtility.ConstantString
             select CallSetValue(op, value, container))
            .Named("StringValueExpression"));
 }
Example #2
0
 private static Parser <Expression> NumericTerm(ValuePropertyContainer container)
 {
     return((from op in NumericOperatorTerm
             from value in ParserUtility.ConstantNumber
             select CallSetValue(op, value, container))
            .Named("NumericValueExpression"));
 }
        private static Parser <Tuple <PropertyInfo, Expression, Expression> > ArgumentsTerm(string functionName,
                                                                                            AffectableEntityInfoContainer container)
        {
            AffectableEntityInfo info;

            if (!container.EntityInfoCache.TryGetAffectableEntityInfo(functionName, out info))
            {
                throw new ArgumentException(string.Format("Function name {0} is not found in entityInfoCache.", functionName));
            }

            var parameter = container.ParameterCache.Get(functionName);
            var prop      = new ValuePropertyContainer(info, functionName, parameter);
            Func <int, Parser <Expression> > argsExpr = i => (from separator in Comma
                                                              from item in CallKeyTerm(info, parameter.Item1, i).Parser
                                                              select item);

            return((from keys in
                    (from firstKey in CallKeyTerm(info, parameter.Item1, 0).Parser.Once()
                     from tailKey in KeyTermMany(argsExpr, 1)
                     select firstKey.Concat(tailKey))
                    from comma in Comma
                    from v in ValueTerm(prop).Parser.Once()
                    select Tuple.Create(info.PropertyInfo, Join(keys.ToArray()), v.First())).Or(ValueOnlyArgumentTerm(prop)));
        }
 private static Parser <Tuple <PropertyInfo, Expression, Expression> > ValueOnlyArgumentTerm(ValuePropertyContainer container)
 {
     return(from v in ValueTerm(container).Parser.Once()
            select Tuple.Create <PropertyInfo, Expression, Expression>(container.EntityInfo.PropertyInfo, Expression.Empty(), v.First()));
 }
 private static ParserWithContainer <Expression, ValuePropertyContainer> ValueTerm(ValuePropertyContainer container)
 {
     return(new ParserWithContainer <Expression, ValuePropertyContainer>(
                ValueParser.ParseExpression(container), container));
 }
Example #6
0
 private static ParserWithContainer <Expression, ValuePropertyContainer> Expr(ValuePropertyContainer container)
 {
     return(new ParserWithContainer <Expression, ValuePropertyContainer>(
                NumericTerm(container).Or(StringTerm(container)), container));
 }
Example #7
0
        private static Expression CallSetValue(ExpressionType operand, Tuple <Type, string> value, ValuePropertyContainer container)
        {
            var infos = container.Properties.Select(prop => new ValueOperatorInfo
            {
                ExpressionType = operand,
                PropertyName   = prop.PropertyInfo.Name,
                Value          = AffectorUtility.CreateValueExpression(prop.PropertyInfo.PropertyType, value),
            }).ToArray();

            return(container.EntityInfo.IfThenSection(container.Parameter, container.NewParameter, infos));
        }
Example #8
0
 public static Parser <Expression> ParseExpression(ValuePropertyContainer container)
 {
     return(Expr(container).Parser);
 }