import { TokenizeOptions } from './tokenize';
export declare type ASTNodeTemplate<T, U> = {
    type: T;
    offset: number;
    line: number;
    column: number;
} & U;
/** dts2md break */
export declare type GlobNode = ASTNodeTemplate<'glob', {
    value: string;
}>;
/** dts2md break */
export declare type NumberNode = ASTNodeTemplate<'number', {
    value: string;
    suffix: string;
}>;
/** dts2md break */
export declare type WordNode = ASTNodeTemplate<'word', {
    value: string;
}>;
/** dts2md break */
export declare type SymbolNode = ASTNodeTemplate<'symbol', {
    value: string;
}>;
/** dts2md break */
export declare type SpanNode = ASTNodeTemplate<'span', {
    start: string;
    stop: string;
    body: readonly ASTNode[];
}>;
/** dts2md break */
export declare type ASTNode = GlobNode | NumberNode | WordNode | SymbolNode | SpanNode;
/** dts2md break */
export interface ASTOptions extends TokenizeOptions {
    spanSymbols: Map<string, string>;
    escapeCharacters: Map<string, string>;
}
/** dts2md break */
/**
 * Default span symbols:
 * '(' -> ')'
 * '[' -> ']'
 * '{' -> '}'
 */
export declare const astDefaults: ASTOptions;
/** dts2md break */
export interface ASTResult {
    /**
     * The result of the AST parsing
     */
    ast: readonly ASTNode[];
    /**
     * The character offset of the upcoming character
     */
    stopOffset: number;
    /**
     * The line number of the last line
     */
    stopLine: number;
    /**
     * The number of the last column
     */
    stopColumn: number;
}
/** dts2md break */
/**
 * Convert tokens to AST nodes
 */
export declare const token2ast: (tokens: string[], options?: Partial<ASTOptions> | undefined, initOffset?: number, initLine?: number, initColumn?: number, cursorStart?: number, cursorStop?: number) => ASTResult;
