import { R2PipeAsync } from "./r2pipe.js";
export declare class EsilToken {
    label: string;
    comment: string;
    text: string;
    addr: string;
    position: number;
    constructor(text?: string, position?: number);
    toString(): string;
}
export type EsilNodeType = "number" | "flag" | "register" | "operation" | "none" | "block" | "goto" | "label";
export declare class EsilNode {
    lhs: EsilNode | undefined;
    rhs: EsilNode | undefined;
    children: EsilNode[];
    token: EsilToken;
    type: EsilNodeType;
    constructor(token?: EsilToken, type?: EsilNodeType);
    setSides(lhs: EsilNode, rhs: EsilNode): void;
    addChildren(ths: EsilNode, fhs: EsilNode): void;
    toEsil(): string;
    toString(): string;
}
export declare class EsilParser {
    r2: R2PipeAsync;
    stack: EsilNode[];
    nodes: EsilNode[];
    root: EsilNode;
    tokens: EsilToken[];
    cur: number;
    constructor(r2: R2PipeAsync);
    toJSON(): string;
    toEsil(): string;
    private optimizeFlags;
    optimize(options: string): Promise<void>;
    toString(): string;
    reset(): void;
    parseRange(from: number, to: number): void;
    parseFunction(addr?: string): Promise<void>;
    parse(expr: string, addr?: string): void | never;
    peek(a: number): EsilToken | undefined;
    pushToken(tok: EsilToken): void | never;
    private isNumber;
    private isInternal;
    private parseUntil;
    private getNodeFor;
    private findNodeFor;
    private isOperation;
}
