import { ErrorListener, ParserRuleContext, Token } from "antlr4";
import { ExprCompiler } from "./compiler/ExprCompiler.js";
import { IfcExpressionErrorListener } from "./IfcExpressionErrorListener.js";
import { isNullish, isPresent } from "./util/IfcExpressionUtils.js";
import { IfcExpressionContext } from "./context/IfcExpressionContext.js";
import { Expr } from "./expression/Expr.js";
import { IfcElementAccessor } from "./context/IfcElementAccessor.js";
import { Value } from "./value/Value.js";
import { StringValue } from "./value/StringValue.js";
import { NumericValue } from "./value/NumericValue.js";
import { BooleanValue } from "./value/BooleanValue.js";
import { LogicalValue } from "./value/LogicalValue.js";
import { ReferenceValue } from "./value/ReferenceValue.js";
import { IfcPropertySetAccessor } from "./context/IfcPropertySetAccessor.js";
import { IfcPropertyAccessor } from "./context/IfcPropertyAccessor.js";
import { IfcRootObjectAccessor } from "./context/IfcRootObjectAccessor.js";
import { IfcTypeObjectAccessor } from "./context/IfcTypeObjectAccessor.js";
import { NamedObjectAccessor } from "./context/NamedObjectAccessor.js";
import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
import { ObjectAccessor } from "./context/ObjectAccessor.js";
import { IfcExpressionEvaluationException } from "./expression/IfcExpressionEvaluationException.js";
import type { ExpressionValue } from "./value/ExpressionValue.js";
import type { BoxedValueTypes } from "./value/BoxedValueTypes.js";
import { ExprEvalError, ExprEvalResult, isExprEvalError, isExprEvalSuccess } from "./expression/ExprEvalResult.js";
import { ExprKind } from "./expression/ExprKind.js";
import { TypeManager } from "./compiler/TypeManager.js";
import { ExprToTextInputLinker } from "./compiler/ExprToTextInputLinker.js";
import { ExprFacade } from "./expression/ExprFacade.js";
export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
export type { BoxedValueTypes };
export declare class IfcExpressionParseResult {
    private readonly _input;
    private readonly _typeManager;
    private readonly _parseTree;
    constructor(input: string, typeManager: TypeManager, exprContext: any);
    get typeManager(): TypeManager;
    get parseTree(): ParserRuleContext;
    get input(): string;
}
export declare class IfcExpression {
    /**
     * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.
     * @param input
     * @param errorListener
     * @return the parse result, which can subequently be compiled into an Expr using compile().
     */
    static parse(input: string, errorListener?: ErrorListener<Token | number>): IfcExpressionParseResult;
    /**
     * Compiles the specified parseResult into an Expr.
     * @param parseResult
     * @return the Expression (Expr), which can be evaluated to obtain its result.
     */
    static compile(parseResult: IfcExpressionParseResult): ExprFacade<ExpressionValue>;
    /**
     * Evaluates the specified input expression and returns the evaluation result. The parse
     * and compile steps are done internally.
     *
     * @param expression: the input expression
     * @param context: the context required for accessing the IFC model
     * @return the result (or an error object).
     */
    static evaluate(expression: string, context?: IfcExpressionContext): ExprEvalResult<ExpressionValue>;
    static formatError(input: string, error: ExprEvalError): string;
    private static indent;
    static evaluateExpression(expr: ExprFacade<ExpressionValue>, context?: IfcExpressionContext): ExprEvalResult<ExpressionValue>;
}
