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