export interface ParserInputWithCtx<T extends ArrayLike<T[number]>, C> {
    src: T;
    start: number;
    end: number;
    context: C;
    templateArgs?: any[];
    templateArgsPos?: number[];
}
export declare type ParserInput<T extends ArrayLike<T[number]>> = ParserInputWithCtx<T, undefined>;
export declare type StringParserInputWithCtx<C> = ParserInputWithCtx<string, C>;
export declare type StringParserInput = StringParserInputWithCtx<undefined>;
export declare class ParseError<T extends ArrayLike<T[number]>, C, R> extends Error {
    result: ParserFnFailedResult<T, C, R>;
    constructor(result: ParserFnFailedResult<T, C, R>);
}
export declare function parserInput<T extends ArrayLike<T[number]>>(src: T): ParserInputWithCtx<T, undefined>;
export declare function parserInput<T extends ArrayLike<T[number]>, C>(src: T, context: C): ParserInputWithCtx<T, C>;
export declare function templateStringsParserInput<C>(strings: TemplateStringsArray, values: any[], context?: C): ParserInputWithCtx<string, C>;
export declare type ParserFnSucceededResult<T extends ArrayLike<T[number]>, C, R> = {
    succeeded: true;
    next: ParserInputWithCtx<T, C>;
    tokens: R[];
};
export declare type ParserFnFailedResult<T extends ArrayLike<T[number]>, C, R> = {
    succeeded: false;
    error: boolean;
    src: T;
    pos: number;
    message: string;
};
export declare type ParserFnWithCtx<T extends ArrayLike<T[number]>, C, R> = (input: ParserInputWithCtx<T, C>) => ParserFnSucceededResult<T, C, R> | ParserFnFailedResult<T, C, R>;
export declare type ParserFn<T extends ArrayLike<T[number]>, R> = ParserFnWithCtx<T, undefined, R>;
export declare type StringParserFnWithCtx<C, R> = ParserFnWithCtx<string, C, R>;
export declare type StringParserFn<R> = StringParserFnWithCtx<undefined, R>;
