object EvaluateWhereClause(Runtime.PassiveExpression expr, Runtime.Pattern lastPattern, ScriptThread thread) { // instantiate where-clause pattern var patt = Pattern.Instantiate(thread); patt.CopyBoundVariables(lastPattern); // perform matching var result = patt.Match(expr); if (result) { // store last recognized pattern as a local variable thread.SetLastPattern(patt); // match succeeded, return result expression if (ResultExpression != null) { return(ResultExpression.Evaluate(thread)); } // match succeeded, evaluate more conditions if (MoreConditions != null) { return(MoreConditions.Evaluate(thread)); } } // matching failed, return nothing return(null); }
public override Action ProcessToken(IParseResult token, Stack <IParseResult> resultTokens, IOutputProcessor outputProcessor) { ProcessedTokenCount++; //process result var typedToken = ( OperatorParseResult )token; IParseResult operandRight = resultTokens.Pop(); IParseResult operandLeft = resultTokens.Pop(); if (operandLeft == null) { throw new InvalidTokenException(String.Format("Trying to perform {0} on invalid first operand", token.GetType())); } if (operandRight == null) { throw new InvalidTokenException(String.Format("Trying to perform {0} on invalid second operand", token.GetType())); } double leftResult = GetResult(operandLeft); double rightResult = GetResult(operandRight); double result = typedToken.Result.Eval(leftResult, rightResult); var expr = new ResultExpression { Expressions = Tuple.Create(operandLeft, operandRight), Operator = typedToken, Result = result }; resultTokens.Push(new ExpressionParseResult(expr)); return(null); }
void EvaluateWhereClause(Runtime.Pattern lastPattern, EvaluationContext context, AstMode mode) { // instantiate where-clause pattern var patt = Pattern.Instantiate(context, mode); patt.CopyBoundVariables(lastPattern); // perform matching var expr = context.Data.Pop() as Runtime.PassiveExpression; var result = patt.Match(expr); if (result) { // store last recognized pattern as a local variable context.SetLastPattern(patt); // match succeeded, return true if (ResultExpression != null) { ResultExpression.Evaluate(context, AstMode.Read); context.Data.Push(true); return; } // match succeeded? depends on more conditions if (MoreConditions != null) { // return true or false MoreConditions.Evaluate(context, AstMode.Read); return; } } // match failed, return false context.Data.Push(false); }
public CellExpression(ResultExpression parent, string cell) { _parent = parent; _cell = cell; }
public void DivisionByZeroTest() { Assert.AreEqual(-1, ResultExpression.Result("3/0")); }
public void NegativeNumbersTest() { Assert.AreEqual(-20, ResultExpression.Result("10-(6/2)*10")); }
public void ResultExpressionTest() { Assert.AreEqual(24, ResultExpression.Result("2*(10+2)")); }
public void ResultExpressionInvalidInputTest() { ResultExpression.Result("(3*)"); }
public void ResultExpressionBadCharactersTest() { ResultExpression.Result("3+3*s+1"); }