import { Expr } from "./Expr.js";
import { IfcExpressionContext } from "../context/IfcExpressionContext.js";
import { ExprEvalError, ExprEvalResult } from "./ExprEvalResult.js";
import { ExprKind } from "./ExprKind.js";
import { ExprType } from "../type/ExprType.js";
import { TextSpan } from "../util/TextSpan.js";
import { ExprStringBuilder } from "./ExprStringBuilder.js";
export declare abstract class ExprBase<T> implements Expr<T> {
    private readonly exprKind;
    private textSpan?;
    protected constructor(exprKind: ExprKind);
    setTextSpan(ctx: TextSpan): void;
    getTextSpan(): TextSpan | undefined;
    abstract getChildren(): Array<Expr<any>>;
    abstract evaluate(ctx: IfcExpressionContext, localCtx: Map<string, any>): ExprEvalResult<T>;
    getKind(): ExprKind;
    protected wrapInResultIfNecessary(result: T | ExprEvalError): ExprEvalResult<T>;
    private hasTextSpan;
    toExprString(builder?: ExprStringBuilder): string;
    protected abstract buildExprString(builder: ExprStringBuilder): void;
    abstract getType(): ExprType;
}
