import { Named } from "../core/Named.js";
import { BNF } from "../core/BNF.js";
import { NonTerminal } from "../core/NonTerminal.js";
import { Sym } from "../core/Symbol.js";
import { IntRange } from "../util/IntRange.js";
import { Rule } from "./Rule.js";
export declare class EBNFCore {
    protected readonly symbols: Map<string, Sym>;
    private readonly rules;
    private readonly bnf;
    private compiled;
    constructor(other?: EBNFCore);
    getSymbol(type: string): Sym | undefined;
    compile(topLevelSymbol: Sym): void;
    getBNF(): BNF;
    getRules(target: NonTerminal): Rule[];
    plus(type: string | undefined, child: Named<any>): Rule;
    star(type: string | undefined, child: Named<any>): Rule;
    or(type: string | undefined, ...options: Named<any>[]): Rule;
    optional(type: string | undefined, child: Named<any>): Rule;
    repeat(type: string | undefined, child: Named<any>, from: number, to: number): Rule;
    join(type: string | undefined, child: Named<any>, open: Sym | undefined, close: Sym | undefined, delimiter: Sym | undefined, onlyKeepEntries: boolean, cardinality: IntRange): Rule;
    join(type: string | undefined, child: Named<any>, open: Sym | undefined, close: Sym | undefined, delimiter: Sym | undefined, onlyKeepEntries: boolean, names: string[]): Rule;
    list(type: string | undefined, child: Named<any>): Rule;
    tuple(type: string | undefined, child: Named<any>, ...names: string[]): Rule;
    sequence(type: string | undefined, ...children: Named<any>[]): Rule;
    protected static getSymbols(...named: Named<any>[]): Sym[];
    protected static getNames(...named: Named<any>[]): string[];
    private addRule;
    removeRules(symbol: NonTerminal): void;
    private newOrExistingNonTerminal;
}
//# sourceMappingURL=EBNFCore.d.ts.map