export declare enum TokenType {
    Operator = 0,
    Identifier = 1,
    String = 2,
    TemplateHead = 3,
    TemplateMiddle = 4,
    TemplateTail = 5,
    NoSubstitutionTemplate = 6,
    Number = 7
}
export interface Token {
    type: TokenType;
    value: any;
    start: number;
    end: number;
}
export declare const OPERATORS: {
    '(': number;
    ')': number;
    '}': number;
    ',': number;
    '=': number;
    '||': number;
    '&&': number;
    '^': number;
    '==': number;
    '!=': number;
    '===': number;
    '!==': number;
    '<': number;
    '>': number;
    '<=': number;
    '>=': number;
    '+': number;
    '-': number;
    '*': number;
    '/': number;
    '%': number;
    '!': number;
};
export declare type Operator = keyof typeof OPERATORS;
export declare type OperatorTree = boolean | {
    [ch: string]: OperatorTree;
};
export declare const OPERATOR_CHARS: {
    [ch: string]: OperatorTree;
};
export declare const TEMPLATE_BEGIN = "${";
export declare class Lexer {
    private expression;
    private length;
    protected _index: number;
    private marker;
    protected curlyStack: number;
    get index(): number;
    reset(str: string): void;
    next(): Token | undefined;
    peek(): Pick<Token, Exclude<keyof Token, 'start' | 'end'>> | undefined;
    protected scanNext(): Token | undefined;
    private peekNextChar;
    private getNextChar;
    private createToken;
    private skipSpaces;
    private scanOperator;
    private scanIdentifier;
    private scanString;
    private scanTemplate;
    protected backtick(): boolean;
    protected doScanTemplate(head: boolean): Token;
    private scanNumber;
}
export declare class TemplateLexer extends Lexer {
    next(): Token | undefined;
    protected backtick(): boolean;
}
