import Moo from 'moo';
import { Token } from './tokens';
export declare type LexerState = Moo.LexerState;
export * from './tokens';
/**
 * {@linkcode Lexer} factory
 *
 * @example
 * ```ts
 * import {createLexer} from '@tracespace/parser'
 *
 * const lexer = createLexer()
 *
 * lexer.reset('G04 gerber string*\nM02*\n')
 *
 * Array.from(lexer).forEach(token => {
 *   console.log(`${token.type}: ${token.value}`)
 * })
 * ```
 *
 * @category Lexer
 */
export declare function createLexer(): Lexer;
/**
 * The lexing module of the parser. The Lexer is generated by
 * {@link https://github.com/no-context/moo | Moo}, which determines its API.
 *
 * @category Lexer
 */
export interface Lexer extends Moo.Lexer {
    /** Cursor position in the current chunk */
    index?: number;
    /** Retrieve the next token from the chunk if available */
    next(): Token | undefined;
    /** The Lexer may be treated as an iterator to get tokens */
    [Symbol.iterator](): Iterator<Token>;
}
