private Expression ParseUnary()
{
if (_token.ID == TokenId.Minus || _token.ID == TokenId.Exclamation || TokenIdentifierIs("not"))
{
Token op = _token;
NextToken();
if (op.ID != TokenId.Minus || (_token.ID != TokenId.IntegerLiteral && _token.ID != TokenId.RealLiteral))
{
Expression expr = ParseUnary();
if (op.ID == TokenId.Minus)
{
CheckAndPromoteOperand(typeof(INegationSignatures), op.Text, ref expr, op.Position);
expr = Expression.Negate(expr);
}
else
{
CheckAndPromoteOperand(typeof(INotSignatures), op.Text, ref expr, op.Position);
expr = Expression.Not(expr);
}
return expr;
}
_token.Text = "-" + _token.Text;
_token.Position = op.Position;
}
return ParsePrimary();
}