package bjc.pratt.commands; import java.util.function.UnaryOperator; import bjc.pratt.InitialCommand; import bjc.pratt.ParserContext; import bjc.pratt.Token; import bjc.utils.data.ITree; import bjc.utils.parserutils.ParserException; /** * An initial command that transforms the result of another command. * * @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 TransformingInitialCommand extends AbstractInitialCommand { private final InitialCommand internl; private final UnaryOperator>> transfrm; /** * Create a new transforming initial command. * * @param internal * The initial command to delegate to. * * @param transform * The transform to apply to the returned tree. */ public TransformingInitialCommand(final InitialCommand internal, final UnaryOperator>> transform) { super(); internl = internal; transfrm = transform; } @Override protected ITree> intNullDenotation(final Token operator, final ParserContext ctx) throws ParserException { return transfrm.apply(internl.denote(operator, ctx)); } }