export type RailroadNode = { kind: 'terminal'; text: string; } | { kind: 'nonterminal'; text: string; } | { kind: 'comment'; text: string; } | { kind: 'skip'; } | { kind: 'seq'; items: RailroadNode[]; } | { kind: 'choice'; items: RailroadNode[]; } | { kind: 'optional'; item: RailroadNode; } | { kind: 'oneOrMore'; item: RailroadNode; rep?: RailroadNode; } | { kind: 'zeroOrMore'; item: RailroadNode; rep?: RailroadNode; } | { kind: 'diagram'; items: RailroadNode[]; }; export type GrammarModel = { start: string; rules: { [name: string]: RailroadNode; }; legend?: { token: string; meaning: string; }[]; ignored?: { token: string; meaning: string; }[]; meta?: { engine: string; [k: string]: any; }; }; export declare class RailroadError extends Error { node?: unknown; constructor(message: string, node?: unknown); } export type Item = RailroadNode | string; export declare function norm(item: Item): RailroadNode; export declare function Terminal(text: string): RailroadNode; export declare function NonTerminal(text: string): RailroadNode; export declare function Comment(text: string): RailroadNode; export declare function Skip(): RailroadNode; export declare function Sequence(...items: Item[]): RailroadNode; export declare function Choice(...items: Item[]): RailroadNode; export declare function Optional(item: Item): RailroadNode; export declare function OneOrMore(item: Item, rep?: Item): RailroadNode; export declare function ZeroOrMore(item: Item, rep?: Item): RailroadNode; export declare function Diagram(...items: Item[]): RailroadNode; export declare function toText(node: Item): string; export declare function nodeEqual(a: RailroadNode, b: RailroadNode): boolean;