import { BaseTokenReader } from './BaseTokenReader';
import { Lexeme } from '../models/Lexeme';
/**
 * Manages and coordinates multiple token readers
 */
export declare class TokenReaderManager {
    private readers;
    private input;
    private position;
    private tokenCache;
    private cacheHits;
    private cacheMisses;
    constructor(input: string, position?: number);
    /**
     * Register a token reader
     * @param reader The reader to register
     * @returns This manager instance for chaining
     */
    register(reader: BaseTokenReader): TokenReaderManager;
    /**
     * Register multiple token readers
     * @param readers The readers to register
     * @returns This manager instance for chaining
     */
    registerAll(readers: BaseTokenReader[]): TokenReaderManager;
    /**
     * Update the position for all readers
     */
    private setPosition;
    /**
     * Try to read a token using all registered readers
     * @param position The position to read from
     * @param previous The previous token, if any
     * @returns The lexeme if a reader could read it, null otherwise
     */
    tryRead(position: number, previous: Lexeme | null): Lexeme | null;
    /**
     * Get the maximum position among all readers
     */
    getMaxPosition(): number;
    /**
     * Get the input string
     */
    getInput(): string;
    /**
     * Get cache statistics
     */
    getCacheStats(): {
        hits: number;
        misses: number;
        ratio: number;
    };
}
