import { ParserFnWithCtx } from './types';
import { ApplyProductionRulesArg, makeProgram } from './parser';
export declare function objSequence<T extends ArrayLike<T[number]>, C, R>(helper: (token: T[number]) => R, comparator: (a: T[number], b: T[number]) => boolean): (needle: T) => ParserFnWithCtx<T, C, R>;
export declare function objClass<T extends ArrayLike<T[number]>, C, R>(helper: (token: T[number]) => R, comparator: (a: T[number], b: T[number]) => boolean): (...needles: Array<T[number]>) => ParserFnWithCtx<T, C, R>;
export declare function objClassNot<T extends ArrayLike<T[number]>, C, R>(helper: (token: T[number]) => R, comparator: (a: T[number], b: T[number]) => boolean): (...needles: Array<T[number]>) => ParserFnWithCtx<T, C, R>;
export declare function objClassByNeedleFn<T extends ArrayLike<T[number]>, C, R>(helper: (token: T[number]) => R, comparator: (a: T[number], b: T[number]) => boolean): (needle: (src: T[number]) => boolean) => ParserFnWithCtx<T, C, R>;
export declare function getObjectParsers<T extends ArrayLike<T[number]>, C, R>(params: {
    rawToToken: (rawToken: T[number]) => R;
    concatTokens: (tokens: R[]) => R[];
    comparator: (a: T[number], b: T[number]) => boolean;
}): {
    seq: (needle: T) => ParserFnWithCtx<T, C, R>;
    cls: (...needles: T[number][]) => ParserFnWithCtx<T, C, R>;
    notCls: (...needles: T[number][]) => ParserFnWithCtx<T, C, R>;
    clsFn: (needle: (src: T[number]) => boolean) => ParserFnWithCtx<T, C, R>;
    classes: {
        any: ParserFnWithCtx<T, C, R>;
    };
    cat: (...parsers: ParserFnWithCtx<T, C, R>[]) => ParserFnWithCtx<T, C, R>;
    once: (parser: ParserFnWithCtx<T, C, R>) => ParserFnWithCtx<T, C, R>;
    repeat: (parser: ParserFnWithCtx<T, C, R>) => ParserFnWithCtx<T, C, R>;
    qty: (min?: number | undefined, max?: number | undefined) => (parser: ParserFnWithCtx<T, C, R>) => ParserFnWithCtx<T, C, R>;
    zeroWidth: (helper?: (() => R) | undefined) => ParserFnWithCtx<T, C, R>;
    err: (message: string) => ParserFnWithCtx<T, C, R>;
    beginning: (helper?: (() => R) | undefined) => ParserFnWithCtx<T, C, R>;
    end: (helper?: (() => R) | undefined) => ParserFnWithCtx<T, C, R>;
    first: (...parsers: Array<ParserFnWithCtx<T, C, R>>) => ParserFnWithCtx<T, C, R>;
    or: (...parsers: Array<ParserFnWithCtx<T, C, R>>) => ParserFnWithCtx<T, C, R>;
    combine: (...parsers: ParserFnWithCtx<T, C, R>[]) => ParserFnWithCtx<T, C, R>;
    erase: (...parsers: ParserFnWithCtx<T, C, R>[]) => ParserFnWithCtx<T, C, R>;
    trans: (fn: (tokens: R[]) => R[]) => (...parsers: ParserFnWithCtx<T, C, R>[]) => ParserFnWithCtx<T, C, R>;
    ahead: (...parsers: Array<ParserFnWithCtx<T, C, R>>) => ParserFnWithCtx<T, C, R>;
    behind: (n: number, helper?: (() => R) | undefined) => (...parsers: ParserFnWithCtx<T, C, R>[]) => ParserFnWithCtx<T, C, R>;
    rules: (args: ApplyProductionRulesArg<T, C, R>) => (lexer: ParserFnWithCtx<T, C, R>) => ParserFnWithCtx<T, C, R>;
    makeProgram: typeof makeProgram;
};
