Example #1
0
 static Expression ParseAdditiveExpression(Lexer lexer)
 {
     var rp = lexer.CreateRestorePoint();
     var left = ParseMultiplicativeExpression(lexer);
     if (left == null)
     {
         return null;
     }
     var type = lexer.CurrentToken.Type;
     switch (type)
     {
         case TokenType.Plus:
         case TokenType.Dash:
             break;
         default:
             return left;
     }
     if (!lexer.Next())
     {
         rp();
         return null;
     }
     var right = ParseAdditiveExpression(lexer);
     if (right == null)
     {
         rp();
         return null;
     }
     BinaryExpression result;
     switch (type)
     {
         case TokenType.Plus:
             result = new BinaryExpression(left, right, BinaryOperator.Addition);
             break;
         case TokenType.Dash:
             result = new BinaryExpression(left, right, BinaryOperator.Subtraction);
             break;
         default:
             result = null;
             break;
     }
     return result;
 }
Example #2
0
 public void Visit(BinaryExpression e)
 {
     var result = (Number)0m;
     var right = _results.Pop();
     var left = _results.Pop();
     switch (e.Operator)
     {
         case BinaryOperator.Addition:
             result = left + right;
             break;
         case BinaryOperator.Subtraction:
             result = left - right;
             break;
         case BinaryOperator.Multiplication:
             result = left * right;
             break;
         case BinaryOperator.Division:
             result = left / right;
             break;
     }
     _results.Push(result);
 }