import { Autocompleter, GetAutocompletionFunction } from "../Autocompleter.js";
import { RepresentsSymbol } from "../core/RepresentsSymbol.js";
import { BNF } from "../core/BNF.js";
import { NonTerminal } from "../core/NonTerminal.js";
import { Sym } from "../core/Symbol.js";
import { Evaluator, EvaluateFunction } from "../Evaluator.js";
import { EBNFProduction } from "./EBNFProduction.js";
import { NamedRule } from "./NamedRule.js";
import { ParseListener } from "./ParseListener.js";
declare abstract class Rule implements RepresentsSymbol {
    protected readonly type: string;
    protected readonly tgt: NonTerminal;
    protected readonly children: Sym[];
    protected parsedChildNames: (string | undefined)[];
    private evaluator;
    private autocompleter;
    private _onSuccessfulParsed;
    constructor(type: string, tgt: NonTerminal | undefined, ...children: Sym[]);
    withName(name?: string | undefined): NamedRule;
    getTarget(): NonTerminal;
    getRepresentedSymbol(): Sym;
    getChildren(): Sym[];
    getEvaluator(): Evaluator;
    setEvaluator(evaluator: Evaluator | EvaluateFunction): Rule;
    getAutocompleter(): Autocompleter | undefined;
    setAutocompleter(autocompleter: Autocompleter | GetAutocompletionFunction | undefined): Rule;
    onSuccessfulParsed(listener: ParseListener): Rule;
    getOnSuccessfulParsed(): ParseListener;
    static addProduction(grammar: BNF, rule: Rule, left: NonTerminal, ...right: Sym[]): EBNFProduction;
    getNameForChild(idx: number): string | undefined;
    setParsedChildNames(...parsedChildNames: (string | undefined)[]): void;
    abstract createBNF(grammar: BNF): void;
}
export { Rule };
//# sourceMappingURL=Rule.d.ts.map