Esempio n. 1
0
 public void Visit(UnaryExpression e)
 {
     var o = _results.Pop();
     switch (e.Operator)
     {
         case UnaryOperator.Minus:
             o *= (Number)(-1m);
             break;
         case UnaryOperator.Plus:
             break;
     }
     _results.Push(o);
 }
Esempio n. 2
0
 static Expression ParseUnaryExpression(Lexer lexer)
 {
     var rp = lexer.CreateRestorePoint();
     var type = lexer.CurrentToken.Type;
     switch (type)
     {
         case TokenType.Plus:
         case TokenType.Dash:
             if (!lexer.Next())
             {
                 rp();
                 return null;
             }
             break;
     }
     var operand = ParsePrimaryExpression(lexer);
     if (operand == null)
     {
         rp();
         return null;
     }
     Expression result;
     switch (type)
     {
         case TokenType.Plus:
             result = new UnaryExpression(operand, UnaryOperator.Plus);
             break;
         case TokenType.Dash:
             result = new UnaryExpression(operand, UnaryOperator.Minus);
             break;
         default:
             result = operand;
             break;
     }
     return result;
 }