import { NonTerminal } from "./NonTerminal.js";
import { Sym } from "./Symbol.js";
import { DefaultParsedNode } from "./DefaultParsedNode.js";
type AstBuilder = (parent: DefaultParsedNode, ...children: DefaultParsedNode[]) => void;
type ExtensionListener = (parent: DefaultParsedNode, ...children: DefaultParsedNode[]) => void;
declare namespace AstBuilder {
    const DEFAULT: AstBuilder;
}
declare class Production {
    private readonly left;
    private readonly right;
    private astBuilder;
    private extensionListener;
    constructor(left: NonTerminal, ...right: Sym[]);
    static removeEpsilon(arr: Sym[]): Sym[];
    getLeft(): NonTerminal;
    getRight(): Sym[];
    setAstBuilder(astBuilder: AstBuilder): void;
    builtAST(parent: DefaultParsedNode, ...children: DefaultParsedNode[]): void;
    wasExtended(parent: DefaultParsedNode, ...children: DefaultParsedNode[]): void;
    onExtension(listener: ExtensionListener): void;
    toString(): string;
    equals(o: any): boolean;
    static arraysEqual(a: any[], b: any[]): boolean;
}
export { Production, AstBuilder, ExtensionListener };
//# sourceMappingURL=Production.d.ts.map