import { Formkl } from "@formkl/shared";
import { Tokenizer } from "./tokenizer";
import { Token } from "./types";
export declare class Parser {
    syntax: string;
    tokenizer: Tokenizer;
    private _lookahead;
    /**
     * Initializes the parser.
     */
    constructor();
    /**
     * Parse a Formkl syntax string into Formkl object
     */
    parse(string: string): Formkl;
    /**
     * Stringify a Formkl object to a Formkl syntax string
     */
    stringify(formkl: Formkl): string;
    /**
     * Main entry point.
     *
     * FormBlock
     *  = SectionBlockList
     *  ;
     */
    private FormBlock;
    /**
     * SectionBlockList
     *  = (SectionBlock)*
     *  ;
     */
    private SectionBlockList;
    /**
     * SectionBlock
     *  = FieldStatementList
     *  ;
     */
    private SectionBlock;
    /**
     * FieldStatementList
     * : (FieldStatement)*
     * ;
     * */
    private FieldStatementList;
    /**
     * FieldStatement
     *  = (NUMBER) (REQUIRE) (StringLiteral) FieldExpression (as StringLiteral) ';'
     *  | (REQUIRE) (MULTIPLE) (StringLiteral) FieldExpression (as StringLiteral) ';'
     *  ;
     */
    private FieldStatement;
    /**
     * FieldExpression
     *  = 'FIELD'
     *  | 'FIELDSELECTION'
     *  | 'FIELDVALIDATED'
     *  | 'FIELDDATETIME'
     *  | FieldExpression ValidationExpression
     *  ;
     */
    private FieldExpression;
    private FieldDefaultExpression;
    private FieldCustomExpression;
    /**
     * FieldSelectionExpression
     *  = 'FIELDSELECTION' StringLiteral '(' StringList ')'
     *  | 'FIELDSELECTION' StringLiteral 'URL' '(' StringList ')'
     *  | 'FIELDSELECTION' 'URL' '(' StringList ')'
     *  | 'FIELDSELECTION' '(' StringList ')'
     *  ;
     */
    private FieldSelectionExpression;
    private FieldValidatedExpression;
    private FieldDatetimeExpression;
    /**
     * ValidationExpression
     *  = 'VALID' '(' LogicalORExpression ')'
     *  | 'VALID' '(' LogicalORExpression ')' 'REGEX' '(' StringLiteral ')'
     *  | 'REGEX' '(' StringLiteral ')'
     *  | 'REGEX' '(' StringLiteral ')' 'VALID' '(' LogicalORExpression ')'
     *  ;
     */
    private ValidationExpression;
    /**
     * LogicalORExpression
     *  = LogicalANDExpression
     *  | LogicalANDExpression OR LogicalANDExpression
     *  ;
     */
    private LogicalORExpression;
    /**
     * LogicalANDExpression
     *  = RelationalExpression
     *  | RelationalExpression AND RelationalExpression
     *  ;
     */
    private LogicalANDExpression;
    /**
     * RelationalExpression
     *  = OPERATOR_RELATIONAL NumericLiteral
     *  | OPERATOR_EQUALITY StringLiteral
     *  | OPERATOR_EQUALITY NumericLiteral
     *  | HAS StringLiteral
     *  | HAS NumericLiteral
     *  ;
     */
    private RelationalExpression;
    /**
     * StringList
     *  = StringLiteral
     *  | StringList ',' StringLiteral
     *  ;
     */
    private StringList;
    /**
     * NaNLiteral
     *  = 'NaN'
     *  ;
     */
    private NaNLiteral;
    private NumericLiteral;
    /**
     * StringLiteral
     *   : STRING
     *   ;
     */
    private StringLiteral;
    /**
     * BooleanLiteral
     *  = TRUE
     *  | FALSE
     *  ;
     */
    private BooleanLiteral;
    /**
     * NullLiteral
     *  = 'null'
     *  ;
     */
    private NullLiteral;
    /**
     * UndefinedLiteral
     *  = 'undefined'
     *  ;
     */
    private UndefinedLiteral;
    /**
     * Expects a token of a given type.
     */
    _eat(tokenType: Token["type"]): Token;
}
