import { SSymbol, Terminal } from "./syntax";
export interface TableKey {
    key(): SSymbol;
}
export interface IToken {
    key(): Terminal;
}
export interface ILexer {
    peek(): IToken;
    next(): IToken;
}
export declare type TokenPatterns<T> = Array<{
    regexp: RegExp;
    type: T;
}>;
export declare abstract class CommonAbstractRegexpLexer<T, A> {
    private patterns;
    private lastIndex;
    private text;
    private hasMore;
    private buffer;
    constructor(text: string, patterns: TokenPatterns<A>);
    peek(): T;
    peekFor(i: number): T;
    next(): T;
    /**
     * 填充直到队列达到指定数量,或没有足够的输入符号.
     * 如果填充达到要求的数量,返回true,否则false
     * @param i
     */
    private fill;
    /**
     * 填充
     */
    private addToken;
    protected abstract createToken(lexeme: string, type: A, match: RegExpExecArray): T | undefined;
    protected onMatchFaild(text: string, lastIndex: number): void;
    protected abstract getEOF(): T;
}
export declare abstract class AbstractRegexpLexer<T extends IToken, A> extends CommonAbstractRegexpLexer<T, A> implements ILexer {
}
//# sourceMappingURL=lexical.d.ts.map