import { Pattern } from 'regexp-composer'; export declare function buildGrammar(obj: T | (new () => T), startProductionName: keyof T): Grammar; export declare function zeroOrMore(content: Production): Repetition; export declare function oneOrMore(content: Production): Repetition; export declare function anyOf(...members: Production[]): Choice; export declare function bestOf(...members: Production[]): Choice; export declare function possibly(content: Production): T; export declare function pattern(pattern: Pattern): PatternTerminal; export declare function cached(content: Production): T; export declare function uncached(content: Production): T; export declare class Grammar { readonly productions: Record; readonly startProductionName: keyof T; readonly maxElementId: number; constructor(productions: Record, startProductionName: keyof T, maxElementId: number); parse(text: string): import("./TopDownParser.js").ParseTreeNode[] | undefined; get rootElement(): any; } export type Production = string | GrammarElement | (() => Production) | Production[]; export type GrammarElement = StringTerminal | PatternTerminal | Nonterminal | Sequence | Repetition | Choice | NonterminalReference; interface GrammarElementBase { type: string; optional: boolean; uniqueId?: number; cached?: boolean; } export type Terminal = StringTerminal | PatternTerminal; export interface StringTerminal extends GrammarElementBase { type: 'StringTerminal'; content: string; } export interface PatternTerminal extends GrammarElementBase { type: 'PatternTerminal'; pattern: Pattern; regExp: RegExp; } export interface Nonterminal extends GrammarElementBase { type: 'Nonterminal'; name: string; content: GrammarElement; } export interface Sequence extends GrammarElementBase { type: 'Sequence'; members: GrammarElement[]; } export interface Repetition extends GrammarElementBase { type: 'Repetition'; content: GrammarElement; } export interface Choice extends GrammarElementBase { type: 'Choice'; members: GrammarElement[]; exhaustive: boolean; } export interface NonterminalReference extends GrammarElementBase { type: 'NonterminalReference'; reference: Function; } export {};