import type { Alphabet, Axiom, AxiomParameter, Context, Defines, ParametricSymbol, Phrase, Production, ProductionParameter, ProductionResult, SuccessorParameter, Symbol } from './types';
/**
 * Normalize parameter into valid axiom
 *
 * @param {AxiomParameter|ProductionResult} parameter
 * @param {Alphabet} alphabet
 * @param {string[]} ignoredSymbols
 * @param {Defines} defines
 * @returns {Axiom}
 */
export declare function normalizeAxiom<A extends Alphabet, I extends Alphabet>(parameter: AxiomParameter<A | I> | ProductionResult<A | I>, alphabet: A, ignoredSymbols: I, defines: Defines): Axiom<A | I>;
/**
 * Normalize parameter into valid Symbol & Production
 *
 * @param {SuccessorParameter} successorParameter
 * @param {ProductionParameter} productionParameter
 * @returns { symbol: Symbol; production: Production }
 */
export declare function normalizeProduction<A extends Alphabet, I extends Alphabet>(successorParameter: SuccessorParameter<A>, productionParameter: ProductionParameter<A, I>): {
    symbol: Symbol<A>;
    production: Production<A, I>;
};
/**
 * Transform context classic syntax
 *
 * @param {SuccessorParameter} successorParameter
 * @returns { symbol: Symbol | ParametricSymbol; context: Context }
 */
export declare function transformClassicContext<A extends Alphabet>(successorParameter: SuccessorParameter<A>): {
    symbol: Symbol<A>;
    context: Context<A>;
};
/**
 * Transform parametric classic syntax
 *
 * @param {Symbol | ParametricSymbol} parametricSymbol
 * @returns { symbol: Symbol; params: string[] }
 */
export declare function transformClassicParametric<A extends Alphabet>(parametricSymbol: Symbol<A> | ParametricSymbol<A>): {
    symbol: Symbol<A>;
    params: string[];
};
/**
 * Split a phrase into axiom from an alphabet
 *
 * @param {Phrase} phrase
 * @param {Alphabet} alphabet
 * @param {string[]} ignoredSymbols
 * @param {Defines} defines
 * @returns {Axiom}
 */
export declare function transformPhraseToAxiom<A extends Alphabet, I extends Alphabet>(phrase: Phrase, alphabet: A, ignoredSymbols: I, defines: Defines): Axiom<A | I>;
/**
 * Convert keys & values into a Map
 *
 * @param {string[]} keys
 * @param {number[]} values
 * @returns {Defines}
 */
export declare function transformParamsToDefines(keys?: string[], values?: number[]): Defines;
