import { Named } from './Named.js';
import { Lexer } from './Lexer.js';
import { Matcher } from './Matcher.js';
import { Sym } from './Symbol.js';
declare abstract class Terminal extends Sym {
    static literal(s: string): Terminal;
    static characterClass(pattern: string): Terminal;
    constructor(symbol: string);
    isTerminal(): boolean;
    isNonTerminal(): boolean;
    isEpsilon(): boolean;
    abstract matches(lexer: Lexer): Matcher;
    abstract evaluate(matcher: Matcher): any;
    withName(name?: string | undefined): Named<Terminal>;
}
declare class Epsilon extends Terminal {
    constructor();
    isEpsilon(): boolean;
    matches(lexer: Lexer): Matcher;
    evaluate(_matcher: Matcher): undefined;
}
declare class Literal extends Terminal {
    constructor(symbol: string);
    matches(lexer: Lexer): Matcher;
    evaluate(matcher: Matcher): string;
    toString(): string;
}
declare class CharacterClass extends Terminal {
    private ranges;
    constructor(pattern: string);
    matches(lexer: Lexer): Matcher;
    evaluate(matcher: Matcher): string;
    toString(): string;
}
declare namespace Terminal {
    const EPSILON: Terminal;
    const DIGIT: Terminal;
    const LETTER: Terminal;
    const WHITESPACE: Terminal;
    const END_OF_INPUT: Terminal;
}
export { Terminal, Literal, Epsilon, CharacterClass };
//# sourceMappingURL=Terminal.d.ts.map