private IExpression ParseBinaryExpressionZerothLevel()
{
IExpression expression = this.ParseBinaryExpressionFirstLevel();
if (expression == null)
return null;
while (this.TryParse(TokenType.Operator, "<", ">", "==", ">=", "<=", "!=", "===", "!=="))
{
Token oper = this.lexer.NextToken();
IExpression right = this.ParseBinaryExpressionFirstLevel();
ComparisonOperator op;
if (oper.Value == "<")
op = ComparisonOperator.Less;
else if (oper.Value == ">")
op = ComparisonOperator.Greater;
else if (oper.Value == "<=")
op = ComparisonOperator.LessEqual;
else if (oper.Value == ">=")
op = ComparisonOperator.GreaterEqual;
else if (oper.Value == "===")
op = ComparisonOperator.Equal;
else if (oper.Value == "!==")
op = ComparisonOperator.NotEqual;
else if (oper.Value == "==")
op = ComparisonOperator.NonStrictEqual;
else if (oper.Value == "!=")
op = ComparisonOperator.NonStrictNotEqual;
else
throw new ParserException(string.Format("Unknown operator '{0}'", oper.Value));
expression = new CompareExpression(op, expression, right);
}
return expression;
}