import * as CharSet from './char-set.js'; import * as RE from './regex.js'; export type RepeatBounds = number | { min: number; max?: number; } | { min?: number; max: number; }; export declare enum AssertionSign { POSITIVE = 0, NEGATIVE = 1 } export declare enum AssertionDir { AHEAD = 0, BEHIND = 1 } export type RegExpAST = { type: "epsilon"; } | { type: "literal"; charset: CharSet.CharSet; } | { type: "concat"; left: RegExpAST; right: RegExpAST; } | { type: "union"; left: RegExpAST; right: RegExpAST; } | { type: "star"; inner: RegExpAST; } | { type: "plus"; inner: RegExpAST; } | { type: "optional"; inner: RegExpAST; } | { type: "repeat"; inner: RegExpAST; bounds: RepeatBounds; } | { type: "capture-group"; name?: string; inner: RegExpAST; } | { type: "assertion"; direction: AssertionDir; sign: AssertionSign; inner: RegExpAST; outer: RegExpAST; } | { type: "start-anchor"; left: RegExpAST; right: RegExpAST; } | { type: "end-anchor"; left: RegExpAST; right: RegExpAST; }; type ExtRegexNode = { type: "ext-regex"; content: RE.ExtRegex; }; type InterAST_stage1 = ExtRegexNode | { type: "epsilon"; } | { type: "literal"; charset: CharSet.CharSet; } | { type: "concat"; left: InterAST_stage1; right: InterAST_stage1; } | { type: "union"; left: InterAST_stage1; right: InterAST_stage1; } | { type: "star"; inner: InterAST_stage1; } | { type: "plus"; inner: InterAST_stage1; } | { type: "optional"; inner: InterAST_stage1; } | { type: "repeat"; inner: InterAST_stage1; bounds: RepeatBounds; } | { type: "capture-group"; name?: string; inner: InterAST_stage1; } | { type: "assertion"; direction: AssertionDir; sign: AssertionSign; inner: InterAST_stage1; outer: InterAST_stage1; } | { type: "start-anchor"; left: InterAST_stage1; right: InterAST_stage1; } | { type: "end-anchor"; left: InterAST_stage1; right: InterAST_stage1; }; type InterAST_stage2 = ExtRegexNode | { type: "concat"; left: InterAST_stage2; right: InterAST_stage2; } | { type: "union"; left: InterAST_stage2; right: InterAST_stage2; } | { type: "star"; inner: InterAST_stage2; } | { type: "assertion"; direction: AssertionDir; sign: typeof AssertionSign.POSITIVE; inner: ExtRegexNode; outer: InterAST_stage2; } | { type: "start-anchor"; left: InterAST_stage2; right: InterAST_stage2; } | { type: "end-anchor"; left: InterAST_stage2; right: InterAST_stage2; }; type InterAST_stage3 = ExtRegexNode | { type: "concat"; left: InterAST_stage3; right: InterAST_stage3; } | { type: "union"; left: InterAST_stage3; right: InterAST_stage3; } | { type: "star"; inner: InterAST_stage3; } | { type: "assertion"; direction: AssertionDir; sign: typeof AssertionSign.POSITIVE; inner: ExtRegexNode; outer: InterAST_stage3; }; export type RenderOptions = { useNonCapturingGroups: boolean; }; export declare function traverseDepthFirst(ast: RegExpAST, fn: (node: RegExpAST) => RegExpAST): RegExpAST; export declare function toExtRegex(baseAST: RegExpAST): RE.ExtRegex; export declare const epsilon: RegExpAST; export declare function startAnchor(left: InterAST_stage2, right: InterAST_stage2): InterAST_stage2; export declare function startAnchor(left: RegExpAST, right: RegExpAST): RegExpAST; export declare function endAnchor(left: InterAST_stage3, right: InterAST_stage3): InterAST_stage3; export declare function endAnchor(left: InterAST_stage2, right: InterAST_stage2): InterAST_stage2; export declare function endAnchor(left: RegExpAST, right: RegExpAST): RegExpAST; export declare function literal(charset: CharSet.CharSet): RegExpAST; export declare function concat(left: ExtRegexNode, right: ExtRegexNode): ExtRegexNode; export declare function concat(left: InterAST_stage3, right: InterAST_stage3): InterAST_stage3; export declare function concat(left: InterAST_stage2, right: InterAST_stage2): InterAST_stage2; export declare function concat(left: RegExpAST, right: RegExpAST): RegExpAST; export declare function string(chars: string): RegExpAST; export declare function union(left: ExtRegexNode | undefined, right: ExtRegexNode | undefined): ExtRegexNode; export declare function union(left: InterAST_stage3 | undefined, right: InterAST_stage3 | undefined): InterAST_stage3; export declare function union(left: InterAST_stage3 | undefined, right: InterAST_stage3 | undefined): InterAST_stage3; export declare function union(left: InterAST_stage2 | undefined, right: InterAST_stage2 | undefined): InterAST_stage2; export declare function union(left: RegExpAST | undefined, right: RegExpAST | undefined): RegExpAST; export declare function star(inner: ExtRegexNode): ExtRegexNode; export declare function star(inner: InterAST_stage3): InterAST_stage3; export declare function star(inner: InterAST_stage3): InterAST_stage3; export declare function star(inner: InterAST_stage2): InterAST_stage2; export declare function star(inner: RegExpAST): RegExpAST; export declare function plus(inner: RegExpAST): RegExpAST; export declare function optional(inner: RegExpAST): RegExpAST; export declare function repeat(inner: RegExpAST, bounds: RepeatBounds): RegExpAST; export declare function captureGroup(inner: RegExpAST, name?: string): RegExpAST; export declare function assertion(direction: AssertionDir, sign: typeof AssertionSign.POSITIVE, inner: ExtRegexNode, outer: InterAST_stage3): InterAST_stage3; export declare function assertion(direction: AssertionDir, sign: typeof AssertionSign.POSITIVE, inner: ExtRegexNode, outer: InterAST_stage2): InterAST_stage2; export declare function assertion(direction: AssertionDir, sign: AssertionSign, inner: RegExpAST, outer: RegExpAST): RegExpAST; export declare function debugPrint(ast: InterAST_stage1): unknown; export declare function debugShow(ast: InterAST_stage1): unknown; export declare function toString(ast: RegExpAST, options: RenderOptions): string; export {};