package bjc.utils.parserutils.pratt.commands; import bjc.utils.data.ITree; import bjc.utils.data.Tree; import bjc.utils.parserutils.ParserException; import bjc.utils.parserutils.pratt.ParserContext; import bjc.utils.parserutils.pratt.Token; /** * A unary 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 class UnaryCommand extends AbstractInitialCommand { private final int nullPwer; /** * Create a new unary command. * * @param precedence * The precedence of this operator. */ public UnaryCommand(int precedence) { if(precedence < 0) { throw new IllegalArgumentException("Precedence must be non-negative"); } nullPwer = precedence; } @Override protected ITree> intNullDenotation(Token operator, ParserContext ctx) throws ParserException { ITree> opr = ctx.parse.parseExpression(nullPwer, ctx.tokens, ctx.state, false); return new Tree<>(operator, opr); } }