package me.august.lumen.compile.parser.components; import me.august.lumen.compile.parser.TokenParser; import me.august.lumen.compile.parser.ast.expr.BitAndExpr; import me.august.lumen.compile.parser.ast.expr.BitOrExpr; import me.august.lumen.compile.parser.ast.expr.BitXorExpr; import me.august.lumen.compile.parser.ast.expr.Expression; import me.august.lumen.compile.scanner.Token; public final class BitwiseParsers { private BitwiseParsers() {} public static class BitwiseOrParser implements InfixParser { @Override public Expression parse(TokenParser parser, Expression left, Token token) { Expression right = parser.parseExpression(getPrecedence()); return new BitOrExpr(left, right); } @Override public int getPrecedence() { return Precedence.BIT_OR.getLevel(); } } public static class BitwiseXorParser implements InfixParser { @Override public Expression parse(TokenParser parser, Expression left, Token token) { Expression right = parser.parseExpression(getPrecedence()); return new BitXorExpr(left, right); } @Override public int getPrecedence() { return Precedence.BIT_XOR.getLevel(); } } public static class BitwiseAndParser implements InfixParser { @Override public Expression parse(TokenParser parser, Expression left, Token token) { Expression right = parser.parseExpression(getPrecedence()); return new BitAndExpr(left, right); } @Override public int getPrecedence() { return Precedence.BIT_AND.getLevel(); } } }