declare type TokenString = {
    type: "string";
    value: string;
};
declare type TokenNumber = {
    type: "number";
    value: number;
};
declare type TokenCall = {
    type: "call";
    value: string;
    child: TokenArgument[];
};
declare type TokenOpen = {
    type: "open";
};
declare type TokenClose = {
    type: "close";
};
declare type TokenNewArg = {
    type: "newArg";
};
declare type TokenOperator = {
    type: "operator";
    value: "==" | "!=" | ">=" | "<=" | ">" | "<" | "!";
};
declare type TokenArgument = {
    type: "argument";
    child: Token[];
};
declare type TokenProgram = {
    type: "program";
    child: Token[];
};
declare type Token = {
    pos: number;
    line: number;
} & (TokenArgument | TokenProgram | TokenString | TokenNumber | TokenCall | TokenOpen | TokenClose | TokenNewArg | TokenOperator);
declare class Lexer {
    input: string;
    pos: number;
    line: number;
    col: number;
    escape_c: boolean;
    constructor(input: string);
    main(): Token[];
    peek(offset?: number): string;
    next(): string;
    eof(): boolean;
    isOperator(x: string): boolean;
    isSyntax(c: string): boolean;
    isNumber(x: string): boolean;
    parseOperator(x: string): Token;
    validateCall(c: string): boolean;
    parseCall(): Token;
    validateString(c: string): boolean;
    parseString(): Token;
    readInput(validator: (c: string) => boolean): string;
    advance(): Token;
    clean(tokens: Token[]): Token[];
}
export { Lexer, Token, TokenString, TokenNumber, TokenArgument, TokenProgram, TokenCall, TokenOpen, TokenClose, TokenNewArg, TokenOperator };
