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.
Files changed (238) hide show
  1. package/dist/ExprVisitor.d.ts +3 -3
  2. package/dist/IfcExpression.d.ts +25 -23
  3. package/dist/IfcExpressionErrorListener.d.ts +1 -1
  4. package/dist/IfcExpressionUtils.d.ts +2 -0
  5. package/dist/cjs/ExprVisitor.js +126 -0
  6. package/dist/cjs/ExprVisitor.js.map +1 -0
  7. package/dist/cjs/IfcExpression.js +43 -40
  8. package/dist/cjs/IfcExpression.js.map +1 -0
  9. package/dist/cjs/IfcExpressionErrorListener.js +23 -0
  10. package/dist/cjs/IfcExpressionErrorListener.js.map +1 -0
  11. package/dist/cjs/IfcExpressionUtils.js +12 -0
  12. package/dist/cjs/IfcExpressionUtils.js.map +1 -0
  13. package/dist/cjs/SyntaxErrorException.js +24 -0
  14. package/dist/cjs/SyntaxErrorException.js.map +1 -0
  15. package/dist/cjs/context/IfcElementAccessor.js +34 -0
  16. package/dist/cjs/context/IfcElementAccessor.js.map +1 -0
  17. package/dist/cjs/context/IfcExpressionContext.js +3 -0
  18. package/dist/cjs/context/IfcExpressionContext.js.map +1 -0
  19. package/dist/cjs/context/IfcPropertyAccessor.js +28 -0
  20. package/dist/cjs/context/IfcPropertyAccessor.js.map +1 -0
  21. package/dist/cjs/context/IfcPropertySetAccessor.js +17 -0
  22. package/dist/cjs/context/IfcPropertySetAccessor.js.map +1 -0
  23. package/dist/cjs/context/IfcRootObjectAccessor.js +19 -0
  24. package/dist/cjs/context/IfcRootObjectAccessor.js.map +1 -0
  25. package/dist/cjs/context/IfcTypeObjectAccessor.js +22 -0
  26. package/dist/cjs/context/IfcTypeObjectAccessor.js.map +1 -0
  27. package/dist/cjs/context/NamedObjectAccessor.js +26 -0
  28. package/dist/cjs/context/NamedObjectAccessor.js.map +1 -0
  29. package/dist/cjs/context/ObjectAccessor.js +3 -0
  30. package/dist/cjs/context/ObjectAccessor.js.map +1 -0
  31. package/dist/cjs/expression/ArrayExpr.js +3 -0
  32. package/dist/cjs/expression/ArrayExpr.js.map +1 -0
  33. package/dist/cjs/expression/Expr.js +3 -0
  34. package/dist/cjs/expression/Expr.js.map +1 -0
  35. package/dist/cjs/expression/Expr0.js +8 -0
  36. package/dist/cjs/expression/Expr0.js.map +1 -0
  37. package/dist/cjs/expression/Expr1.js +10 -0
  38. package/dist/cjs/expression/Expr1.js.map +1 -0
  39. package/dist/cjs/expression/Expr2.js +11 -0
  40. package/dist/cjs/expression/Expr2.js.map +1 -0
  41. package/dist/cjs/expression/IfcExpressionEvaluationException.js +10 -0
  42. package/dist/cjs/expression/IfcExpressionEvaluationException.js.map +1 -0
  43. package/dist/cjs/expression/numeric/DivideExpr.js +18 -0
  44. package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -0
  45. package/dist/cjs/expression/numeric/MinusExpr.js +18 -0
  46. package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -0
  47. package/dist/cjs/expression/numeric/MultiplyByExpr.js +18 -0
  48. package/dist/cjs/expression/numeric/MultiplyByExpr.js.map +1 -0
  49. package/dist/cjs/expression/numeric/MultiplyExpr.js +18 -0
  50. package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -0
  51. package/dist/cjs/expression/numeric/NumParenthesisExpr.js +14 -0
  52. package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -0
  53. package/dist/cjs/expression/numeric/NumericLiteralExpr.js +14 -0
  54. package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -0
  55. package/dist/cjs/expression/numeric/PlusExpr.js +18 -0
  56. package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -0
  57. package/dist/cjs/expression/reference/AttributeReferenceExpr.js +16 -0
  58. package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -0
  59. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +14 -0
  60. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -0
  61. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +14 -0
  62. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -0
  63. package/dist/cjs/expression/reference/NestedObjectChainExpr.js +15 -0
  64. package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -0
  65. package/dist/cjs/expression/reference/ObjectReferenceExpr.js +3 -0
  66. package/dist/cjs/expression/reference/ObjectReferenceExpr.js.map +1 -0
  67. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +14 -0
  68. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -0
  69. package/dist/cjs/expression/string/StringConcatExpr.js +15 -0
  70. package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -0
  71. package/dist/cjs/expression/string/StringLiteralExpr.js +14 -0
  72. package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -0
  73. package/dist/cjs/gen/parser/IfcExpressionLexer.js +140 -0
  74. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -0
  75. package/dist/cjs/gen/parser/IfcExpressionListener.js +12 -0
  76. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -0
  77. package/dist/cjs/gen/parser/IfcExpressionParser.js +1514 -0
  78. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -0
  79. package/dist/cjs/gen/parser/IfcExpressionVisitor.js +15 -0
  80. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
  81. package/dist/cjs/package.json +1 -0
  82. package/dist/cjs/value/BooleanValue.js +14 -0
  83. package/dist/cjs/value/BooleanValue.js.map +1 -0
  84. package/dist/cjs/value/LiteralValue.js +3 -0
  85. package/dist/cjs/value/LiteralValue.js.map +1 -0
  86. package/dist/cjs/value/LiteralValueAnyArity.js +3 -0
  87. package/dist/cjs/value/LiteralValueAnyArity.js.map +1 -0
  88. package/dist/cjs/value/LogicalValue.js +14 -0
  89. package/dist/cjs/value/LogicalValue.js.map +1 -0
  90. package/dist/cjs/value/NumericValue.js +18 -0
  91. package/dist/cjs/value/NumericValue.js.map +1 -0
  92. package/dist/cjs/value/PrimitiveValueType.js +3 -0
  93. package/dist/cjs/value/PrimitiveValueType.js.map +1 -0
  94. package/dist/cjs/value/ReferenceValue.js +14 -0
  95. package/dist/cjs/value/ReferenceValue.js.map +1 -0
  96. package/dist/cjs/value/StringValue.js +14 -0
  97. package/dist/cjs/value/StringValue.js.map +1 -0
  98. package/dist/cjs/value/Value.js +13 -0
  99. package/dist/cjs/value/Value.js.map +1 -0
  100. package/dist/context/IfcElementAccessor.d.ts +18 -0
  101. package/dist/context/IfcExpressionContext.d.ts +6 -0
  102. package/dist/context/IfcPropertyAccessor.d.ts +12 -0
  103. package/dist/context/IfcPropertySetAccessor.d.ts +11 -0
  104. package/dist/context/IfcRootObjectAccessor.d.ts +7 -0
  105. package/dist/context/IfcTypeObjectAccessor.d.ts +13 -0
  106. package/dist/context/NamedObjectAccessor.d.ts +10 -0
  107. package/dist/context/ObjectAccessor.d.ts +16 -0
  108. package/dist/expression/ArrayExpr.d.ts +3 -0
  109. package/dist/expression/Expr.d.ts +4 -0
  110. package/dist/expression/Expr0.d.ts +6 -0
  111. package/dist/expression/Expr1.d.ts +7 -0
  112. package/dist/expression/Expr2.d.ts +8 -0
  113. package/dist/expression/IfcExpressionEvaluationException.d.ts +3 -0
  114. package/dist/expression/numeric/DivideExpr.d.ts +8 -0
  115. package/dist/expression/numeric/MinusExpr.d.ts +8 -0
  116. package/dist/expression/numeric/MultiplyByExpr.d.ts +8 -0
  117. package/dist/expression/numeric/MultiplyExpr.d.ts +8 -0
  118. package/dist/expression/numeric/NumParenthesisExpr.d.ts +8 -0
  119. package/dist/expression/numeric/NumericLiteralExpr.d.ts +7 -0
  120. package/dist/expression/numeric/PlusExpr.d.ts +8 -0
  121. package/dist/expression/reference/AttributeReferenceExpr.d.ts +9 -0
  122. package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +8 -0
  123. package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +8 -0
  124. package/dist/expression/reference/NestedObjectChainExpr.d.ts +9 -0
  125. package/dist/expression/reference/ObjectReferenceExpr.d.ts +4 -0
  126. package/dist/expression/reference/PropObjectReferenceExpr.d.ts +8 -0
  127. package/dist/expression/string/StringConcatExpr.d.ts +8 -0
  128. package/dist/expression/string/StringLiteralExpr.d.ts +7 -0
  129. package/dist/gen/parser/IfcExpressionLexer.d.ts +43 -0
  130. package/dist/gen/parser/IfcExpressionListener.d.ts +262 -0
  131. package/dist/gen/parser/IfcExpressionParser.d.ts +265 -0
  132. package/dist/gen/parser/IfcExpressionVisitor.d.ts +169 -0
  133. package/dist/mjs/ExprVisitor.js +119 -0
  134. package/dist/mjs/ExprVisitor.js.map +1 -0
  135. package/dist/mjs/IfcExpression.js +48 -0
  136. package/dist/mjs/IfcExpression.js.map +1 -0
  137. package/dist/mjs/IfcExpressionErrorListener.js +19 -0
  138. package/dist/mjs/IfcExpressionErrorListener.js.map +1 -0
  139. package/dist/mjs/IfcExpressionUtils.js +7 -0
  140. package/dist/mjs/IfcExpressionUtils.js.map +1 -0
  141. package/dist/mjs/SyntaxErrorException.js +20 -0
  142. package/dist/mjs/SyntaxErrorException.js.map +1 -0
  143. package/dist/mjs/context/IfcElementAccessor.js +30 -0
  144. package/dist/mjs/context/IfcElementAccessor.js.map +1 -0
  145. package/dist/mjs/context/IfcExpressionContext.js +2 -0
  146. package/dist/mjs/context/IfcExpressionContext.js.map +1 -0
  147. package/dist/mjs/context/IfcPropertyAccessor.js +24 -0
  148. package/dist/mjs/context/IfcPropertyAccessor.js.map +1 -0
  149. package/dist/mjs/context/IfcPropertySetAccessor.js +13 -0
  150. package/dist/mjs/context/IfcPropertySetAccessor.js.map +1 -0
  151. package/dist/mjs/context/IfcRootObjectAccessor.js +15 -0
  152. package/dist/mjs/context/IfcRootObjectAccessor.js.map +1 -0
  153. package/dist/mjs/context/IfcTypeObjectAccessor.js +18 -0
  154. package/dist/mjs/context/IfcTypeObjectAccessor.js.map +1 -0
  155. package/dist/mjs/context/NamedObjectAccessor.js +22 -0
  156. package/dist/mjs/context/NamedObjectAccessor.js.map +1 -0
  157. package/dist/mjs/context/ObjectAccessor.js +2 -0
  158. package/dist/mjs/context/ObjectAccessor.js.map +1 -0
  159. package/dist/mjs/expression/ArrayExpr.js +2 -0
  160. package/dist/mjs/expression/ArrayExpr.js.map +1 -0
  161. package/dist/mjs/expression/Expr.js +2 -0
  162. package/dist/mjs/expression/Expr.js.map +1 -0
  163. package/dist/mjs/expression/Expr0.js +4 -0
  164. package/dist/mjs/expression/Expr0.js.map +1 -0
  165. package/dist/mjs/expression/Expr1.js +6 -0
  166. package/dist/mjs/expression/Expr1.js.map +1 -0
  167. package/dist/mjs/expression/Expr2.js +7 -0
  168. package/dist/mjs/expression/Expr2.js.map +1 -0
  169. package/dist/mjs/expression/IfcExpressionEvaluationException.js +6 -0
  170. package/dist/mjs/expression/IfcExpressionEvaluationException.js.map +1 -0
  171. package/dist/mjs/expression/numeric/DivideExpr.js +14 -0
  172. package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -0
  173. package/dist/mjs/expression/numeric/MinusExpr.js +14 -0
  174. package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -0
  175. package/dist/mjs/expression/numeric/MultiplyByExpr.js +14 -0
  176. package/dist/mjs/expression/numeric/MultiplyByExpr.js.map +1 -0
  177. package/dist/mjs/expression/numeric/MultiplyExpr.js +14 -0
  178. package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -0
  179. package/dist/mjs/expression/numeric/NumParenthesisExpr.js +10 -0
  180. package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -0
  181. package/dist/mjs/expression/numeric/NumericLiteralExpr.js +10 -0
  182. package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -0
  183. package/dist/mjs/expression/numeric/PlusExpr.js +14 -0
  184. package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -0
  185. package/dist/mjs/expression/reference/AttributeReferenceExpr.js +12 -0
  186. package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -0
  187. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +10 -0
  188. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -0
  189. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +10 -0
  190. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -0
  191. package/dist/mjs/expression/reference/NestedObjectChainExpr.js +11 -0
  192. package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -0
  193. package/dist/mjs/expression/reference/ObjectReferenceExpr.js +2 -0
  194. package/dist/mjs/expression/reference/ObjectReferenceExpr.js.map +1 -0
  195. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +10 -0
  196. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -0
  197. package/dist/mjs/expression/string/StringConcatExpr.js +11 -0
  198. package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -0
  199. package/dist/mjs/expression/string/StringLiteralExpr.js +10 -0
  200. package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -0
  201. package/dist/mjs/gen/parser/IfcExpressionLexer.js +138 -0
  202. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -0
  203. package/dist/mjs/gen/parser/IfcExpressionListener.js +9 -0
  204. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -0
  205. package/dist/mjs/gen/parser/IfcExpressionParser.js +1487 -0
  206. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -0
  207. package/dist/mjs/gen/parser/IfcExpressionVisitor.js +12 -0
  208. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
  209. package/dist/mjs/package.json +1 -0
  210. package/dist/mjs/value/BooleanValue.js +10 -0
  211. package/dist/mjs/value/BooleanValue.js.map +1 -0
  212. package/dist/mjs/value/LiteralValue.js +2 -0
  213. package/dist/mjs/value/LiteralValue.js.map +1 -0
  214. package/dist/mjs/value/LiteralValueAnyArity.js +2 -0
  215. package/dist/mjs/value/LiteralValueAnyArity.js.map +1 -0
  216. package/dist/mjs/value/LogicalValue.js +10 -0
  217. package/dist/mjs/value/LogicalValue.js.map +1 -0
  218. package/dist/mjs/value/NumericValue.js +11 -0
  219. package/dist/mjs/value/NumericValue.js.map +1 -0
  220. package/dist/mjs/value/PrimitiveValueType.js +2 -0
  221. package/dist/mjs/value/PrimitiveValueType.js.map +1 -0
  222. package/dist/mjs/value/ReferenceValue.js +10 -0
  223. package/dist/mjs/value/ReferenceValue.js.map +1 -0
  224. package/dist/mjs/value/StringValue.js +10 -0
  225. package/dist/mjs/value/StringValue.js.map +1 -0
  226. package/dist/mjs/value/Value.js +9 -0
  227. package/dist/mjs/value/Value.js.map +1 -0
  228. package/dist/value/BooleanValue.d.ts +5 -0
  229. package/dist/value/LiteralValue.d.ts +6 -0
  230. package/dist/value/LiteralValueAnyArity.d.ts +2 -0
  231. package/dist/value/LogicalValue.d.ts +5 -0
  232. package/dist/value/NumericValue.d.ts +6 -0
  233. package/dist/value/PrimitiveValueType.d.ts +2 -0
  234. package/dist/value/ReferenceValue.d.ts +5 -0
  235. package/dist/value/StringValue.d.ts +5 -0
  236. package/dist/value/Value.d.ts +6 -0
  237. package/package.json +3 -2
  238. 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":"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","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"]}