package me.august.lumen.compile.parser.components;
import me.august.lumen.compile.parser.TokenParser;
import me.august.lumen.compile.parser.ast.expr.Expression;
import me.august.lumen.compile.parser.ast.expr.MultExpr;
import me.august.lumen.compile.scanner.Token;
public class MultiplicativeParser implements InfixParser {
@Override
public Expression parse(TokenParser parser, Expression left, Token token) {
MultExpr.Op op;
switch (token.getType()) {
case MULT:
op = MultExpr.Op.MULT;
break;
case DIV:
op = MultExpr.Op.DIV;
break;
case REM:
op = MultExpr.Op.REM;
break;
default:
throw new RuntimeException("Unexpected token: " + token);
}
Expression right = parser.parseExpression(getPrecedence());
return new MultExpr(left, right, op);
}
@Override
public int getPrecedence() {
return Precedence.MULTIPLICATIVE.getLevel();
}
}