private IExpression ParseBinaryExpression(int level) { if (level >= binaryoperators.Length) { return(this.ParseTerm()); } IExpression expr = this.ParseBinaryExpression(level + 1); if (expr == null) { return(null); } Token token; for (token = this.lexer.NextToken(); token != null && this.IsBinaryOperator(level, token); token = this.lexer.NextToken()) { if (token.Value == "=:=") { expr = new StrictEqualExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "==") { expr = new EqualExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "+") { expr = new AddExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "-") { expr = new SubtractExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "*") { expr = new MultiplyExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "/") { expr = new DivideExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "div") { expr = new DivExpression(expr, this.ParseBinaryExpression(level + 1)); } else if (token.Value == "rem") { expr = new RemExpression(expr, this.ParseBinaryExpression(level + 1)); } } if (token != null) { this.lexer.PushToken(token); } return(expr); }
public void RaiseIfRemainderRealByInteger() { RemExpression expr = new RemExpression(new ConstantExpression(6.5), new ConstantExpression(2)); try { expr.Evaluate(null); Assert.Fail(); } catch (Exception ex) { Assert.IsInstanceOfType(ex, typeof(InvalidCastException)); } }
public void ParseSimpleRem() { Parser parser = new Parser("10 rem 20."); IExpression expression = parser.ParseExpression(); Assert.IsNotNull(expression); Assert.IsInstanceOfType(expression, typeof(RemExpression)); RemExpression remexpression = (RemExpression)expression; Assert.IsInstanceOfType(remexpression.LeftExpression, typeof(ConstantExpression)); Assert.IsInstanceOfType(remexpression.RightExpression, typeof(ConstantExpression)); Assert.AreEqual(10, ((ConstantExpression)remexpression.LeftExpression).Value); Assert.AreEqual(20, ((ConstantExpression)remexpression.RightExpression).Value); }
public void NonZeroRemainderOfTwoIntegers() { RemExpression expr = new RemExpression(new ConstantExpression(5), new ConstantExpression(2)); Assert.AreEqual(1, expr.Evaluate(null)); }