private IExpression ParseUnaryExpression()
{
if (this.TryParse(TokenType.Operator, "+", "-", "!"))
{
Token oper = this.lexer.NextToken();
IExpression unaryExpression = this.ParseUnaryExpression();
if (oper.Value == "!")
return new NotExpression(unaryExpression);
ArithmeticOperator op = oper.Value == "+" ? ArithmeticOperator.Plus : ArithmeticOperator.Minus;
return new ArithmeticUnaryExpression(op, unaryExpression);
}
if (this.TryParse(TokenType.Operator, "++", "--"))
{
Token oper = this.lexer.NextToken();
IExpression expression = this.ParseTermExpression();
IncrementOperator op = oper.Value == "++" ? IncrementOperator.PreIncrement : IncrementOperator.PreDecrement;
return new IncrementExpression(expression, op);
}
IExpression termexpr = this.ParseTermExpression();
if (this.TryParse(TokenType.Operator, "++", "--"))
{
Token oper = this.lexer.NextToken();
IncrementOperator op = oper.Value == "++" ? IncrementOperator.PostIncrement : IncrementOperator.PostDecrement;
return new IncrementExpression(termexpr, op);
}
return termexpr;
}