private Expression ParseMultiplicative()
{
Expression left = ParseUnary();
while (_token.ID == TokenId.Asterisk || _token.ID == TokenId.Slash ||
_token.ID == TokenId.Percent || TokenIdentifierIs("mod") || TokenIdentifierIs("div"))
{
Token op = _token;
NextToken();
Expression right = ParseUnary();
CheckAndPromoteOperands(typeof(IArithmeticSignatures), op.Text, ref left, ref right, op.Position);
switch (op.ID)
{
case TokenId.Asterisk:
left = Expression.Multiply(left, right);
break;
case TokenId.Slash:
left = GenerateDivide(left, right);
break;
case TokenId.Percent:
left = Expression.Modulo(left, right);
break;
case TokenId.Identifier:
if (TokenIdentifierIs("mod"))
left = Expression.Modulo(left, right);
else if (TokenIdentifierIs("div"))
left = Expression.Divide(left, right);
break;
}
}
return left;
}