예제 #1
0
        public static Tuple <ConstVariable, int> CreateVariable(IEnumerable <Token> tokens, string flag, int i)
        {
            ConstVariable variable = null;
            var           array    = flag.Split(Strings.Split);
            var           key      = array[0];

            if (!key.StartsWith(Alat))
            {
                variable = new ConstVariable
                {
                    Value = flag,
                    Name  = key,
                };
            }
            else
            {
                variable = new ParamVariable
                {
                    Value = flag,
                    Name  = key,
                };
            }

            if (array.Length == 1)
            {
                return(Tuple.Create <ConstVariable, int>(variable, i));
            }

            variable.NotSelf = true;
            Util.SetInvokeParam(tokens, variable, flag, i);
            return(Tuple.Create <ConstVariable, int>(variable, i + variable.ParamTokenCount));
        }
예제 #2
0
        public static Expression GetExpression(Variable variable, IDictionary <string, Expression> valuePairs, IDictionary <string, object> datas)
        {
            if (variable.Type == VariableType.StaticMethod)
            {
                InvokeVariable invokeVariable = (InvokeVariable)variable;
                return(BuildRealParam(invokeVariable, valuePairs, datas, null, invokeVariable.Path));
            }

            Expression    expression;
            ConstVariable constVariable = (ConstVariable)variable;

            if (!valuePairs.TryGetValue(constVariable.Name, out expression))
            {
                if (constVariable.IsParamer == false)
                {
                    expression = Expression.Constant(constVariable.GetValue(datas));
                }
                else
                {
                    expression = Expression.Parameter(constVariable.ValType, constVariable.Name);
                }

                valuePairs.Add(constVariable.Name, expression);
            }

            if (!constVariable.NotSelf)
            {
                return(expression);
            }

            return(BuildRealParam(constVariable, valuePairs, datas, expression, constVariable.Path));
        }
예제 #3
0
        internal override int TryAddVariable(IEnumerable <Token> tokens, Token token, ICollection <Variable> variables, int i)
        {
            Type type     = GetType(token.Flag);
            var  flag     = tokens.ElementAt(i + 1).Flag;
            var  variable = new ConstVariable
            {
                Value     = flag,
                Name      = flag,
                IsParamer = true,
                ValType   = type
            };

            variables.Add(variable);
            return(i + 1);
        }
        internal override int TryAddVariable(IEnumerable <Token> tokens, Token token, ICollection <Variable> variables, int i)
        {
            var branchVariable = new SwitchBranchVariable
            {
                Value = token.Flag
            };

            variables.Add(branchVariable);

            var nextToken = tokens.ElementAt(i + 1);

            if (nextToken.Flag != Strings.StartFlag1)
            {
                throw new ArgumentException(Tokens[0]);
            }

            var paramToken = tokens.ElementAt(i + 2);
            var variable   = new ConstVariable
            {
                Value = paramToken.Flag
            };

            branchVariable.Param = variable;

            var nextCloseToken = tokens.ElementAt(i + 3);

            if (nextCloseToken.Flag != Strings.EndFlag1)
            {
                throw new ArgumentException(Tokens[0]);
            }

            var n = tokens.Count();
            ICollection <Token> subTokens = new List <Token>();

            Util.CollectionTokens(tokens, subTokens, i + 4, Strings.StartFlag2, Strings.EndFlag2);
            branchVariable.Variables = GetCaseVariables(subTokens);
            return(i + 3 + subTokens.Count());
        }