import { Parser, SubParsers } from '../parser';
export function then
(success: P, failure: P): P;
export function then(success: Parser, failure: Parser): Parser {
assert(success);
assert(failure);
return (input, output) => output.state ? success(input, output) : failure(input, output);
}
export function success(parser: P): P;
export function success(parser: Parser): Parser {
assert(parser);
return (input, output) => output.context && parser(input, output);
}
export function failure(parser: P): P;
export function failure(parser: Parser): Parser {
assert(parser);
return (input, output) => output.context ?? parser(input, output);
}
export function always(parsers: readonly P[]): P;
export function always>(parsers: S): Parser {
return () => parsers;
}
export function force(parser: P): P;
export function force(parser: Parser): Parser {
return (input, output) =>
input.position === input.source.length
? output.context
: parser(input, output);
}