package bjc.pratt.commands; import bjc.pratt.ParserContext; import bjc.pratt.tokens.Token; import bjc.data.Tree; import bjc.data.SimpleTree; import bjc.utils.parserutils.ParserException; /** * A binary operator. * * @author bjculkin * * @param * The key type of the tokens. * * @param * The value type of the tokens. * * @param * The state type of the parser. */ public abstract class BinaryCommand extends BinaryPostCommand { /** * Create a new binary operator with the specified precedence. * * @param precedence * The precedence of the operator. */ public BinaryCommand(final int precedence) { super(precedence); } /** * The right-binding power (right-precedence) of this command. * * @return The right binding power of this command. */ protected abstract int rightBinding(); @Override public Tree> denote(final Tree> operand, final Token operator, final ParserContext ctx) throws ParserException { final Tree> opr = ctx.parse.parseExpression(rightBinding(), ctx.tokens, ctx.state, false); return new SimpleTree<>(operator, operand, opr); } }