import * as TSU from "@panyam/tsutils"; import * as TLEX from "tlex"; import { Sym, Grammar, Str, RuleAction } from "./grammar"; type Tape = TLEX.TapeInterface; export declare enum TokenType { STRING = "STRING", REGEX = "REGEX", NUMBER = "NUMBER", SPACES = "SPACES", IDENT = "IDENT", PCT_IDENT = "PCT_IDENT", STAR = "STAR", PLUS = "PLUS", QMARK = "QMARK", PIPE = "PIPE", DOLLAR_NUM = "DOLLAR_NUM", DOLLAR_IDENT = "DOLLAR_IDENT", OPEN_PAREN = "OPEN_PAREN", CLOSE_PAREN = "CLOSE_PAREN", OPEN_BRACE = "OPEN_BRACE", CLOSE_BRACE = "CLOSE_BRACE", OPEN_SQ = "OPEN_SQ", CLOSE_SQ = "CLOSE_SQ", COMMENT = "COMMENT", ARROW = "ARROW", COLCOLHYPHEN = "COLCOLHYPHEN", COLON = "COLON", SEMI_COLON = "SEMI_COLON" } export type NewSymbolCallback = TSU.Nullable<(label: string, assumedTerminal: boolean) => Sym | void>; export type TokenHandler = (token: TLEX.Token, tape: TLEX.TapeInterface, owner: any) => TLEX.Token | null; export interface LoaderConfig { grammar?: Grammar; leftRecursive?: boolean; newSymbolCallback?: NewSymbolCallback; tokenHandlers: TSU.StringMap; debug?: string; } export declare function load(input: string, params?: LoaderConfig): [Grammar, null | TLEX.NextTokenFunc]; export declare function Tokenizer(): TLEX.Tokenizer; export declare enum NodeType { GRAMMAR = "GRAMMAR", DECL = "DECL", RULE = "RULE", PROD_NULL = "PROD_NULL", PROD_STR = "PROD_STR", PROD_UNION = "PROD_UNION", PROD_NAME = "PROD_NAME", PROD_STRING = "PROD_STRING", PROD_NUM = "PROD_NUM", PROD_IDENT = "PROD_IDENT", PROD_STAR = "PROD_STAR", PROD_PLUS = "PROD_PLUS", PROD_OPTIONAL = "PROD_OPTIONAL", IDENT = "IDENT", ERROR = "ERROR", COMMENT = "COMMENT" } export declare class Loader { readonly grammar: Grammar; private tokenizer; private leftRecursive; readonly generatedTokenizer: TLEX.Tokenizer; tokenHandlers: TSU.StringMap; private newSymbolCallback; private symbolsByLabel; private regexSyntax; constructor(input: string, config?: LoaderConfig); symbolForLabel(label: string): TSU.Nullable; registerSymbol(label: string, sym: Sym): void; ensureSymbol(label: string, assumedTerminal: boolean): Sym; parse(input: string): void; parseRegex(tape: TLEX.TapeInterface, tag?: string, priority?: number, syntax?: string): TLEX.Rule; parseGrammar(tape: TLEX.Tape): void; parseDirective(tape: TLEX.TapeInterface, directive: string): void; parseTokenHandler(tape: Tape): TLEX.RuleMatchHandler | null; parseDecl(tape: Tape): void; parseProductions(tape: Tape, grammar: Grammar, nt: TSU.Nullable): [Str, RuleAction | null][]; parseProd(tape: Tape, grammar: Grammar): [Str, null | RuleAction]; } export {};