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