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 InitialCommand internal; private UnaryOperator>> transform; /** * 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(InitialCommand internal, UnaryOperator>> transform) { super(); this.internal = internal; this.transform = transform; } @Override protected ITree> intNullDenotation(Token operator, ParserContext ctx) throws ParserException { return transform.apply(internal.denote(operator, ctx)); } }