ifc-expressions 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExprVisitor.d.ts +3 -3
- package/dist/IfcExpression.d.ts +25 -23
- package/dist/IfcExpressionErrorListener.d.ts +1 -1
- package/dist/IfcExpressionUtils.d.ts +2 -0
- package/dist/cjs/ExprVisitor.js +126 -0
- package/dist/cjs/ExprVisitor.js.map +1 -0
- package/dist/cjs/IfcExpression.js +43 -40
- package/dist/cjs/IfcExpression.js.map +1 -0
- package/dist/cjs/IfcExpressionErrorListener.js +23 -0
- package/dist/cjs/IfcExpressionErrorListener.js.map +1 -0
- package/dist/cjs/IfcExpressionUtils.js +12 -0
- package/dist/cjs/IfcExpressionUtils.js.map +1 -0
- package/dist/cjs/SyntaxErrorException.js +24 -0
- package/dist/cjs/SyntaxErrorException.js.map +1 -0
- package/dist/cjs/context/IfcElementAccessor.js +34 -0
- package/dist/cjs/context/IfcElementAccessor.js.map +1 -0
- package/dist/cjs/context/IfcExpressionContext.js +3 -0
- package/dist/cjs/context/IfcExpressionContext.js.map +1 -0
- package/dist/cjs/context/IfcPropertyAccessor.js +28 -0
- package/dist/cjs/context/IfcPropertyAccessor.js.map +1 -0
- package/dist/cjs/context/IfcPropertySetAccessor.js +17 -0
- package/dist/cjs/context/IfcPropertySetAccessor.js.map +1 -0
- package/dist/cjs/context/IfcRootObjectAccessor.js +19 -0
- package/dist/cjs/context/IfcRootObjectAccessor.js.map +1 -0
- package/dist/cjs/context/IfcTypeObjectAccessor.js +22 -0
- package/dist/cjs/context/IfcTypeObjectAccessor.js.map +1 -0
- package/dist/cjs/context/NamedObjectAccessor.js +26 -0
- package/dist/cjs/context/NamedObjectAccessor.js.map +1 -0
- package/dist/cjs/context/ObjectAccessor.js +3 -0
- package/dist/cjs/context/ObjectAccessor.js.map +1 -0
- package/dist/cjs/expression/ArrayExpr.js +3 -0
- package/dist/cjs/expression/ArrayExpr.js.map +1 -0
- package/dist/cjs/expression/Expr.js +3 -0
- package/dist/cjs/expression/Expr.js.map +1 -0
- package/dist/cjs/expression/Expr0.js +8 -0
- package/dist/cjs/expression/Expr0.js.map +1 -0
- package/dist/cjs/expression/Expr1.js +10 -0
- package/dist/cjs/expression/Expr1.js.map +1 -0
- package/dist/cjs/expression/Expr2.js +11 -0
- package/dist/cjs/expression/Expr2.js.map +1 -0
- package/dist/cjs/expression/IfcExpressionEvaluationException.js +10 -0
- package/dist/cjs/expression/IfcExpressionEvaluationException.js.map +1 -0
- package/dist/cjs/expression/numeric/DivideExpr.js +18 -0
- package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/MinusExpr.js +18 -0
- package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/MultiplyByExpr.js +18 -0
- package/dist/cjs/expression/numeric/MultiplyByExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/MultiplyExpr.js +18 -0
- package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js +14 -0
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js +14 -0
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -0
- package/dist/cjs/expression/numeric/PlusExpr.js +18 -0
- package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -0
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js +16 -0
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -0
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +14 -0
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -0
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +14 -0
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -0
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js +15 -0
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -0
- package/dist/cjs/expression/reference/ObjectReferenceExpr.js +3 -0
- package/dist/cjs/expression/reference/ObjectReferenceExpr.js.map +1 -0
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +14 -0
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -0
- package/dist/cjs/expression/string/StringConcatExpr.js +15 -0
- package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -0
- package/dist/cjs/expression/string/StringLiteralExpr.js +14 -0
- package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionLexer.js +140 -0
- package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionListener.js +12 -0
- package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionParser.js +1514 -0
- package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionVisitor.js +15 -0
- package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/value/BooleanValue.js +14 -0
- package/dist/cjs/value/BooleanValue.js.map +1 -0
- package/dist/cjs/value/LiteralValue.js +3 -0
- package/dist/cjs/value/LiteralValue.js.map +1 -0
- package/dist/cjs/value/LiteralValueAnyArity.js +3 -0
- package/dist/cjs/value/LiteralValueAnyArity.js.map +1 -0
- package/dist/cjs/value/LogicalValue.js +14 -0
- package/dist/cjs/value/LogicalValue.js.map +1 -0
- package/dist/cjs/value/NumericValue.js +18 -0
- package/dist/cjs/value/NumericValue.js.map +1 -0
- package/dist/cjs/value/PrimitiveValueType.js +3 -0
- package/dist/cjs/value/PrimitiveValueType.js.map +1 -0
- package/dist/cjs/value/ReferenceValue.js +14 -0
- package/dist/cjs/value/ReferenceValue.js.map +1 -0
- package/dist/cjs/value/StringValue.js +14 -0
- package/dist/cjs/value/StringValue.js.map +1 -0
- package/dist/cjs/value/Value.js +13 -0
- package/dist/cjs/value/Value.js.map +1 -0
- package/dist/context/IfcElementAccessor.d.ts +18 -0
- package/dist/context/IfcExpressionContext.d.ts +6 -0
- package/dist/context/IfcPropertyAccessor.d.ts +12 -0
- package/dist/context/IfcPropertySetAccessor.d.ts +11 -0
- package/dist/context/IfcRootObjectAccessor.d.ts +7 -0
- package/dist/context/IfcTypeObjectAccessor.d.ts +13 -0
- package/dist/context/NamedObjectAccessor.d.ts +10 -0
- package/dist/context/ObjectAccessor.d.ts +16 -0
- package/dist/expression/ArrayExpr.d.ts +3 -0
- package/dist/expression/Expr.d.ts +4 -0
- package/dist/expression/Expr0.d.ts +6 -0
- package/dist/expression/Expr1.d.ts +7 -0
- package/dist/expression/Expr2.d.ts +8 -0
- package/dist/expression/IfcExpressionEvaluationException.d.ts +3 -0
- package/dist/expression/numeric/DivideExpr.d.ts +8 -0
- package/dist/expression/numeric/MinusExpr.d.ts +8 -0
- package/dist/expression/numeric/MultiplyByExpr.d.ts +8 -0
- package/dist/expression/numeric/MultiplyExpr.d.ts +8 -0
- package/dist/expression/numeric/NumParenthesisExpr.d.ts +8 -0
- package/dist/expression/numeric/NumericLiteralExpr.d.ts +7 -0
- package/dist/expression/numeric/PlusExpr.d.ts +8 -0
- package/dist/expression/reference/AttributeReferenceExpr.d.ts +9 -0
- package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +8 -0
- package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +8 -0
- package/dist/expression/reference/NestedObjectChainExpr.d.ts +9 -0
- package/dist/expression/reference/ObjectReferenceExpr.d.ts +4 -0
- package/dist/expression/reference/PropObjectReferenceExpr.d.ts +8 -0
- package/dist/expression/string/StringConcatExpr.d.ts +8 -0
- package/dist/expression/string/StringLiteralExpr.d.ts +7 -0
- package/dist/gen/parser/IfcExpressionLexer.d.ts +43 -0
- package/dist/gen/parser/IfcExpressionListener.d.ts +262 -0
- package/dist/gen/parser/IfcExpressionParser.d.ts +265 -0
- package/dist/gen/parser/IfcExpressionVisitor.d.ts +169 -0
- package/dist/mjs/ExprVisitor.js +119 -0
- package/dist/mjs/ExprVisitor.js.map +1 -0
- package/dist/mjs/IfcExpression.js +48 -0
- package/dist/mjs/IfcExpression.js.map +1 -0
- package/dist/mjs/IfcExpressionErrorListener.js +19 -0
- package/dist/mjs/IfcExpressionErrorListener.js.map +1 -0
- package/dist/mjs/IfcExpressionUtils.js +7 -0
- package/dist/mjs/IfcExpressionUtils.js.map +1 -0
- package/dist/mjs/SyntaxErrorException.js +20 -0
- package/dist/mjs/SyntaxErrorException.js.map +1 -0
- package/dist/mjs/context/IfcElementAccessor.js +30 -0
- package/dist/mjs/context/IfcElementAccessor.js.map +1 -0
- package/dist/mjs/context/IfcExpressionContext.js +2 -0
- package/dist/mjs/context/IfcExpressionContext.js.map +1 -0
- package/dist/mjs/context/IfcPropertyAccessor.js +24 -0
- package/dist/mjs/context/IfcPropertyAccessor.js.map +1 -0
- package/dist/mjs/context/IfcPropertySetAccessor.js +13 -0
- package/dist/mjs/context/IfcPropertySetAccessor.js.map +1 -0
- package/dist/mjs/context/IfcRootObjectAccessor.js +15 -0
- package/dist/mjs/context/IfcRootObjectAccessor.js.map +1 -0
- package/dist/mjs/context/IfcTypeObjectAccessor.js +18 -0
- package/dist/mjs/context/IfcTypeObjectAccessor.js.map +1 -0
- package/dist/mjs/context/NamedObjectAccessor.js +22 -0
- package/dist/mjs/context/NamedObjectAccessor.js.map +1 -0
- package/dist/mjs/context/ObjectAccessor.js +2 -0
- package/dist/mjs/context/ObjectAccessor.js.map +1 -0
- package/dist/mjs/expression/ArrayExpr.js +2 -0
- package/dist/mjs/expression/ArrayExpr.js.map +1 -0
- package/dist/mjs/expression/Expr.js +2 -0
- package/dist/mjs/expression/Expr.js.map +1 -0
- package/dist/mjs/expression/Expr0.js +4 -0
- package/dist/mjs/expression/Expr0.js.map +1 -0
- package/dist/mjs/expression/Expr1.js +6 -0
- package/dist/mjs/expression/Expr1.js.map +1 -0
- package/dist/mjs/expression/Expr2.js +7 -0
- package/dist/mjs/expression/Expr2.js.map +1 -0
- package/dist/mjs/expression/IfcExpressionEvaluationException.js +6 -0
- package/dist/mjs/expression/IfcExpressionEvaluationException.js.map +1 -0
- package/dist/mjs/expression/numeric/DivideExpr.js +14 -0
- package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/MinusExpr.js +14 -0
- package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/MultiplyByExpr.js +14 -0
- package/dist/mjs/expression/numeric/MultiplyByExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/MultiplyExpr.js +14 -0
- package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js +10 -0
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js +10 -0
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -0
- package/dist/mjs/expression/numeric/PlusExpr.js +14 -0
- package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -0
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js +12 -0
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -0
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +10 -0
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -0
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +10 -0
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -0
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js +11 -0
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -0
- package/dist/mjs/expression/reference/ObjectReferenceExpr.js +2 -0
- package/dist/mjs/expression/reference/ObjectReferenceExpr.js.map +1 -0
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +10 -0
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -0
- package/dist/mjs/expression/string/StringConcatExpr.js +11 -0
- package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -0
- package/dist/mjs/expression/string/StringLiteralExpr.js +10 -0
- package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionLexer.js +138 -0
- package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionListener.js +9 -0
- package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionParser.js +1487 -0
- package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionVisitor.js +12 -0
- package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
- package/dist/mjs/package.json +1 -0
- package/dist/mjs/value/BooleanValue.js +10 -0
- package/dist/mjs/value/BooleanValue.js.map +1 -0
- package/dist/mjs/value/LiteralValue.js +2 -0
- package/dist/mjs/value/LiteralValue.js.map +1 -0
- package/dist/mjs/value/LiteralValueAnyArity.js +2 -0
- package/dist/mjs/value/LiteralValueAnyArity.js.map +1 -0
- package/dist/mjs/value/LogicalValue.js +10 -0
- package/dist/mjs/value/LogicalValue.js.map +1 -0
- package/dist/mjs/value/NumericValue.js +11 -0
- package/dist/mjs/value/NumericValue.js.map +1 -0
- package/dist/mjs/value/PrimitiveValueType.js +2 -0
- package/dist/mjs/value/PrimitiveValueType.js.map +1 -0
- package/dist/mjs/value/ReferenceValue.js +10 -0
- package/dist/mjs/value/ReferenceValue.js.map +1 -0
- package/dist/mjs/value/StringValue.js +10 -0
- package/dist/mjs/value/StringValue.js.map +1 -0
- package/dist/mjs/value/Value.js +9 -0
- package/dist/mjs/value/Value.js.map +1 -0
- package/dist/value/BooleanValue.d.ts +5 -0
- package/dist/value/LiteralValue.d.ts +6 -0
- package/dist/value/LiteralValueAnyArity.d.ts +2 -0
- package/dist/value/LogicalValue.d.ts +5 -0
- package/dist/value/NumericValue.d.ts +6 -0
- package/dist/value/PrimitiveValueType.d.ts +2 -0
- package/dist/value/ReferenceValue.d.ts +5 -0
- package/dist/value/StringValue.d.ts +5 -0
- package/dist/value/Value.d.ts +6 -0
- package/package.json +3 -2
- package/dist/utils.d.ts +0 -2
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { ATN, DFA, FailedPredicateException, Parser, RuleContext, ParserRuleContext, TerminalNode, Token, TokenStream } from 'antlr4';
|
|
2
|
+
import IfcExpressionListener from "./IfcExpressionListener.js";
|
|
3
|
+
import IfcExpressionVisitor from "./IfcExpressionVisitor.js";
|
|
4
|
+
export default class IfcExpressionParser extends Parser {
|
|
5
|
+
static readonly T__0 = 1;
|
|
6
|
+
static readonly T__1 = 2;
|
|
7
|
+
static readonly T__2 = 3;
|
|
8
|
+
static readonly T__3 = 4;
|
|
9
|
+
static readonly T__4 = 5;
|
|
10
|
+
static readonly T__5 = 6;
|
|
11
|
+
static readonly T__6 = 7;
|
|
12
|
+
static readonly T__7 = 8;
|
|
13
|
+
static readonly T__8 = 9;
|
|
14
|
+
static readonly T__9 = 10;
|
|
15
|
+
static readonly T__10 = 11;
|
|
16
|
+
static readonly INT = 12;
|
|
17
|
+
static readonly FLOAT = 13;
|
|
18
|
+
static readonly PROP = 14;
|
|
19
|
+
static readonly ELEM = 15;
|
|
20
|
+
static readonly RESERVED_ATTRIBUTE_NAME = 16;
|
|
21
|
+
static readonly RESERVED_RELATION_NAME = 17;
|
|
22
|
+
static readonly QUOTED_STRING = 18;
|
|
23
|
+
static readonly BRACKETED_STRING = 19;
|
|
24
|
+
static readonly IDENTIFIER = 20;
|
|
25
|
+
static readonly WS = 21;
|
|
26
|
+
static readonly NEWLINE = 22;
|
|
27
|
+
static readonly EOF: number;
|
|
28
|
+
static readonly RULE_expr = 0;
|
|
29
|
+
static readonly RULE_numExpr = 1;
|
|
30
|
+
static readonly RULE_numLiteral = 2;
|
|
31
|
+
static readonly RULE_stringExpr = 3;
|
|
32
|
+
static readonly RULE_objectRef = 4;
|
|
33
|
+
static readonly RULE_attributeRef = 5;
|
|
34
|
+
static readonly RULE_nestedObjectChain = 6;
|
|
35
|
+
static readonly RULE_namedRef = 7;
|
|
36
|
+
static readonly RULE_functionCall = 8;
|
|
37
|
+
static readonly RULE_exprList = 9;
|
|
38
|
+
static readonly RULE_array = 10;
|
|
39
|
+
static readonly RULE_arrayElementList = 11;
|
|
40
|
+
static readonly literalNames: (string | null)[];
|
|
41
|
+
static readonly symbolicNames: (string | null)[];
|
|
42
|
+
static readonly ruleNames: string[];
|
|
43
|
+
get grammarFileName(): string;
|
|
44
|
+
get literalNames(): (string | null)[];
|
|
45
|
+
get symbolicNames(): (string | null)[];
|
|
46
|
+
get ruleNames(): string[];
|
|
47
|
+
get serializedATN(): number[];
|
|
48
|
+
protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException;
|
|
49
|
+
constructor(input: TokenStream);
|
|
50
|
+
expr(): ExprContext;
|
|
51
|
+
numExpr(): NumExprContext;
|
|
52
|
+
numExpr(_p: number): NumExprContext;
|
|
53
|
+
numLiteral(): NumLiteralContext;
|
|
54
|
+
stringExpr(): StringExprContext;
|
|
55
|
+
stringExpr(_p: number): StringExprContext;
|
|
56
|
+
objectRef(): ObjectRefContext;
|
|
57
|
+
attributeRef(): AttributeRefContext;
|
|
58
|
+
nestedObjectChain(): NestedObjectChainContext;
|
|
59
|
+
namedRef(): NamedRefContext;
|
|
60
|
+
functionCall(): FunctionCallContext;
|
|
61
|
+
exprList(): ExprListContext;
|
|
62
|
+
array(): ArrayContext;
|
|
63
|
+
arrayElementList(): ArrayElementListContext;
|
|
64
|
+
sempred(localctx: RuleContext, ruleIndex: number, predIndex: number): boolean;
|
|
65
|
+
private numExpr_sempred;
|
|
66
|
+
private stringExpr_sempred;
|
|
67
|
+
static readonly _serializedATN: number[];
|
|
68
|
+
private static __ATN;
|
|
69
|
+
static get _ATN(): ATN;
|
|
70
|
+
static DecisionsToDFA: DFA[];
|
|
71
|
+
}
|
|
72
|
+
export declare class ExprContext extends ParserRuleContext {
|
|
73
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
74
|
+
attributeRef(): AttributeRefContext;
|
|
75
|
+
functionCall(): FunctionCallContext;
|
|
76
|
+
numExpr(): NumExprContext;
|
|
77
|
+
array(): ArrayContext;
|
|
78
|
+
stringExpr(): StringExprContext;
|
|
79
|
+
get ruleIndex(): number;
|
|
80
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
81
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
82
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
83
|
+
}
|
|
84
|
+
export declare class NumExprContext extends ParserRuleContext {
|
|
85
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
86
|
+
get ruleIndex(): number;
|
|
87
|
+
copyFrom(ctx: NumExprContext): void;
|
|
88
|
+
}
|
|
89
|
+
export declare class NumMulDivContext extends NumExprContext {
|
|
90
|
+
_op: Token;
|
|
91
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
92
|
+
numExpr_list(): NumExprContext[];
|
|
93
|
+
numExpr(i: number): NumExprContext;
|
|
94
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
95
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
96
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
97
|
+
}
|
|
98
|
+
export declare class NumAddSubContext extends NumExprContext {
|
|
99
|
+
_op: Token;
|
|
100
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
101
|
+
numExpr_list(): NumExprContext[];
|
|
102
|
+
numExpr(i: number): NumExprContext;
|
|
103
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
104
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
105
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
106
|
+
}
|
|
107
|
+
export declare class NumParensContext extends NumExprContext {
|
|
108
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
109
|
+
numExpr(): NumExprContext;
|
|
110
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
111
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
112
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
113
|
+
}
|
|
114
|
+
export declare class NumLitContext extends NumExprContext {
|
|
115
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
116
|
+
numLiteral(): NumLiteralContext;
|
|
117
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
118
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
119
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
120
|
+
}
|
|
121
|
+
export declare class NumFunCallContext extends NumExprContext {
|
|
122
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
123
|
+
functionCall(): FunctionCallContext;
|
|
124
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
125
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
126
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
127
|
+
}
|
|
128
|
+
export declare class NumAttributeRefContext extends NumExprContext {
|
|
129
|
+
constructor(parser: IfcExpressionParser, ctx: NumExprContext);
|
|
130
|
+
attributeRef(): AttributeRefContext;
|
|
131
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
132
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
133
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
134
|
+
}
|
|
135
|
+
export declare class NumLiteralContext extends ParserRuleContext {
|
|
136
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
137
|
+
INT(): TerminalNode;
|
|
138
|
+
FLOAT(): TerminalNode;
|
|
139
|
+
get ruleIndex(): number;
|
|
140
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
141
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
142
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
143
|
+
}
|
|
144
|
+
export declare class StringExprContext extends ParserRuleContext {
|
|
145
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
146
|
+
get ruleIndex(): number;
|
|
147
|
+
copyFrom(ctx: StringExprContext): void;
|
|
148
|
+
}
|
|
149
|
+
export declare class StringAttributeRefContext extends StringExprContext {
|
|
150
|
+
constructor(parser: IfcExpressionParser, ctx: StringExprContext);
|
|
151
|
+
attributeRef(): AttributeRefContext;
|
|
152
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
153
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
154
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
155
|
+
}
|
|
156
|
+
export declare class StringLiteralContext extends StringExprContext {
|
|
157
|
+
constructor(parser: IfcExpressionParser, ctx: StringExprContext);
|
|
158
|
+
QUOTED_STRING(): TerminalNode;
|
|
159
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
160
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
161
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
162
|
+
}
|
|
163
|
+
export declare class StringFunCallContext extends StringExprContext {
|
|
164
|
+
constructor(parser: IfcExpressionParser, ctx: StringExprContext);
|
|
165
|
+
functionCall(): FunctionCallContext;
|
|
166
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
167
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
168
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
169
|
+
}
|
|
170
|
+
export declare class StringConcatContext extends StringExprContext {
|
|
171
|
+
_left: StringExprContext;
|
|
172
|
+
_right: StringExprContext;
|
|
173
|
+
constructor(parser: IfcExpressionParser, ctx: StringExprContext);
|
|
174
|
+
stringExpr_list(): StringExprContext[];
|
|
175
|
+
stringExpr(i: number): StringExprContext;
|
|
176
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
177
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
178
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
179
|
+
}
|
|
180
|
+
export declare class ObjectRefContext extends ParserRuleContext {
|
|
181
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
182
|
+
PROP(): TerminalNode;
|
|
183
|
+
ELEM(): TerminalNode;
|
|
184
|
+
get ruleIndex(): number;
|
|
185
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
186
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
187
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
188
|
+
}
|
|
189
|
+
export declare class AttributeRefContext extends ParserRuleContext {
|
|
190
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
191
|
+
objectRef(): ObjectRefContext;
|
|
192
|
+
nestedObjectChain(): NestedObjectChainContext;
|
|
193
|
+
get ruleIndex(): number;
|
|
194
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
195
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
196
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
197
|
+
}
|
|
198
|
+
export declare class NestedObjectChainContext extends ParserRuleContext {
|
|
199
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
200
|
+
get ruleIndex(): number;
|
|
201
|
+
copyFrom(ctx: NestedObjectChainContext): void;
|
|
202
|
+
}
|
|
203
|
+
export declare class NestedObjectChainEndContext extends NestedObjectChainContext {
|
|
204
|
+
_name: Token;
|
|
205
|
+
constructor(parser: IfcExpressionParser, ctx: NestedObjectChainContext);
|
|
206
|
+
RESERVED_ATTRIBUTE_NAME(): TerminalNode;
|
|
207
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
208
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
209
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
210
|
+
}
|
|
211
|
+
export declare class NestedObjectChainInnerContext extends NestedObjectChainContext {
|
|
212
|
+
constructor(parser: IfcExpressionParser, ctx: NestedObjectChainContext);
|
|
213
|
+
namedRef(): NamedRefContext;
|
|
214
|
+
nestedObjectChain(): NestedObjectChainContext;
|
|
215
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
216
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
217
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
218
|
+
}
|
|
219
|
+
export declare class NamedRefContext extends ParserRuleContext {
|
|
220
|
+
_name: Token;
|
|
221
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
222
|
+
RESERVED_RELATION_NAME(): TerminalNode;
|
|
223
|
+
BRACKETED_STRING(): TerminalNode;
|
|
224
|
+
IDENTIFIER(): TerminalNode;
|
|
225
|
+
get ruleIndex(): number;
|
|
226
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
227
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
228
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
229
|
+
}
|
|
230
|
+
export declare class FunctionCallContext extends ParserRuleContext {
|
|
231
|
+
_name: Token;
|
|
232
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
233
|
+
exprList(): ExprListContext;
|
|
234
|
+
IDENTIFIER(): TerminalNode;
|
|
235
|
+
get ruleIndex(): number;
|
|
236
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
237
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
238
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
239
|
+
}
|
|
240
|
+
export declare class ExprListContext extends ParserRuleContext {
|
|
241
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
242
|
+
expr(): ExprContext;
|
|
243
|
+
exprList(): ExprListContext;
|
|
244
|
+
get ruleIndex(): number;
|
|
245
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
246
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
247
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
248
|
+
}
|
|
249
|
+
export declare class ArrayContext extends ParserRuleContext {
|
|
250
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
251
|
+
arrayElementList(): ArrayElementListContext;
|
|
252
|
+
get ruleIndex(): number;
|
|
253
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
254
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
255
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
256
|
+
}
|
|
257
|
+
export declare class ArrayElementListContext extends ParserRuleContext {
|
|
258
|
+
constructor(parser?: IfcExpressionParser, parent?: ParserRuleContext, invokingState?: number);
|
|
259
|
+
expr(): ExprContext;
|
|
260
|
+
arrayElementList(): ArrayElementListContext;
|
|
261
|
+
get ruleIndex(): number;
|
|
262
|
+
enterRule(listener: IfcExpressionListener): void;
|
|
263
|
+
exitRule(listener: IfcExpressionListener): void;
|
|
264
|
+
accept<Result>(visitor: IfcExpressionVisitor<Result>): Result;
|
|
265
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ParseTreeVisitor } from 'antlr4';
|
|
2
|
+
import { ExprContext } from "./IfcExpressionParser";
|
|
3
|
+
import { NumMulDivContext } from "./IfcExpressionParser";
|
|
4
|
+
import { NumAddSubContext } from "./IfcExpressionParser";
|
|
5
|
+
import { NumParensContext } from "./IfcExpressionParser";
|
|
6
|
+
import { NumLitContext } from "./IfcExpressionParser";
|
|
7
|
+
import { NumFunCallContext } from "./IfcExpressionParser";
|
|
8
|
+
import { NumAttributeRefContext } from "./IfcExpressionParser";
|
|
9
|
+
import { NumLiteralContext } from "./IfcExpressionParser";
|
|
10
|
+
import { StringAttributeRefContext } from "./IfcExpressionParser";
|
|
11
|
+
import { StringLiteralContext } from "./IfcExpressionParser";
|
|
12
|
+
import { StringFunCallContext } from "./IfcExpressionParser";
|
|
13
|
+
import { StringConcatContext } from "./IfcExpressionParser";
|
|
14
|
+
import { ObjectRefContext } from "./IfcExpressionParser";
|
|
15
|
+
import { AttributeRefContext } from "./IfcExpressionParser";
|
|
16
|
+
import { NestedObjectChainInnerContext } from "./IfcExpressionParser";
|
|
17
|
+
import { NestedObjectChainEndContext } from "./IfcExpressionParser";
|
|
18
|
+
import { NamedRefContext } from "./IfcExpressionParser";
|
|
19
|
+
import { FunctionCallContext } from "./IfcExpressionParser";
|
|
20
|
+
import { ExprListContext } from "./IfcExpressionParser";
|
|
21
|
+
import { ArrayContext } from "./IfcExpressionParser";
|
|
22
|
+
import { ArrayElementListContext } from "./IfcExpressionParser";
|
|
23
|
+
/**
|
|
24
|
+
* This interface defines a complete generic visitor for a parse tree produced
|
|
25
|
+
* by `IfcExpressionParser`.
|
|
26
|
+
*
|
|
27
|
+
* @param <Result> The return type of the visit operation. Use `void` for
|
|
28
|
+
* operations with no return type.
|
|
29
|
+
*/
|
|
30
|
+
export default class IfcExpressionVisitor<Result> extends ParseTreeVisitor<Result> {
|
|
31
|
+
/**
|
|
32
|
+
* Visit a parse tree produced by `IfcExpressionParser.expr`.
|
|
33
|
+
* @param ctx the parse tree
|
|
34
|
+
* @return the visitor result
|
|
35
|
+
*/
|
|
36
|
+
visitExpr?: (ctx: ExprContext) => Result;
|
|
37
|
+
/**
|
|
38
|
+
* Visit a parse tree produced by the `numMulDiv`
|
|
39
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
40
|
+
* @param ctx the parse tree
|
|
41
|
+
* @return the visitor result
|
|
42
|
+
*/
|
|
43
|
+
visitNumMulDiv?: (ctx: NumMulDivContext) => Result;
|
|
44
|
+
/**
|
|
45
|
+
* Visit a parse tree produced by the `numAddSub`
|
|
46
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
47
|
+
* @param ctx the parse tree
|
|
48
|
+
* @return the visitor result
|
|
49
|
+
*/
|
|
50
|
+
visitNumAddSub?: (ctx: NumAddSubContext) => Result;
|
|
51
|
+
/**
|
|
52
|
+
* Visit a parse tree produced by the `numParens`
|
|
53
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
54
|
+
* @param ctx the parse tree
|
|
55
|
+
* @return the visitor result
|
|
56
|
+
*/
|
|
57
|
+
visitNumParens?: (ctx: NumParensContext) => Result;
|
|
58
|
+
/**
|
|
59
|
+
* Visit a parse tree produced by the `numLit`
|
|
60
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
61
|
+
* @param ctx the parse tree
|
|
62
|
+
* @return the visitor result
|
|
63
|
+
*/
|
|
64
|
+
visitNumLit?: (ctx: NumLitContext) => Result;
|
|
65
|
+
/**
|
|
66
|
+
* Visit a parse tree produced by the `numFunCall`
|
|
67
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
68
|
+
* @param ctx the parse tree
|
|
69
|
+
* @return the visitor result
|
|
70
|
+
*/
|
|
71
|
+
visitNumFunCall?: (ctx: NumFunCallContext) => Result;
|
|
72
|
+
/**
|
|
73
|
+
* Visit a parse tree produced by the `numAttributeRef`
|
|
74
|
+
* labeled alternative in `IfcExpressionParser.numExpr`.
|
|
75
|
+
* @param ctx the parse tree
|
|
76
|
+
* @return the visitor result
|
|
77
|
+
*/
|
|
78
|
+
visitNumAttributeRef?: (ctx: NumAttributeRefContext) => Result;
|
|
79
|
+
/**
|
|
80
|
+
* Visit a parse tree produced by `IfcExpressionParser.numLiteral`.
|
|
81
|
+
* @param ctx the parse tree
|
|
82
|
+
* @return the visitor result
|
|
83
|
+
*/
|
|
84
|
+
visitNumLiteral?: (ctx: NumLiteralContext) => Result;
|
|
85
|
+
/**
|
|
86
|
+
* Visit a parse tree produced by the `stringAttributeRef`
|
|
87
|
+
* labeled alternative in `IfcExpressionParser.stringExpr`.
|
|
88
|
+
* @param ctx the parse tree
|
|
89
|
+
* @return the visitor result
|
|
90
|
+
*/
|
|
91
|
+
visitStringAttributeRef?: (ctx: StringAttributeRefContext) => Result;
|
|
92
|
+
/**
|
|
93
|
+
* Visit a parse tree produced by the `stringLiteral`
|
|
94
|
+
* labeled alternative in `IfcExpressionParser.stringExpr`.
|
|
95
|
+
* @param ctx the parse tree
|
|
96
|
+
* @return the visitor result
|
|
97
|
+
*/
|
|
98
|
+
visitStringLiteral?: (ctx: StringLiteralContext) => Result;
|
|
99
|
+
/**
|
|
100
|
+
* Visit a parse tree produced by the `stringFunCall`
|
|
101
|
+
* labeled alternative in `IfcExpressionParser.stringExpr`.
|
|
102
|
+
* @param ctx the parse tree
|
|
103
|
+
* @return the visitor result
|
|
104
|
+
*/
|
|
105
|
+
visitStringFunCall?: (ctx: StringFunCallContext) => Result;
|
|
106
|
+
/**
|
|
107
|
+
* Visit a parse tree produced by the `stringConcat`
|
|
108
|
+
* labeled alternative in `IfcExpressionParser.stringExpr`.
|
|
109
|
+
* @param ctx the parse tree
|
|
110
|
+
* @return the visitor result
|
|
111
|
+
*/
|
|
112
|
+
visitStringConcat?: (ctx: StringConcatContext) => Result;
|
|
113
|
+
/**
|
|
114
|
+
* Visit a parse tree produced by `IfcExpressionParser.objectRef`.
|
|
115
|
+
* @param ctx the parse tree
|
|
116
|
+
* @return the visitor result
|
|
117
|
+
*/
|
|
118
|
+
visitObjectRef?: (ctx: ObjectRefContext) => Result;
|
|
119
|
+
/**
|
|
120
|
+
* Visit a parse tree produced by `IfcExpressionParser.attributeRef`.
|
|
121
|
+
* @param ctx the parse tree
|
|
122
|
+
* @return the visitor result
|
|
123
|
+
*/
|
|
124
|
+
visitAttributeRef?: (ctx: AttributeRefContext) => Result;
|
|
125
|
+
/**
|
|
126
|
+
* Visit a parse tree produced by the `nestedObjectChainInner`
|
|
127
|
+
* labeled alternative in `IfcExpressionParser.nestedObjectChain`.
|
|
128
|
+
* @param ctx the parse tree
|
|
129
|
+
* @return the visitor result
|
|
130
|
+
*/
|
|
131
|
+
visitNestedObjectChainInner?: (ctx: NestedObjectChainInnerContext) => Result;
|
|
132
|
+
/**
|
|
133
|
+
* Visit a parse tree produced by the `nestedObjectChainEnd`
|
|
134
|
+
* labeled alternative in `IfcExpressionParser.nestedObjectChain`.
|
|
135
|
+
* @param ctx the parse tree
|
|
136
|
+
* @return the visitor result
|
|
137
|
+
*/
|
|
138
|
+
visitNestedObjectChainEnd?: (ctx: NestedObjectChainEndContext) => Result;
|
|
139
|
+
/**
|
|
140
|
+
* Visit a parse tree produced by `IfcExpressionParser.namedRef`.
|
|
141
|
+
* @param ctx the parse tree
|
|
142
|
+
* @return the visitor result
|
|
143
|
+
*/
|
|
144
|
+
visitNamedRef?: (ctx: NamedRefContext) => Result;
|
|
145
|
+
/**
|
|
146
|
+
* Visit a parse tree produced by `IfcExpressionParser.functionCall`.
|
|
147
|
+
* @param ctx the parse tree
|
|
148
|
+
* @return the visitor result
|
|
149
|
+
*/
|
|
150
|
+
visitFunctionCall?: (ctx: FunctionCallContext) => Result;
|
|
151
|
+
/**
|
|
152
|
+
* Visit a parse tree produced by `IfcExpressionParser.exprList`.
|
|
153
|
+
* @param ctx the parse tree
|
|
154
|
+
* @return the visitor result
|
|
155
|
+
*/
|
|
156
|
+
visitExprList?: (ctx: ExprListContext) => Result;
|
|
157
|
+
/**
|
|
158
|
+
* Visit a parse tree produced by `IfcExpressionParser.array`.
|
|
159
|
+
* @param ctx the parse tree
|
|
160
|
+
* @return the visitor result
|
|
161
|
+
*/
|
|
162
|
+
visitArray?: (ctx: ArrayContext) => Result;
|
|
163
|
+
/**
|
|
164
|
+
* Visit a parse tree produced by `IfcExpressionParser.arrayElementList`.
|
|
165
|
+
* @param ctx the parse tree
|
|
166
|
+
* @return the visitor result
|
|
167
|
+
*/
|
|
168
|
+
visitArrayElementList?: (ctx: ArrayElementListContext) => Result;
|
|
169
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
|
|
2
|
+
import { NumericLiteralExpr } from "./expression/numeric/NumericLiteralExpr.js";
|
|
3
|
+
import { isPresent } from "./IfcExpressionUtils.js";
|
|
4
|
+
import Decimal from "decimal.js";
|
|
5
|
+
import { PlusExpr } from "./expression/numeric/PlusExpr.js";
|
|
6
|
+
import { MinusExpr } from "./expression/numeric/MinusExpr.js";
|
|
7
|
+
import { MultiplyExpr } from "./expression/numeric/MultiplyExpr.js";
|
|
8
|
+
import { DivideExpr } from "./expression/numeric/DivideExpr.js";
|
|
9
|
+
import { NumParenthesisExpr } from "./expression/numeric/NumParenthesisExpr.js";
|
|
10
|
+
import { AttributeReferenceExpr } from "./expression/reference/AttributeReferenceExpr.js";
|
|
11
|
+
import { PropObjectReferenceExpr } from "./expression/reference/PropObjectReferenceExpr.js";
|
|
12
|
+
import { ElemObjectReferenceExpr } from "./expression/reference/ElemObjectReferenceExpr.js";
|
|
13
|
+
import { NestedObjectChainExpr } from "./expression/reference/NestedObjectChainExpr.js";
|
|
14
|
+
import { NestedObjectChainEndExpr } from "./expression/reference/NestedObjectChainEndExpr.js";
|
|
15
|
+
import { NumericValue } from "./value/NumericValue.js";
|
|
16
|
+
import { StringValue } from "./value/StringValue.js";
|
|
17
|
+
import { StringLiteralExpr } from "./expression/string/StringLiteralExpr.js";
|
|
18
|
+
import { StringConcatExpr } from "./expression/string/StringConcatExpr.js";
|
|
19
|
+
export class ExprVisitor extends IfcExpressionVisitor {
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
/*================================================
|
|
23
|
+
* AttributeRef
|
|
24
|
+
*==============================================*/
|
|
25
|
+
this.visitAttributeRef = (ctx) => {
|
|
26
|
+
const objectRefExpr = this.visit(ctx.objectRef());
|
|
27
|
+
const nestedObjectChainExpr = this.visit(ctx.nestedObjectChain());
|
|
28
|
+
return new AttributeReferenceExpr(objectRefExpr, nestedObjectChainExpr);
|
|
29
|
+
};
|
|
30
|
+
this.visitObjectRef = (ctx) => {
|
|
31
|
+
if (isPresent(ctx.PROP())) {
|
|
32
|
+
return new PropObjectReferenceExpr();
|
|
33
|
+
}
|
|
34
|
+
else if (isPresent(ctx.ELEM())) {
|
|
35
|
+
return new ElemObjectReferenceExpr();
|
|
36
|
+
}
|
|
37
|
+
this.failNode(ctx);
|
|
38
|
+
};
|
|
39
|
+
this.visitNestedObjectChainInner = (ctx) => {
|
|
40
|
+
let name = ctx.namedRef().getChild(0).getText();
|
|
41
|
+
name = this.stripBrackets(name);
|
|
42
|
+
return new NestedObjectChainExpr(name, this.visit(ctx.nestedObjectChain()));
|
|
43
|
+
};
|
|
44
|
+
this.visitNestedObjectChainEnd = (ctx) => {
|
|
45
|
+
let name = ctx.RESERVED_ATTRIBUTE_NAME().getText();
|
|
46
|
+
return new NestedObjectChainEndExpr(name);
|
|
47
|
+
};
|
|
48
|
+
/*================================================
|
|
49
|
+
* StringExpr
|
|
50
|
+
*===============================================*/
|
|
51
|
+
this.visitStringLiteral = (ctx) => {
|
|
52
|
+
const quotedString = ctx.QUOTED_STRING().getText();
|
|
53
|
+
const text = quotedString.substring(1, quotedString.length - 1);
|
|
54
|
+
return new StringLiteralExpr(new StringValue(text));
|
|
55
|
+
};
|
|
56
|
+
this.visitStringAttributeRef = (ctx) => {
|
|
57
|
+
return this.visit(ctx.getChild(0));
|
|
58
|
+
};
|
|
59
|
+
this.visitStringConcat = (ctx) => {
|
|
60
|
+
return new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right));
|
|
61
|
+
};
|
|
62
|
+
/*================================================
|
|
63
|
+
* NumExpr
|
|
64
|
+
*===============================================*/
|
|
65
|
+
this.visitNumAttributeRef = (ctx) => {
|
|
66
|
+
return this.visit(ctx.getChild(0));
|
|
67
|
+
};
|
|
68
|
+
this.visitNumLiteral = (ctx) => {
|
|
69
|
+
let val = ctx.INT();
|
|
70
|
+
if (isPresent(val)) {
|
|
71
|
+
return new NumericLiteralExpr(new NumericValue(new Decimal(val.symbol.text)));
|
|
72
|
+
}
|
|
73
|
+
val = ctx.FLOAT();
|
|
74
|
+
if (isPresent(val)) {
|
|
75
|
+
return new NumericLiteralExpr(new NumericValue(new Decimal(val.symbol.text)));
|
|
76
|
+
}
|
|
77
|
+
this.failNode(ctx);
|
|
78
|
+
};
|
|
79
|
+
this.visitNumAddSub = (ctx) => {
|
|
80
|
+
switch (ctx._op.text) {
|
|
81
|
+
case "+":
|
|
82
|
+
return new PlusExpr(this.visit(ctx.getChild(0)), this.visit(ctx.getChild(2)));
|
|
83
|
+
case "-":
|
|
84
|
+
return new MinusExpr(this.visit(ctx.getChild(0)), this.visit(ctx.getChild(2)));
|
|
85
|
+
default:
|
|
86
|
+
this.failNode(ctx);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
this.visitNumMulDiv = (ctx) => {
|
|
90
|
+
switch (ctx._op.text) {
|
|
91
|
+
case "*":
|
|
92
|
+
return new MultiplyExpr(this.visit(ctx.getChild(0)), this.visit(ctx.getChild(2)));
|
|
93
|
+
case "/":
|
|
94
|
+
return new DivideExpr(this.visit(ctx.getChild(0)), this.visit(ctx.getChild(2)));
|
|
95
|
+
default:
|
|
96
|
+
this.failNode(ctx);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
this.visitNumParens = (ctx) => {
|
|
100
|
+
return new NumParenthesisExpr(this.visit(ctx.getChild(1)));
|
|
101
|
+
};
|
|
102
|
+
this.visitExpr = (ctx) => {
|
|
103
|
+
return this.visit(ctx.getChild(0));
|
|
104
|
+
};
|
|
105
|
+
this.visitNumLit = (ctx) => {
|
|
106
|
+
return this.visit(ctx.getChild(0));
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
stripBrackets(name) {
|
|
110
|
+
if (name.startsWith("{")) {
|
|
111
|
+
return name.substring(1, name.length - 1);
|
|
112
|
+
}
|
|
113
|
+
return name;
|
|
114
|
+
}
|
|
115
|
+
failNode(ctx) {
|
|
116
|
+
throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ExprVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ExprVisitor.ts"],"names":[],"mappings":"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","file":"ExprVisitor.js","sourcesContent":["import IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"./expression/numeric/NumericLiteralExpr.js\";\nimport {\n AttributeRefContext,\n ExprContext,\n NestedObjectChainEndContext,\n NestedObjectChainInnerContext,\n NumAddSubContext,\n NumAttributeRefContext,\n NumLitContext,\n NumLiteralContext,\n NumMulDivContext,\n NumParensContext,\n ObjectRefContext,\n StringAttributeRefContext,\n StringConcatContext,\n StringLiteralContext,\n} from \"./gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"./expression/Expr.js\";\nimport { isPresent } from \"./IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"./expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"./expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"./expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"./expression/numeric/DivideExpr.js\";\nimport { NumParenthesisExpr } from \"./expression/numeric/NumParenthesisExpr.js\";\nimport { AttributeReferenceExpr } from \"./expression/reference/AttributeReferenceExpr.js\";\nimport { PropObjectReferenceExpr } from \"./expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"./expression/reference/ElemObjectReferenceExpr.js\";\nimport { NestedObjectChainExpr } from \"./expression/reference/NestedObjectChainExpr.js\";\nimport { NestedObjectChainEndExpr } from \"./expression/reference/NestedObjectChainEndExpr.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { StringLiteralExpr } from \"./expression/string/StringLiteralExpr.js\";\nimport { StringConcatExpr } from \"./expression/string/StringConcatExpr.js\";\n\nexport class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {\n constructor() {\n super();\n }\n\n /*================================================\n * AttributeRef\n *==============================================*/\n\n visitAttributeRef: (ctx: AttributeRefContext) => Expr<any> = (ctx) => {\n const objectRefExpr = this.visit(ctx.objectRef());\n const nestedObjectChainExpr = this.visit(ctx.nestedObjectChain());\n return new AttributeReferenceExpr(\n objectRefExpr,\n nestedObjectChainExpr as NestedObjectChainExpr\n );\n };\n\n visitObjectRef: (ctx: ObjectRefContext) => Expr<any> = (ctx) => {\n if (isPresent(ctx.PROP())) {\n return new PropObjectReferenceExpr();\n } else if (isPresent(ctx.ELEM())) {\n return new ElemObjectReferenceExpr();\n }\n this.failNode(ctx);\n };\n\n visitNestedObjectChainInner: (\n ctx: NestedObjectChainInnerContext\n ) => Expr<any> = (ctx) => {\n let name = ctx.namedRef().getChild(0).getText();\n name = this.stripBrackets(name);\n return new NestedObjectChainExpr(\n name,\n this.visit(ctx.nestedObjectChain()) as NestedObjectChainExpr\n );\n };\n\n visitNestedObjectChainEnd: (ctx: NestedObjectChainEndContext) => Expr<any> = (\n ctx\n ) => {\n let name = ctx.RESERVED_ATTRIBUTE_NAME().getText();\n return new NestedObjectChainEndExpr(name);\n };\n\n private stripBrackets(name: string) {\n if (name.startsWith(\"{\")) {\n return name.substring(1, name.length - 1);\n }\n return name;\n }\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return new StringLiteralExpr(new StringValue(text));\n };\n\n visitStringAttributeRef: (ctx: StringAttributeRefContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitStringConcat: (ctx: StringConcatContext) => Expr<any> = (ctx) => {\n return new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right));\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumAttributeRef: (ctx: NumAttributeRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(val.symbol.text))\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(val.symbol.text))\n );\n }\n this.failNode(ctx);\n };\n\n visitNumAddSub: (ctx: NumAddSubContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"+\":\n return new PlusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"-\":\n return new MinusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumMulDiv: (ctx: NumMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"/\":\n return new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumParens: (ctx: NumParensContext) => Expr<any> = (ctx) => {\n return new NumParenthesisExpr(this.visit(ctx.getChild(1)));\n };\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLit: (ctx: NumLitContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n private failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CharStream, CommonTokenStream } from "antlr4";
|
|
2
|
+
import { ExprVisitor } from "./ExprVisitor.js";
|
|
3
|
+
import { IfcExpressionErrorListener } from "./IfcExpressionErrorListener.js";
|
|
4
|
+
import { isPresent, isNullish } from "./IfcExpressionUtils.js";
|
|
5
|
+
import { IfcElementAccessor } from "./context/IfcElementAccessor.js";
|
|
6
|
+
import { Value } from "./value/Value.js";
|
|
7
|
+
import { StringValue } from "./value/StringValue.js";
|
|
8
|
+
import { NumericValue } from "./value/NumericValue.js";
|
|
9
|
+
import { BooleanValue } from "./value/BooleanValue.js";
|
|
10
|
+
import { LogicalValue } from "./value/LogicalValue.js";
|
|
11
|
+
import { ReferenceValue } from "./value/ReferenceValue.js";
|
|
12
|
+
import { IfcPropertySetAccessor } from "./context/IfcPropertySetAccessor.js";
|
|
13
|
+
import { IfcPropertyAccessor } from "./context/IfcPropertyAccessor.js";
|
|
14
|
+
import { IfcRootObjectAccessor } from "./context/IfcRootObjectAccessor.js";
|
|
15
|
+
import { IfcTypeObjectAccessor } from "./context/IfcTypeObjectAccessor.js";
|
|
16
|
+
import { NamedObjectAccessor } from "./context/NamedObjectAccessor.js";
|
|
17
|
+
import IfcExpressionParser from "./gen/parser/IfcExpressionParser.js";
|
|
18
|
+
import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
|
|
19
|
+
import IfcExpressionLexer from "./gen/parser/IfcExpressionLexer.js";
|
|
20
|
+
import { IfcExpressionEvaluationException } from "./expression/IfcExpressionEvaluationException.js";
|
|
21
|
+
export { IfcElementAccessor, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ExprVisitor, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, };
|
|
22
|
+
export class IfcExpression {
|
|
23
|
+
static parse(input, errorListener) {
|
|
24
|
+
const chars = new CharStream(input); // replace this with a FileStream as required
|
|
25
|
+
const lexer = new IfcExpressionLexer(chars);
|
|
26
|
+
const tokens = new CommonTokenStream(lexer);
|
|
27
|
+
const parser = new IfcExpressionParser(tokens);
|
|
28
|
+
if (isPresent(errorListener)) {
|
|
29
|
+
parser.removeErrorListeners();
|
|
30
|
+
parser.addErrorListener(errorListener);
|
|
31
|
+
}
|
|
32
|
+
return parser.expr();
|
|
33
|
+
}
|
|
34
|
+
static evaluate(expression, context) {
|
|
35
|
+
const errorListener = new IfcExpressionErrorListener();
|
|
36
|
+
const tree = IfcExpression.parse(expression, errorListener);
|
|
37
|
+
if (errorListener.isErrorOccurred()) {
|
|
38
|
+
throw errorListener.getException();
|
|
39
|
+
}
|
|
40
|
+
const parsedExpression = this.extractExprTree(tree);
|
|
41
|
+
return parsedExpression.evaluate(context);
|
|
42
|
+
}
|
|
43
|
+
static extractExprTree(tree) {
|
|
44
|
+
const visitor = new ExprVisitor();
|
|
45
|
+
return visitor.visit(tree);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=IfcExpression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["IfcExpression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAwB,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,mBAAmB,MAAM,qCAAqC,CAAC;AACtE,OAAO,oBAAoB,MAAM,sCAAsC,CAAC;AACxE,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,kDAAkD,CAAC;AAGpG,OAAO,EACL,kBAAkB,EAElB,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EAEZ,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EAGnB,WAAW,EACX,gCAAgC,EAChC,0BAA0B,EAC1B,oBAAoB,EACpB,SAAS,EACT,SAAS,GACV,CAAC;AAIF,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,KAAK,CACjB,KAAa,EACb,aAAoC;QAEpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,6CAA6C;QAClF,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE;YAC5B,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;SACxC;QACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,QAAQ,CACpB,UAAkB,EAClB,OAA6B;QAE7B,MAAM,aAAa,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACvD,MAAM,IAAI,GAAgB,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzE,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE;YACnC,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;SACpC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,IAAiB;QAC9C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF","file":"IfcExpression.js","sourcesContent":["import { CharStream, CommonTokenStream, ErrorListener, Token } from \"antlr4\";\nimport { ExprVisitor } from \"./ExprVisitor.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { isPresent, isNullish } from \"./IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { LiteralValue } from \"./value/LiteralValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport { ExprContext } from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { LiteralValueAnyArity } from \"./value/LiteralValueAnyArity.js\";\nimport type { PrimitiveValueType } from \"./value/PrimitiveValueType.js\";\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n LiteralValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprVisitor,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n};\n\nexport type { PrimitiveValueType, LiteralValueAnyArity };\n\nexport class IfcExpression {\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token>\n ): ExprContext {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n if (isPresent(errorListener)) {\n parser.removeErrorListeners();\n parser.addErrorListener(errorListener);\n }\n return parser.expr();\n }\n\n public static evaluate(\n expression: string,\n context: IfcExpressionContext\n ): LiteralValueAnyArity {\n const errorListener = new IfcExpressionErrorListener();\n const tree: ExprContext = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n throw errorListener.getException();\n }\n const parsedExpression = this.extractExprTree(tree);\n return parsedExpression.evaluate(context);\n }\n\n private static extractExprTree(tree: ExprContext): Expr<any> {\n const visitor = new ExprVisitor();\n return visitor.visit(tree);\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ErrorListener } from "antlr4";
|
|
2
|
+
import { isPresent } from "./IfcExpressionUtils.js";
|
|
3
|
+
import { SyntaxErrorException } from "./SyntaxErrorException.js";
|
|
4
|
+
export class IfcExpressionErrorListener extends ErrorListener {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.exception = null;
|
|
8
|
+
}
|
|
9
|
+
syntaxError(recognizer, offendingSymbol, line, column, msg, e) {
|
|
10
|
+
this.exception = new SyntaxErrorException(offendingSymbol, line, column, msg);
|
|
11
|
+
}
|
|
12
|
+
isErrorOccurred() {
|
|
13
|
+
return isPresent(this.exception);
|
|
14
|
+
}
|
|
15
|
+
getException() {
|
|
16
|
+
return this.exception;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=IfcExpressionErrorListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["IfcExpressionErrorListener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA2C,MAAM,QAAQ,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,OAAO,0BAA2B,SAAQ,aAAoB;IAApE;;QACU,cAAS,GAAyB,IAAI,CAAC;IAyBjD,CAAC;IAvBC,WAAW,CACT,UAA6B,EAC7B,eAAsB,EACtB,IAAY,EACZ,MAAc,EACd,GAAW,EACX,CAAmC;QAEnC,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CACvC,eAAe,EACf,IAAI,EACJ,MAAM,EACN,GAAG,CACJ,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF","file":"IfcExpressionErrorListener.js","sourcesContent":["import { ErrorListener, RecognitionException, Recognizer, Token } from \"antlr4\";\nimport { isPresent } from \"./IfcExpressionUtils.js\";\nimport { SyntaxErrorException } from \"./SyntaxErrorException.js\";\n\nexport class IfcExpressionErrorListener extends ErrorListener<Token> {\n private exception: SyntaxErrorException = null;\n\n syntaxError(\n recognizer: Recognizer<Token>,\n offendingSymbol: Token,\n line: number,\n column: number,\n msg: string,\n e: RecognitionException | undefined\n ) {\n this.exception = new SyntaxErrorException(\n offendingSymbol,\n line,\n column,\n msg\n );\n }\n\n public isErrorOccurred(): boolean {\n return isPresent(this.exception);\n }\n\n public getException(): SyntaxErrorException {\n return this.exception;\n }\n}\n"]}
|