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