package me.august.lumen.compile.parser.components; import me.august.lumen.compile.parser.TokenParser; import me.august.lumen.compile.parser.ast.expr.*; import me.august.lumen.compile.scanner.Token; public class UnaryPrefixParser implements PrefixParser { @Override public Expression parse(TokenParser parser, Token token) { Expression operand = parser.parseExpression(); switch (token.getType()) { // Unary plus, do nothing case PLUS: return operand; case MIN: return new UnaryMinusExpr(operand); case BIT_COMP: return new BitwiseComplementExpr(operand); // increment & decrement case INC: return new IncrementExpr(operand, IncrementExpr.Op.INC, false); case DEC: return new IncrementExpr(operand, IncrementExpr.Op.DEC, false); // logical not case NOT: return new NotExpr(operand); default: throw new RuntimeException("Unexpected token: " + token); } } }