ifc-expressions
Version:
Parsing and evaluation of IFC expressions
42 lines (41 loc) • 2.19 kB
TypeScript
import { ExpressionValue } from "../../value/ExpressionValue.js";
import { FuncArg } from "./FuncArg.js";
import { ExprEvalError, ExprEvalResult } from "../ExprEvalResult.js";
import { ExprType } from "../../type/ExprType.js";
import { ParserRuleContext } from "antlr4";
import { FunctionExpr } from "./FunctionExpr.js";
import { Expr } from "../Expr.js";
export declare abstract class Func {
protected name: string;
protected formalArguments: Array<FuncArg<unknown>>;
protected constructor(name: string, args: Array<FuncArg<unknown>>);
abstract getReturnType(argumentTypes: Array<ExprType>): ExprType;
checkArgumentsAndGetReturnType(argumentTypes: Array<[ParserRuleContext, ExprType]>, ctx: any): ExprType;
protected checkArgumentTypes(providedArgumentTypes: Array<[ParserRuleContext, ExprType]>, ctx: any): void;
getName(): string;
evaluate(callingExpr: FunctionExpr, funcArgs: Array<ExprEvalResult<ExpressionValue>>): ExprEvalResult<ExpressionValue>;
/**
* Subclasses must provide the funcation evaluation code here.
* @param callingExpr
* @param evaluatedArguments
* @protected
*/
protected abstract calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
/**
* Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the
* returned array is an ExprEvalError, the function evaluation fails.
* @param callingExpr
* @param evaluatedArguments
* @protected
*/
protected transformArguments(callingExpr: Expr<any>, evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>): void;
/**
* Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).
* Generates an error if a required value is missing.
* @param callingExpr
* @param provided
* @protected
*/
protected getArgumentValues(callingExpr: FunctionExpr, provided: Array<ExprEvalResult<ExpressionValue>>): Map<string, ExprEvalResult<ExpressionValue>> | ExprEvalError;
private checkArgs;
}