import { ISerializedGast } from "chevrotain";
export declare type Node = FlatNode | RuleNode | AlternationNode | NonTerminalNode | TerminalNode | RepetitionWithSeparatorNode | OptionNode | RepetitionNode | RepetitionMandatoryWithSeparator | {
    type: "RepetitionMandatory";
};
interface RuleNode {
    type: "Rule";
    name: string;
    orgText: string;
    definition: Node[];
}
interface FlatNode {
    type: "Flat";
    definition: Node[];
}
interface AlternationNode {
    type: "Alternation";
    idx: number;
    definition: FlatNode[];
}
interface NonTerminalNode {
    type: "NonTerminal";
    name: string;
    idx: number;
}
interface TerminalNode {
    type: "Terminal";
    name: string;
    label: string;
    idx: number;
    pattern: string;
}
interface RepetitionWithSeparatorNode {
    type: "RepetitionWithSeparator";
    idx: number;
    separator: TerminalNode;
    definition: Node[];
}
interface RepetitionMandatoryWithSeparator {
    type: "RepetitionMandatoryWithSeparator";
    idx: number;
    separator: TerminalNode;
    definition: NonTerminalNode[];
}
interface OptionNode {
    type: "Option";
    idx: number;
    definition: Node[];
}
interface RepetitionNode {
    type: "Repetition";
    idx: number;
    definition: Node[];
}
/**
 * Script to generate context types from the grammar.
 *
 * Result:
 *  `src/Context.ts`
 */
export declare function generateContextTypes(grammar: ISerializedGast[]): void;
export declare function generateDefinitionTypes(definition: Node[], options?: {
    indent?: number;
    optional?: boolean;
    keys?: string[];
}): string;
export {};
//# sourceMappingURL=generateContextTypes.d.ts.map