export type RepeatOperator = "*" | "?" | "+"; export type PositionNode = Literal | Tag | EndMarker; export type ExpressionNode = Alternation | Concatenation | Repeat | Literal | Tag | EndMarker | Variable; /** * Base AST node */ export declare class Node { readonly followpos: Set; constructor(); calcFollowpos(): void; } /** * Represents a variable reference */ export declare class Variable extends Node { readonly name: string; constructor(name: string); get nullable(): boolean; get firstpos(): Set; get lastpos(): Set; copy(): Variable; } /** * Represents a comment */ export declare class Comment extends Node { readonly value: string; constructor(value: string); } /** * Represents an assignment statement. * e.g. `variable = expression;` */ export declare class Assignment extends Node { readonly variable: Variable; expression: ExpressionNode; constructor(variable: Variable, expression: ExpressionNode); } /** * Represents an alternation. * e.g. `a | b` */ export declare class Alternation extends Node { readonly a: ExpressionNode; readonly b: ExpressionNode; constructor(a: ExpressionNode, b: ExpressionNode); get nullable(): boolean; get firstpos(): Set; get lastpos(): Set; copy(): Alternation; } /** * Represents a concatenation, or chain. * e.g. `a b c` */ export declare class Concatenation extends Node { readonly a: ExpressionNode; readonly b: ExpressionNode; constructor(a: ExpressionNode, b: ExpressionNode); get nullable(): boolean; get firstpos(): Set; get lastpos(): Set; calcFollowpos(): void; copy(): Concatenation; } /** * Represents a repetition. * e.g. `a+`, `b*`, or `c?` */ export declare class Repeat extends Node { readonly expression: ExpressionNode; readonly op: RepeatOperator; constructor(expression: ExpressionNode, op: RepeatOperator); get nullable(): boolean; get firstpos(): Set; get lastpos(): Set; calcFollowpos(): void; copy(): Repeat; } /** Builds a repetition expression with specified min/max bounds. */ export declare function buildRepetition(expression: ExpressionNode, min?: number, max?: number): ExpressionNode; /** * Base class for leaf nodes */ declare class Leaf extends Node { copy(): this; get nullable(): boolean; get firstpos(): Set; get lastpos(): Set; } /** * Represents a literal value, e.g. a number */ export declare class Literal extends Leaf { readonly value: number; constructor(value: number); copy(): this; } /** * Marks the end of an expression */ export declare class EndMarker extends Leaf { } /** * Represents a tag * e.g. `a:(a b)` */ export declare class Tag extends Leaf { readonly name: string; constructor(name: string); get nullable(): boolean; copy(): this; } export {};