public static ExpressionTokens GetOptimizedTokens( IList <Char> expressionChars, ParserSettings ParserSettings) { if (ParserSettings == null) { ParserSettings = new ParserSettings(); } ExpressionTokens tokens = new ExpressionTokens( TokenGetter.GetTokens(expressionChars)); ConvertIndexersToFunctions(tokens); AddFunctionCallOperator(tokens); ConvertMinusOperatorToMinusOne(tokens); // RemoveOperatorsOnEnd(tokens); if (ParserSettings.Optimize) { OptimizeTokens(tokens); } if (ParserSettings.Validate) { ValidateTokens(tokens); } //CorrectFunctionCallTokenInfo(tokens); return(tokens); }
public static IEnumerable <String> SplitMethodParameters(String Code, Boolean AllObjects) { StringBuilder paramStr = new StringBuilder(); Boolean isFirst = true; IList <String> tokens = Linq2.ToList(TokenGetter. GetStringTokens(Code.Trim())); foreach (String token in tokens) { if (token.EndsWith(",")) { if (!isFirst && AllObjects) { yield return(","); } isFirst = false; paramStr.Append(token.Substring(0, token.Length - 1)); yield return(paramStr.ToString()); paramStr.Remove(0, paramStr.Length); } else { paramStr.Append(token); } } if (paramStr.Length > 0) { if (!isFirst && AllObjects) { yield return(","); } yield return(paramStr.ToString()); } }
//////////////////////////// /// <summary> /// Zwraca przygotowane wyrażenie /// </summary> public void PrepareMainExpression( String ExpressionId, IList <Char> ExpressionChars, ParserSettings ParserSettings, ExpressionGroup ExpressionGroup) { try { Expression onpExpression = new Expression(ExpressionId); onpExpression.Tokens = TokenGetter.GetOptimizedTokens(ExpressionChars, ParserSettings); ExpressionGroup.Expressions[ExpressionId] = onpExpression; // zamiania znaków równości na wołanie funkcji List <ExpressionTokens> resultTokens = new List <ExpressionTokens>(); while (true) { ExpressionTokens setTokens = TakeSetTokens( onpExpression.Tokens); if (setTokens == null) { break; } resultTokens.Insert(0, setTokens); } Expression currentExpression = onpExpression; foreach (ExpressionTokens resultToken in resultTokens) { Expression setExpression = new Expression(); setExpression.IsOnpExecution = false; setExpression.Tokens = resultToken; ExpressionGroup.Expressions[setExpression.ID] = setExpression; PrepareExpressions( setExpression, ParserSettings, ExpressionGroup); CorrectSetExpression( setExpression, currentExpression.ID, ParserSettings, ExpressionGroup); currentExpression = setExpression; } ExpressionGroup.MainExpression = currentExpression; PrepareExpressions( onpExpression, ParserSettings, ExpressionGroup); } catch (Exception ex) { throw new DynLanCompileException( "Error in expression: '" + new string(Linq2.ToArray(ExpressionChars), 0, ExpressionChars.Count).Replace("'", "\\'") + "'; " + ex.Message, ex); } }