import { AST } from './core'; import { Parser } from './parser-combinators'; export declare type SimpleASTAlt = { type: 'alt'; exprs: Array; }; export declare type SimpleASTSeq = { type: 'seq'; exprs: SimpleASTNode[]; }; declare type SeqFn = (...xs: unknown[]) => unknown; export declare type SimpleASTNode = { type: 'literal'; value: string; } | { type: 'identifier'; } | { type: 'value'; } | { type: 'nonterminal'; value: symbol; } | { type: 'reduce'; arity: number; fn: SeqFn | null; }; export declare type SimpleAST = SimpleASTNode | SimpleASTSeq | SimpleASTAlt; declare class ScopeManager { private stack; lookup(value: string): symbol; compileRuleset(rules: Array<{ name: string; expr: AST; }>, addRule: (name: symbol, expr: AST) => void): SimpleASTNode; } declare class LiteralManager { private keywords; private operators; private keywordRule; private operatorRule; add(literal: string): SimpleASTNode; terminal(node: AST & { type: 'terminal'; }): SimpleASTNode; compile(map: Map): { keywords: Set; operators: Set; }; } export declare class ASTSimplifier { rules: Map; scope: ScopeManager; literals: LiteralManager; static simplifyAll(node: AST): { startRule: symbol; rules: Map; keywords: Set; operators: Set; }; private simplifyAll; private simplifyAlt; private simplifySeq; private simplifyNode; } declare class FirstSetBuilder { private rules; cache: Map>; constructor(rules: Map); get(node: SimpleAST, recurSet?: Set): any; private getInner; } export declare class ParserCompiler { compiledRules: Map; firstSet: FirstSetBuilder; constructor(ruleASTMap: Map); static compileRuleset(ruleASTMap: Map): Map; compile(node: SimpleAST): Parser; } export declare function createParser(ast: AST): (strs: readonly string[], ...xs: unknown[]) => T; export {};