private IExpression ParseBinaryExpressionSecondLevel() { IExpression expression = this.ParseUnaryExpression(); if (expression == null) return null; while (this.TryParse(TokenType.Operator, "*", "/", @"\")) { Token oper = this.lexer.NextToken(); IExpression right = this.ParseUnaryExpression(); ArithmeticOperator op = oper.Value == "*" ? ArithmeticOperator.Multiply : (oper.Value == "/" ? ArithmeticOperator.Divide : ArithmeticOperator.IntegerDivide); expression = new ArithmeticBinaryExpression(op, expression, right); } return expression; }
private IExpression ParseBinaryExpressionFirstLevel() { IExpression expression = this.ParseBinaryExpressionSecondLevel(); if (expression == null) return null; while (this.TryParse(TokenType.Operator, "+", "-")) { Token oper = this.lexer.NextToken(); IExpression right = this.ParseBinaryExpressionSecondLevel(); ArithmeticOperator op = oper.Value == "+" ? ArithmeticOperator.Add : ArithmeticOperator.Subtract; expression = new ArithmeticBinaryExpression(op, expression, right); } return expression; }