@rsconcept/domain 1.0.0 → 1.1.0

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 (183) hide show
  1. package/README.md +3 -3
  2. package/dist/analyzer-DlSq3Y3r.d.ts +39 -0
  3. package/dist/arguments-extractor-1acwjQNc.d.ts +38 -0
  4. package/dist/ast-C8sIpKdL.d.ts +51 -0
  5. package/dist/ast-annotations-BiMjkKvz.d.ts +16 -0
  6. package/dist/branded-ZlzIcxzu.d.ts +9 -0
  7. package/dist/calculator-C9W2jkSx.d.ts +39 -0
  8. package/dist/cctext/index.d.ts +2 -1
  9. package/dist/cctext/index.js +2 -42
  10. package/dist/cctext/language-api.d.ts +10 -12
  11. package/dist/cctext/language-api.js +157 -227
  12. package/dist/cctext/language-api.js.map +1 -1
  13. package/dist/cctext/language.d.ts +24 -22
  14. package/dist/cctext/language.js +43 -39
  15. package/dist/cctext/language.js.map +1 -1
  16. package/dist/error-E1LVq_3w.d.ts +87 -0
  17. package/dist/graph/graph.d.ts +2 -62
  18. package/dist/graph/graph.js +339 -382
  19. package/dist/graph/graph.js.map +1 -1
  20. package/dist/graph/index.d.ts +2 -1
  21. package/dist/graph/index.js +2 -384
  22. package/dist/graph-DR8rL2o3.d.ts +64 -0
  23. package/dist/hash-Y8I4c6Al.d.ts +8 -0
  24. package/dist/index-BKZ67WMa.d.ts +1 -0
  25. package/dist/index-BVVgDSdq.d.ts +1 -0
  26. package/dist/index-DmtQKWjk.d.ts +1 -0
  27. package/dist/index-_6s0AX1B.d.ts +1 -0
  28. package/dist/index.d.ts +27 -28
  29. package/dist/index.js +23 -5851
  30. package/dist/lezer-tree-iS7LpLBJ.d.ts +14 -0
  31. package/dist/library/folder-tree.d.ts +22 -20
  32. package/dist/library/folder-tree.js +108 -130
  33. package/dist/library/folder-tree.js.map +1 -1
  34. package/dist/library/index.d.ts +8 -17
  35. package/dist/library/index.js +7 -2800
  36. package/dist/library/library-api.d.ts +3 -1
  37. package/dist/library/library-api.js +9 -8
  38. package/dist/library/library-api.js.map +1 -1
  39. package/dist/library/library.d.ts +2 -56
  40. package/dist/library/library.js +23 -19
  41. package/dist/library/library.js.map +1 -1
  42. package/dist/library/oss-api.d.ts +26 -37
  43. package/dist/library/oss-api.js +257 -1096
  44. package/dist/library/oss-api.js.map +1 -1
  45. package/dist/library/oss-layout-api.d.ts +28 -28
  46. package/dist/library/oss-layout-api.js +239 -316
  47. package/dist/library/oss-layout-api.js.map +1 -1
  48. package/dist/library/oss-layout.d.ts +2 -25
  49. package/dist/library/oss-layout.js +1 -1
  50. package/dist/library/oss.d.ts +87 -89
  51. package/dist/library/oss.js +27 -26
  52. package/dist/library/oss.js.map +1 -1
  53. package/dist/library/rsengine.d.ts +100 -106
  54. package/dist/library/rsengine.js +439 -2599
  55. package/dist/library/rsengine.js.map +1 -1
  56. package/dist/library/rsform-api.d.ts +11 -16
  57. package/dist/library/rsform-api.js +313 -825
  58. package/dist/library/rsform-api.js.map +1 -1
  59. package/dist/library/rsform.d.ts +159 -167
  60. package/dist/library/rsform.js +29 -28
  61. package/dist/library/rsform.js.map +1 -1
  62. package/dist/library/rsmodel-api.d.ts +8 -15
  63. package/dist/library/rsmodel-api.js +172 -813
  64. package/dist/library/rsmodel-api.js.map +1 -1
  65. package/dist/library/rsmodel.d.ts +27 -33
  66. package/dist/library/rsmodel.js +16 -23
  67. package/dist/library/rsmodel.js.map +1 -1
  68. package/dist/library/structure-planner.d.ts +20 -26
  69. package/dist/library/structure-planner.js +106 -474
  70. package/dist/library/structure-planner.js.map +1 -1
  71. package/dist/library-CYun28Xz.d.ts +58 -0
  72. package/dist/oss-layout-3glgAqfn.d.ts +27 -0
  73. package/dist/parser-Bwd8LxJ1.d.ts +7 -0
  74. package/dist/parsing/ast.d.ts +2 -49
  75. package/dist/parsing/ast.js +68 -76
  76. package/dist/parsing/ast.js.map +1 -1
  77. package/dist/parsing/index.d.ts +3 -3
  78. package/dist/parsing/index.js +3 -141
  79. package/dist/parsing/lezer-tree.d.ts +2 -13
  80. package/dist/parsing/lezer-tree.js +50 -43
  81. package/dist/parsing/lezer-tree.js.map +1 -1
  82. package/dist/rslang/api.d.ts +9 -14
  83. package/dist/rslang/api.js +114 -827
  84. package/dist/rslang/api.js.map +1 -1
  85. package/dist/rslang/ast-annotations.d.ts +2 -18
  86. package/dist/rslang/ast-annotations.js +34 -45
  87. package/dist/rslang/ast-annotations.js.map +1 -1
  88. package/dist/rslang/error.d.ts +2 -85
  89. package/dist/rslang/error.js +88 -150
  90. package/dist/rslang/error.js.map +1 -1
  91. package/dist/rslang/eval/calculator.d.ts +2 -43
  92. package/dist/rslang/eval/calculator.js +81 -1636
  93. package/dist/rslang/eval/calculator.js.map +1 -1
  94. package/dist/rslang/eval/evaluation-cache.d.ts +22 -26
  95. package/dist/rslang/eval/evaluation-cache.js +168 -287
  96. package/dist/rslang/eval/evaluation-cache.js.map +1 -1
  97. package/dist/rslang/eval/evaluator.d.ts +59 -63
  98. package/dist/rslang/eval/evaluator.js +602 -1509
  99. package/dist/rslang/eval/evaluator.js.map +1 -1
  100. package/dist/rslang/eval/value-api.d.ts +2 -48
  101. package/dist/rslang/eval/value-api.js +2 -490
  102. package/dist/rslang/eval/value.d.ts +2 -36
  103. package/dist/rslang/eval/value.js +2 -118
  104. package/dist/rslang/index.d.ts +14 -17
  105. package/dist/rslang/index.js +12 -4314
  106. package/dist/rslang/labels.d.ts +6 -6
  107. package/dist/rslang/labels.js +139 -305
  108. package/dist/rslang/labels.js.map +1 -1
  109. package/dist/rslang/parser/expression-generator.d.ts +5 -5
  110. package/dist/rslang/parser/expression-generator.js +248 -446
  111. package/dist/rslang/parser/expression-generator.js.map +1 -1
  112. package/dist/rslang/parser/normalize.d.ts +4 -8
  113. package/dist/rslang/parser/normalize.js +286 -481
  114. package/dist/rslang/parser/normalize.js.map +1 -1
  115. package/dist/rslang/parser/parser.d.ts +2 -5
  116. package/dist/rslang/parser/parser.js +30 -21
  117. package/dist/rslang/parser/parser.js.map +1 -1
  118. package/dist/rslang/parser/parser.terms.d.ts +43 -41
  119. package/dist/rslang/parser/parser.terms.js +44 -83
  120. package/dist/rslang/parser/parser.terms.js.map +1 -1
  121. package/dist/rslang/parser/syntax-errors.d.ts +5 -8
  122. package/dist/rslang/parser/syntax-errors.js +113 -382
  123. package/dist/rslang/parser/syntax-errors.js.map +1 -1
  124. package/dist/rslang/parser/token.d.ts +2 -79
  125. package/dist/rslang/parser/token.js +81 -93
  126. package/dist/rslang/parser/token.js.map +1 -1
  127. package/dist/rslang/semantic/analyzer.d.ts +2 -39
  128. package/dist/rslang/semantic/analyzer.js +186 -2600
  129. package/dist/rslang/semantic/analyzer.js.map +1 -1
  130. package/dist/rslang/semantic/arguments-extractor.d.ts +2 -42
  131. package/dist/rslang/semantic/arguments-extractor.js +202 -361
  132. package/dist/rslang/semantic/arguments-extractor.js.map +1 -1
  133. package/dist/rslang/semantic/type-auditor.d.ts +64 -68
  134. package/dist/rslang/semantic/type-auditor.js +594 -1564
  135. package/dist/rslang/semantic/type-auditor.js.map +1 -1
  136. package/dist/rslang/semantic/typification-api.d.ts +4 -7
  137. package/dist/rslang/semantic/typification-api.js +162 -303
  138. package/dist/rslang/semantic/typification-api.js.map +1 -1
  139. package/dist/rslang/semantic/typification-parser.d.ts +2 -12
  140. package/dist/rslang/semantic/typification-parser.js +165 -219
  141. package/dist/rslang/semantic/typification-parser.js.map +1 -1
  142. package/dist/rslang/semantic/typification.d.ts +2 -119
  143. package/dist/rslang/semantic/typification.js +66 -52
  144. package/dist/rslang/semantic/typification.js.map +1 -1
  145. package/dist/rslang/semantic/value-auditor.d.ts +32 -38
  146. package/dist/rslang/semantic/value-auditor.js +206 -518
  147. package/dist/rslang/semantic/value-auditor.js.map +1 -1
  148. package/dist/rslang/semantic/value-class.d.ts +2 -10
  149. package/dist/rslang/semantic/value-class.js +8 -7
  150. package/dist/rslang/semantic/value-class.js.map +1 -1
  151. package/dist/rslang/typification-graph.d.ts +2 -33
  152. package/dist/rslang/typification-graph.js +94 -306
  153. package/dist/rslang/typification-graph.js.map +1 -1
  154. package/dist/shared/branded.d.ts +2 -7
  155. package/dist/shared/branded.js +1 -1
  156. package/dist/shared/hash.d.ts +2 -6
  157. package/dist/shared/hash.js +13 -13
  158. package/dist/shared/hash.js.map +1 -1
  159. package/dist/shared/index.d.ts +3 -2
  160. package/dist/shared/index.js +2 -18
  161. package/dist/token-DeXAmzwr.d.ts +81 -0
  162. package/dist/typification-Dk-fisgO.d.ts +120 -0
  163. package/dist/typification-graph-6HcZ-rKH.d.ts +30 -0
  164. package/dist/typification-parser-BBVx1RxP.d.ts +13 -0
  165. package/dist/value-B8UtCqaK.js +366 -0
  166. package/dist/value-B8UtCqaK.js.map +1 -0
  167. package/dist/value-CTjX6825.d.ts +33 -0
  168. package/dist/value-api-Bw-SgaYY.d.ts +49 -0
  169. package/dist/value-class-CNI-lqXJ.d.ts +12 -0
  170. package/package.json +8 -8
  171. package/src/library/rsform-api.test.ts +24 -0
  172. package/src/library/rsform-api.ts +12 -4
  173. package/dist/cctext/index.js.map +0 -1
  174. package/dist/graph/index.js.map +0 -1
  175. package/dist/index.js.map +0 -1
  176. package/dist/library/index.js.map +0 -1
  177. package/dist/library/oss-layout.js.map +0 -1
  178. package/dist/parsing/index.js.map +0 -1
  179. package/dist/rslang/eval/value-api.js.map +0 -1
  180. package/dist/rslang/eval/value.js.map +0 -1
  181. package/dist/rslang/index.js.map +0 -1
  182. package/dist/shared/branded.js.map +0 -1
  183. package/dist/shared/index.js.map +0 -1
@@ -1,403 +1,134 @@
1
- // src/parsing/ast.ts
2
- var TOKEN_ERROR = 0;
3
- function visitAstDFS(node, callback) {
4
- for (const child of node.children) {
5
- visitAstDFS(child, callback);
6
- }
7
- callback(node);
8
- }
9
-
10
- // src/rslang/ast-annotations.ts
11
- var AST_ERRORS_KEY = "rsErrors";
12
- function annotateError(node, code, params) {
13
- if (typeof node.annotation === "object" && node.annotation !== null && AST_ERRORS_KEY in node.annotation && isAstNodeErrorRef(node.annotation[AST_ERRORS_KEY])) {
14
- return;
15
- }
16
- const entry = params !== void 0 && params.length > 0 ? { code, params: [...params] } : { code };
17
- node.annotation = {
18
- ...typeof node.annotation === "object" && node.annotation !== null ? node.annotation : {},
19
- [AST_ERRORS_KEY]: entry
20
- };
21
- }
22
- function isAstNodeErrorRef(x) {
23
- if (typeof x !== "object" || x === null || !("code" in x)) {
24
- return false;
25
- }
26
- const code = x.code;
27
- if (typeof code !== "number") {
28
- return false;
29
- }
30
- if (!("params" in x)) {
31
- return true;
32
- }
33
- const p = x.params;
34
- if (p === void 0) {
35
- return true;
36
- }
37
- return Array.isArray(p) && p.every((item) => typeof item === "string");
38
- }
39
-
40
- // src/rslang/error.ts
41
- var RSErrorCode = {
42
- unknownSyntax: 33792,
43
- // 33792
44
- missingParenthesis: 33798,
45
- // 33798
46
- missingCurlyBrace: 33799,
47
- // 33799
48
- missingSquareBracket: 33800,
49
- // 33800
50
- bracketMismatch: 33801,
51
- // 33801
52
- doubleParenthesis: 33802,
53
- // 33802
54
- missingOpenBracket: 33803,
55
- // 33803
56
- expectedLocal: 33813,
57
- // 33813
58
- expectedType: 33814,
59
- // 33814
60
- localDoubleDeclare: 10241,
61
- // 10241
62
- localNotUsed: 10242,
63
- // 10242
64
- localUndeclared: 34817,
65
- // 34817
66
- localShadowing: 34818,
67
- // 34818
68
- typesNotEqual: 34819,
69
- // 34819
70
- globalNotTyped: 34820,
71
- // 34820
72
- invalidDecart: 34821,
73
- // 34821
74
- invalidBoolean: 34822,
75
- // 34822
76
- invalidTypeOperation: 34823,
77
- // 34823
78
- invalidCard: 34824,
79
- // 34824
80
- invalidDebool: 34825,
81
- // 34825
82
- globalFuncWithoutArgs: 34827,
83
- // 34827
84
- invalidReduce: 34832,
85
- // 34832
86
- invalidProjectionTuple: 34833,
87
- // 34833
88
- invalidProjectionSet: 34834,
89
- // 34834
90
- invalidEnumeration: 34835,
91
- // 34835
92
- invalidCortegeDeclare: 34836,
93
- // 34836
94
- localOutOfScope: 34837,
95
- // 34837
96
- invalidElementPredicate: 34838,
97
- // 34838
98
- invalidEmptySetUsage: 34839,
99
- // 34839
100
- invalidArgsArity: 34840,
101
- // 34840
102
- invalidArgumentType: 34841,
103
- // 34841
104
- globalStructure: 34844,
105
- // 34844
106
- radicalUsage: 34849,
107
- // 34849
108
- invalidFilterArgumentType: 34850,
109
- // 34850
110
- invalidFilterArity: 34851,
111
- // 34851
112
- arithmeticNotSupported: 34852,
113
- // 34852
114
- typesNotCompatible: 34853,
115
- // 34853
116
- orderingNotSupported: 34854,
117
- // 34854
118
- expectedLogic: 34855,
119
- // 34855
120
- expectedSetexpr: 34856,
121
- // 34856
122
- invalidArgumentCortegeDeclare: 34857,
123
- // 34857
124
- globalNoValue: 34880,
125
- // 34880
126
- invalidPropertyUsage: 34881,
127
- // 34881
128
- // Value evaluation (runtime)
129
- calcUnknownError: 33024,
130
- // 35328
131
- setOverflow: 33025,
132
- // 35329
133
- booleanBaseLimit: 33026,
134
- // 35330
135
- calcGlobalMissing: 33027,
136
- // 35331
137
- iterationsLimit: 33028,
138
- // 35332
139
- calcInvalidDebool: 33029,
140
- // 35333
141
- iterateInfinity: 33030,
142
- // 35334
143
- calculationNotSupported: 33031,
144
- // 35335
145
- cstEmptyDerived: 34913,
146
- // 34913
147
- definitionNotAllowed: 34914
148
- // 34914
149
- };
150
-
151
- // src/rslang/parser/parser.terms.ts
152
- var Variable = 4;
153
-
154
- // src/rslang/parser/token.ts
155
- var TokenID = {
156
- // Global, local IDs and literals
157
- ERROR: TOKEN_ERROR,
158
- ID_LOCAL: 258,
159
- ID_GLOBAL: 259,
160
- ID_FUNCTION: 260,
161
- ID_PREDICATE: 261,
162
- ID_RADICAL: 262,
163
- LIT_INTEGER: 263,
164
- LIT_WHOLE_NUMBERS: 264,
165
- LIT_EMPTYSET: 265,
166
- // Arithmetic
167
- PLUS: 266,
168
- MINUS: 267,
169
- MULTIPLY: 268,
170
- // Integer predicate symbols
171
- GREATER: 269,
172
- LESSER: 270,
173
- GREATER_OR_EQ: 271,
174
- LESSER_OR_EQ: 272,
175
- // Equality comparison
176
- EQUAL: 273,
177
- NOTEQUAL: 274,
178
- // Logic predicate symbols
179
- QUANTOR_UNIVERSAL: 275,
180
- QUANTOR_EXISTS: 276,
181
- LOGIC_NOT: 277,
182
- LOGIC_EQUIVALENT: 278,
183
- LOGIC_IMPLICATION: 279,
184
- LOGIC_OR: 280,
185
- LOGIC_AND: 281,
186
- // Set theory predicate symbols
187
- SET_IN: 282,
188
- SET_NOT_IN: 283,
189
- SUBSET: 284,
190
- SUBSET_OR_EQ: 285,
191
- NOT_SUBSET: 286,
192
- // Set theory operators
193
- DECART: 287,
194
- SET_UNION: 288,
195
- SET_INTERSECTION: 289,
196
- SET_MINUS: 290,
197
- SET_SYMMETRIC_MINUS: 291,
198
- BOOLEAN: 292,
199
- // Structure operations
200
- BIGPR: 293,
201
- SMALLPR: 294,
202
- FILTER: 295,
203
- CARD: 296,
204
- BOOL: 297,
205
- DEBOOL: 298,
206
- REDUCE: 299,
207
- // Term constructions prefixes
208
- DECLARATIVE: 300,
209
- RECURSIVE: 301,
210
- IMPERATIVE: 302,
211
- ITERATE: 303,
212
- ASSIGN: 304,
213
- // Punctuation
214
- PUNCTUATION_DEFINE: 305,
215
- PUNCTUATION_STRUCT: 306,
216
- PUNCTUATION_PL: 307,
217
- PUNCTUATION_PR: 308,
218
- PUNCTUATION_CL: 309,
219
- PUNCTUATION_CR: 310,
220
- PUNCTUATION_SL: 311,
221
- PUNCTUATION_SR: 312,
222
- PUNCTUATION_BAR: 313,
223
- PUNCTUATION_COMMA: 314,
224
- PUNCTUATION_SEMICOLON: 315,
225
- // ======= Non-terminal tokens =========
226
- NT_ENUM_DECL: 316,
227
- NT_TUPLE: 317,
228
- NT_ENUMERATION: 318,
229
- NT_TUPLE_DECL: 319,
230
- NT_ARG_DECL: 320,
231
- NT_FUNC_DEFINITION: 321,
232
- NT_ARGUMENTS: 322,
233
- NT_FUNC_CALL: 323,
234
- NT_DECLARATIVE_EXPR: 324,
235
- NT_IMPERATIVE_EXPR: 325,
236
- NT_RECURSIVE_FULL: 326,
237
- NT_RECURSIVE_SHORT: 327,
238
- // ======= Helper tokens ========
239
- INTERRUPT: 328,
240
- END: 329
241
- };
242
-
243
- // src/rslang/parser/syntax-errors.ts
1
+ import { annotateError } from "../ast-annotations.js";
2
+ import { RSErrorCode } from "../error.js";
3
+ import { visitAstDFS } from "../../parsing/ast.js";
4
+ import "../../parsing/index.js";
5
+ import { TokenID } from "./token.js";
6
+ import "./parser.terms.js";
7
+ //#region src/rslang/parser/syntax-errors.ts
8
+ /**
9
+ * Module: Syntactic errors reporting.
10
+ */
244
11
  function extractSyntaxErrors(ast, expression, reporter, annotateErrors = false) {
245
- const bracketError = extractBracketErrors(expression);
246
- if (bracketError !== null) {
247
- reporter(bracketError);
248
- if (annotateErrors) {
249
- annotateError(ast, bracketError.code, bracketError.params);
250
- }
251
- }
252
- const hasBracketErrors = bracketError !== null;
253
- visitAstDFS(ast, (node) => extractInternal(node, reporter, annotateErrors, hasBracketErrors));
12
+ const bracketError = extractBracketErrors(expression);
13
+ if (bracketError !== null) {
14
+ reporter(bracketError);
15
+ if (annotateErrors) annotateError(ast, bracketError.code, bracketError.params);
16
+ }
17
+ const hasBracketErrors = bracketError !== null;
18
+ visitAstDFS(ast, (node) => extractInternal(node, reporter, annotateErrors, hasBracketErrors));
254
19
  }
255
20
  function extractInternal(node, reporter, annotateErrors, ignoreUnknownErrors) {
256
- if (node.typeID !== TokenID.ERROR) {
257
- return;
258
- }
259
- function emit(target, code) {
260
- reporter({ code, from: target.from, to: target.to });
261
- if (annotateErrors) {
262
- annotateError(target, code);
263
- }
264
- }
265
- const parent = node.parent;
266
- if (parent === null) {
267
- if (!ignoreUnknownErrors) {
268
- return emit(node, RSErrorCode.unknownSyntax);
269
- }
270
- return;
271
- }
272
- if (parent.typeID === Variable) {
273
- return emit(parent, RSErrorCode.expectedLocal);
274
- }
275
- if (!ignoreUnknownErrors) {
276
- emit(node.from === node.to ? parent : node, RSErrorCode.unknownSyntax);
277
- }
21
+ if (node.typeID !== TokenID.ERROR) return;
22
+ function emit(target, code) {
23
+ reporter({
24
+ code,
25
+ from: target.from,
26
+ to: target.to
27
+ });
28
+ if (annotateErrors) annotateError(target, code);
29
+ }
30
+ const parent = node.parent;
31
+ if (parent === null) {
32
+ if (!ignoreUnknownErrors) return emit(node, RSErrorCode.unknownSyntax);
33
+ return;
34
+ }
35
+ if (parent.typeID === 4) return emit(parent, RSErrorCode.expectedLocal);
36
+ if (!ignoreUnknownErrors) emit(node.from === node.to ? parent : node, RSErrorCode.unknownSyntax);
278
37
  }
279
38
  function extractBracketErrors(expression) {
280
- const stack = [];
281
- for (let pos = 0; pos < expression.length; pos++) {
282
- const symbol = expression[pos];
283
- if (isOpenBracket(symbol)) {
284
- if (isDoubleParenthesis(expression, pos)) {
285
- return {
286
- code: RSErrorCode.doubleParenthesis,
287
- from: pos,
288
- to: pos + 2
289
- };
290
- }
291
- stack.push({ bracket: symbol, index: pos });
292
- continue;
293
- }
294
- if (!isCloseBracket(symbol)) {
295
- continue;
296
- }
297
- const expectedOpen = closeToOpen(symbol);
298
- const top = stack[stack.length - 1];
299
- if (top === void 0) {
300
- return {
301
- code: RSErrorCode.missingOpenBracket,
302
- from: pos,
303
- to: pos + 1,
304
- params: [expectedOpen]
305
- };
306
- }
307
- if (top.bracket !== expectedOpen) {
308
- return {
309
- code: RSErrorCode.bracketMismatch,
310
- from: pos,
311
- to: pos + 1,
312
- params: [openToClose(top.bracket), symbol]
313
- };
314
- }
315
- stack.pop();
316
- }
317
- if (stack.length > 0) {
318
- const unclosed = stack[0];
319
- const code = missingBracketCode(unclosed.bracket);
320
- return {
321
- code,
322
- from: expression.length,
323
- to: expression.length
324
- };
325
- }
326
- return null;
39
+ const stack = [];
40
+ for (let pos = 0; pos < expression.length; pos++) {
41
+ const symbol = expression[pos];
42
+ if (isOpenBracket(symbol)) {
43
+ if (isDoubleParenthesis(expression, pos)) return {
44
+ code: RSErrorCode.doubleParenthesis,
45
+ from: pos,
46
+ to: pos + 2
47
+ };
48
+ stack.push({
49
+ bracket: symbol,
50
+ index: pos
51
+ });
52
+ continue;
53
+ }
54
+ if (!isCloseBracket(symbol)) continue;
55
+ const expectedOpen = closeToOpen(symbol);
56
+ const top = stack[stack.length - 1];
57
+ if (top === void 0) return {
58
+ code: RSErrorCode.missingOpenBracket,
59
+ from: pos,
60
+ to: pos + 1,
61
+ params: [expectedOpen]
62
+ };
63
+ if (top.bracket !== expectedOpen) return {
64
+ code: RSErrorCode.bracketMismatch,
65
+ from: pos,
66
+ to: pos + 1,
67
+ params: [openToClose(top.bracket), symbol]
68
+ };
69
+ stack.pop();
70
+ }
71
+ if (stack.length > 0) {
72
+ const unclosed = stack[0];
73
+ return {
74
+ code: missingBracketCode(unclosed.bracket),
75
+ from: expression.length,
76
+ to: expression.length
77
+ };
78
+ }
79
+ return null;
327
80
  }
328
81
  function missingBracketCode(bracket) {
329
- switch (bracket) {
330
- case "(":
331
- return RSErrorCode.missingParenthesis;
332
- case "[":
333
- return RSErrorCode.missingSquareBracket;
334
- case "{":
335
- return RSErrorCode.missingCurlyBrace;
336
- }
82
+ switch (bracket) {
83
+ case "(": return RSErrorCode.missingParenthesis;
84
+ case "[": return RSErrorCode.missingSquareBracket;
85
+ case "{": return RSErrorCode.missingCurlyBrace;
86
+ }
337
87
  }
338
88
  function isOpenBracket(symbol) {
339
- return symbol === "(" || symbol === "[" || symbol === "{";
89
+ return symbol === "(" || symbol === "[" || symbol === "{";
340
90
  }
341
91
  function isCloseBracket(symbol) {
342
- return symbol === ")" || symbol === "]" || symbol === "}";
92
+ return symbol === ")" || symbol === "]" || symbol === "}";
343
93
  }
344
94
  function openToClose(symbol) {
345
- switch (symbol) {
346
- case "(":
347
- return ")";
348
- case "[":
349
- return "]";
350
- case "{":
351
- return "}";
352
- }
95
+ switch (symbol) {
96
+ case "(": return ")";
97
+ case "[": return "]";
98
+ case "{": return "}";
99
+ }
353
100
  }
354
101
  function closeToOpen(symbol) {
355
- switch (symbol) {
356
- case ")":
357
- return "(";
358
- case "]":
359
- return "[";
360
- case "}":
361
- return "{";
362
- }
102
+ switch (symbol) {
103
+ case ")": return "(";
104
+ case "]": return "[";
105
+ case "}": return "{";
106
+ }
363
107
  }
364
108
  function isDoubleParenthesis(expression, pos) {
365
- const isOpenDoubleParenthesis = expression[pos] === "(" && expression[pos + 1] === "(";
366
- if (!isOpenDoubleParenthesis) {
367
- return false;
368
- }
369
- const outerClose = findMatchingCloseBracket(expression, pos);
370
- const innerClose = findMatchingCloseBracket(expression, pos + 1);
371
- if (outerClose < 0 || innerClose < 0) {
372
- return false;
373
- }
374
- return outerClose === innerClose + 1;
109
+ if (!(expression[pos] === "(" && expression[pos + 1] === "(")) return false;
110
+ const outerClose = findMatchingCloseBracket(expression, pos);
111
+ const innerClose = findMatchingCloseBracket(expression, pos + 1);
112
+ if (outerClose < 0 || innerClose < 0) return false;
113
+ return outerClose === innerClose + 1;
375
114
  }
376
115
  function findMatchingCloseBracket(expression, openPos) {
377
- if (expression[openPos] !== "(") {
378
- return -1;
379
- }
380
- const stack = [];
381
- for (let index = openPos; index < expression.length; index++) {
382
- const symbol = expression[index];
383
- if (isOpenBracket(symbol)) {
384
- stack.push(symbol);
385
- continue;
386
- }
387
- if (!isCloseBracket(symbol)) {
388
- continue;
389
- }
390
- const top = stack.pop();
391
- if (top === void 0 || top !== closeToOpen(symbol)) {
392
- return -1;
393
- }
394
- if (stack.length === 0) {
395
- return index;
396
- }
397
- }
398
- return -1;
116
+ if (expression[openPos] !== "(") return -1;
117
+ const stack = [];
118
+ for (let index = openPos; index < expression.length; index++) {
119
+ const symbol = expression[index];
120
+ if (isOpenBracket(symbol)) {
121
+ stack.push(symbol);
122
+ continue;
123
+ }
124
+ if (!isCloseBracket(symbol)) continue;
125
+ const top = stack.pop();
126
+ if (top === void 0 || top !== closeToOpen(symbol)) return -1;
127
+ if (stack.length === 0) return index;
128
+ }
129
+ return -1;
399
130
  }
400
- export {
401
- extractSyntaxErrors
402
- };
131
+ //#endregion
132
+ export { extractSyntaxErrors };
133
+
403
134
  //# sourceMappingURL=syntax-errors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/parsing/ast.ts","../../../src/rslang/ast-annotations.ts","../../../src/rslang/error.ts","../../../src/rslang/parser/parser.terms.ts","../../../src/rslang/parser/token.ts","../../../src/rslang/parser/syntax-errors.ts"],"sourcesContent":["import { type TreeCursor } from './lezer-tree';\n\nexport const TOKEN_ERROR = 0;\n\n/** Represents AST node data. */\ninterface AstNodeData extends Record<string, unknown> {\n dataType: string;\n value: unknown;\n}\n\n/** Represents AST structured node base. */\nexport interface AstNodeBase {\n typeID: number;\n data: AstNodeData;\n annotation?: Record<string, unknown>;\n}\n\n/** Represents AST structured node. */\nexport interface AstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n from: number;\n to: number;\n hasError: boolean;\n parenthesis?: boolean;\n parent: AstNode | null;\n children: AstNode[];\n}\n\n/** Represents AST node. */\nexport interface FlatAstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n parent: number | null;\n from: number;\n to: number;\n}\n\n/** Represents Syntax tree flat representation. */\nexport type FlatAST = FlatAstNode[];\n\n/** Builds AST tree from a given tree cursor, generating unique uids for each node. */\nexport function buildTree(cursor: TreeCursor): AstNode {\n let nextUid = 1;\n function genUid() {\n return nextUid++;\n }\n return buildTreeInternal(cursor, null, genUid);\n}\n\n/** Flattens AST tree to a array form. */\nexport function flattenAst(node: AstNode, parent: number | null = null, out: FlatAST = []): FlatAST {\n out.push({\n uid: node.uid,\n parent: parent,\n typeID: node.typeID,\n from: node.from,\n to: node.to,\n data: node.data,\n annotation: node.annotation\n });\n for (const child of node.children) {\n flattenAst(child, node.uid, out);\n }\n return out;\n}\n\n/** Visits AST tree in depth-first order. */\nexport function visitAstDFS(node: AstNode, callback: (node: AstNode) => void) {\n for (const child of node.children) {\n visitAstDFS(child, callback);\n }\n callback(node);\n}\n\n/** Finds and returns the AstNode with the given ui. */\nexport function findByUid(root: AstNode, uid: number): AstNode | null {\n let found: AstNode | null = null;\n visitAstDFS(root, node => {\n if (node.uid === uid && !found) {\n found = node;\n }\n });\n return found;\n}\n\n/** Prints AST tree. */\nexport function printAst(node: AstNode, printNode: (node: AstNode) => string): string {\n let children: string = '';\n for (const child of node.children) {\n children += `${printAst(child, printNode)}`;\n }\n return `[${printNode(node)}${children}]`;\n}\n\n/** Extracts node text. */\nexport function getNodeText(node: AstNode): string {\n if (node.data.dataType === 'string' && typeof node.data.value === 'string') {\n return node.data.value;\n }\n return `NO DATA NODE: ${node.typeID}`;\n}\n\n/** Extracts node indices. */\nexport function getNodeIndices(node: AstNode): number[] {\n if (node.data.dataType === 'string[]' && Array.isArray(node.data.value)) {\n return (node.data.value as string[]).map(s => parseInt(s, 10)).filter(n => !isNaN(n));\n }\n return [];\n}\n\n// ======== Internals ========\nfunction buildTreeInternal(cursor: TreeCursor, parent: AstNode | null = null, genUid: () => number): AstNode {\n const node = cursor.node;\n\n const result: AstNode = {\n uid: genUid(),\n typeID: node.type.isError ? 0 : node.type.id,\n from: node.from,\n to: node.to,\n hasError: node.type.isError,\n data: node.type.isError ? { dataType: 'null', value: null } : { dataType: 'string', value: node.type.name },\n parent,\n children: []\n };\n\n if (cursor.firstChild()) {\n do {\n const child = buildTreeInternal(cursor, result, genUid);\n if (child.hasError) {\n result.hasError = true;\n }\n result.children.push(child);\n } while (cursor.nextSibling());\n cursor.parent();\n }\n return result;\n}\n","/** Module: AST annotations. */\n\nimport { type AstNode } from '../parsing';\n\nimport { type ExpressionType } from './semantic/typification';\nimport { type RSErrorCode, type RSErrorInfo } from './error';\n\nconst AST_ERRORS_KEY = 'rsErrors' as const;\nconst AST_TYPE_KEY = 'rsType' as const;\n\n/** Appends {@link ExpressionType} onto the node's `annotation.rsType`. */\nexport function annotateType(node: AstNode, type: ExpressionType): void {\n node.annotation = {\n ...(typeof node.annotation === 'object' && node.annotation !== null ? node.annotation : {}),\n [AST_TYPE_KEY]: type\n };\n}\n\n/** Reads {@link ExpressionType} from node's `annotation`. */\nexport function readTypeAnnotation(node: AstNode): ExpressionType | null {\n if (node.annotation && AST_TYPE_KEY in node.annotation) {\n return node.annotation[AST_TYPE_KEY] as ExpressionType;\n }\n return null;\n}\n\n/** Appends {@link RSErrorInfo} onto the node's `annotation.rsErrors` if not already set. */\nexport function annotateError(node: AstNode, code: RSErrorCode, params?: readonly string[]): void {\n if (\n typeof node.annotation === 'object' &&\n node.annotation !== null &&\n AST_ERRORS_KEY in node.annotation &&\n isAstNodeErrorRef(node.annotation[AST_ERRORS_KEY])\n ) {\n return;\n }\n const entry: RSErrorInfo = params !== undefined && params.length > 0 ? { code, params: [...params] } : { code };\n node.annotation = {\n ...(typeof node.annotation === 'object' && node.annotation !== null ? node.annotation : {}),\n [AST_ERRORS_KEY]: entry\n };\n}\n\n/** Reads validated {@link RSErrorInfo} entry from node's `annotation`. */\nexport function readErrorAnnotation(node: AstNode): RSErrorInfo | null {\n const raw = node.annotation?.[AST_ERRORS_KEY];\n if (isAstNodeErrorRef(raw)) {\n return raw;\n }\n return null;\n}\n\n// ====== Internal ======\nfunction isAstNodeErrorRef(x: unknown): x is RSErrorInfo {\n if (typeof x !== 'object' || x === null || !('code' in x)) {\n return false;\n }\n const code = x.code;\n if (typeof code !== 'number') {\n return false;\n }\n if (!('params' in x)) {\n return true;\n }\n const p = (x as { params: unknown }).params;\n if (p === undefined) {\n return true;\n }\n return Array.isArray(p) && p.every(item => typeof item === 'string');\n}\n","/** Module: Error types and functions. */\n\n/** Represents error class. */\nexport const RSErrorClass = {\n LEXER: 0,\n PARSER: 1,\n SEMANTIC: 2,\n EVALUATION: 3,\n UNKNOWN: 4\n} as const;\nexport type RSErrorClass = (typeof RSErrorClass)[keyof typeof RSErrorClass];\n\n/** Represents RSLang expression error information. */\nexport interface RSErrorInfo {\n code: RSErrorCode;\n params?: readonly string[];\n}\n\n/** Represents RSLang expression error description. */\nexport interface RSErrorDescription extends RSErrorInfo {\n from: number;\n to: number;\n}\n\n/** Error reporter function type. */\nexport type ErrorReporter = (error: RSErrorDescription) => void;\n\n/** Represents RSLang expression error types. */\nexport const RSErrorCode = {\n unknownSyntax: 0x8400, // 33792\n missingParenthesis: 0x8406, // 33798\n missingCurlyBrace: 0x8407, // 33799\n missingSquareBracket: 0x8408, // 33800\n bracketMismatch: 0x8409, // 33801\n doubleParenthesis: 0x840a, // 33802\n missingOpenBracket: 0x840b, // 33803\n expectedLocal: 0x8415, // 33813\n expectedType: 0x8416, // 33814\n\n localDoubleDeclare: 0x2801, // 10241\n localNotUsed: 0x2802, // 10242\n\n localUndeclared: 0x8801, // 34817\n localShadowing: 0x8802, // 34818\n\n typesNotEqual: 0x8803, // 34819\n globalNotTyped: 0x8804, // 34820\n invalidDecart: 0x8805, // 34821\n invalidBoolean: 0x8806, // 34822\n invalidTypeOperation: 0x8807, // 34823\n invalidCard: 0x8808, // 34824\n invalidDebool: 0x8809, // 34825\n globalFuncWithoutArgs: 0x880b, // 34827\n invalidReduce: 0x8810, // 34832\n invalidProjectionTuple: 0x8811, // 34833\n invalidProjectionSet: 0x8812, // 34834\n invalidEnumeration: 0x8813, // 34835\n invalidCortegeDeclare: 0x8814, // 34836\n localOutOfScope: 0x8815, // 34837\n invalidElementPredicate: 0x8816, // 34838\n invalidEmptySetUsage: 0x8817, // 34839\n invalidArgsArity: 0x8818, // 34840\n invalidArgumentType: 0x8819, // 34841\n globalStructure: 0x881c, // 34844\n radicalUsage: 0x8821, // 34849\n invalidFilterArgumentType: 0x8822, // 34850\n invalidFilterArity: 0x8823, // 34851\n arithmeticNotSupported: 0x8824, // 34852\n typesNotCompatible: 0x8825, // 34853\n orderingNotSupported: 0x8826, // 34854\n expectedLogic: 0x8827, // 34855\n expectedSetexpr: 0x8828, // 34856\n invalidArgumentCortegeDeclare: 0x8829, // 34857\n\n globalNoValue: 0x8840, // 34880\n invalidPropertyUsage: 0x8841, // 34881\n\n // Value evaluation (runtime)\n calcUnknownError: 0x8100, // 35328\n setOverflow: 0x8101, // 35329\n booleanBaseLimit: 0x8102, // 35330\n calcGlobalMissing: 0x8103, // 35331\n iterationsLimit: 0x8104, // 35332\n calcInvalidDebool: 0x8105, // 35333\n iterateInfinity: 0x8106, // 35334\n calculationNotSupported: 0x8107, // 35335\n\n cstEmptyDerived: 0x8861, // 34913\n definitionNotAllowed: 0x8862 // 34914\n} as const;\nexport type RSErrorCode = (typeof RSErrorCode)[keyof typeof RSErrorCode];\n\nconst ERROR_EVALUATION_MASK = 0x0100;\nconst ERROR_LEXER_MASK = 0x0200;\nconst ERROR_PARSER_MASK = 0x0400;\nconst ERROR_SEMANTIC_MASK = 0x0800;\n\n/** Infers error class from error type (code). */\nfunction inferErrorClass(error: RSErrorCode): RSErrorClass {\n if ((error & ERROR_EVALUATION_MASK) !== 0) {\n return RSErrorClass.EVALUATION;\n } else if ((error & ERROR_LEXER_MASK) !== 0) {\n return RSErrorClass.LEXER;\n } else if ((error & ERROR_PARSER_MASK) !== 0) {\n return RSErrorClass.PARSER;\n } else if ((error & ERROR_SEMANTIC_MASK) !== 0) {\n return RSErrorClass.SEMANTIC;\n } else {\n return RSErrorClass.UNKNOWN;\n }\n}\n\n/** Generate ErrorID label. */\nexport function getRSErrorPrefix(code: RSErrorCode): string {\n const id = code.toString(16).toUpperCase();\n // prettier-ignore\n switch (inferErrorClass(code)) {\n case RSErrorClass.LEXER: return 'L' + id;\n case RSErrorClass.PARSER: return 'P' + id;\n case RSErrorClass.SEMANTIC: return 'S' + id;\n case RSErrorClass.EVALUATION: return 'E' + id;\n case RSErrorClass.UNKNOWN: return 'U' + id;\n }\n}\n\n/** Checks if error is critical. */\nexport function isCritical(code: RSErrorCode): boolean {\n return code !== RSErrorCode.localDoubleDeclare && code !== RSErrorCode.localNotUsed;\n}\n","// This file was generated by lezer-generator. You probably shouldn't edit it.\nexport const\n Expression = 1,\n Logic = 2,\n Logic_predicates = 3,\n Variable = 4,\n Local = 5,\n Tuple = 8,\n Expr_enum_min2 = 9,\n Logic_unary = 24,\n Predicate = 26,\n Logic_quantor = 29,\n Variable_pack = 31,\n Logic_binary = 33,\n Setexpr = 38,\n Integer = 39,\n EmptySet = 40,\n IntegerSet = 41,\n Global = 42,\n Radical = 43,\n Setexpr_binary = 44,\n Enumeration = 55,\n Boolean = 56,\n Filter_expression = 58,\n Filter = 59,\n Declarative = 60,\n PrefixD = 62,\n PrefixI = 63,\n Imperative = 64,\n Imp_blocks = 65,\n PrefixR = 67,\n Recursion = 68,\n Function = 69,\n BigPr = 70,\n SmallPr = 71,\n Card = 72,\n Bool = 73,\n Debool = 74,\n Red = 75,\n Function_decl = 76,\n Arguments = 77,\n Declaration = 78\n","import { TOKEN_ERROR } from '../../parsing';\n\n/** Represents RSLang token types. */\nexport const TokenID = {\n // Global, local IDs and literals\n ERROR: TOKEN_ERROR,\n\n ID_LOCAL: 258,\n ID_GLOBAL: 259,\n ID_FUNCTION: 260,\n ID_PREDICATE: 261,\n ID_RADICAL: 262,\n LIT_INTEGER: 263,\n LIT_WHOLE_NUMBERS: 264,\n LIT_EMPTYSET: 265,\n\n // Arithmetic\n PLUS: 266,\n MINUS: 267,\n MULTIPLY: 268,\n\n // Integer predicate symbols\n GREATER: 269,\n LESSER: 270,\n GREATER_OR_EQ: 271,\n LESSER_OR_EQ: 272,\n\n // Equality comparison\n EQUAL: 273,\n NOTEQUAL: 274,\n\n // Logic predicate symbols\n QUANTOR_UNIVERSAL: 275,\n QUANTOR_EXISTS: 276,\n LOGIC_NOT: 277,\n LOGIC_EQUIVALENT: 278,\n LOGIC_IMPLICATION: 279,\n LOGIC_OR: 280,\n LOGIC_AND: 281,\n\n // Set theory predicate symbols\n SET_IN: 282,\n SET_NOT_IN: 283,\n SUBSET: 284,\n SUBSET_OR_EQ: 285,\n NOT_SUBSET: 286,\n\n // Set theory operators\n DECART: 287,\n SET_UNION: 288,\n SET_INTERSECTION: 289,\n SET_MINUS: 290,\n SET_SYMMETRIC_MINUS: 291,\n BOOLEAN: 292,\n\n // Structure operations\n BIGPR: 293,\n SMALLPR: 294,\n FILTER: 295,\n CARD: 296,\n BOOL: 297,\n DEBOOL: 298,\n REDUCE: 299,\n\n // Term constructions prefixes\n DECLARATIVE: 300,\n RECURSIVE: 301,\n IMPERATIVE: 302,\n\n ITERATE: 303,\n ASSIGN: 304,\n\n // Punctuation\n PUNCTUATION_DEFINE: 305,\n PUNCTUATION_STRUCT: 306,\n PUNCTUATION_PL: 307,\n PUNCTUATION_PR: 308,\n PUNCTUATION_CL: 309,\n PUNCTUATION_CR: 310,\n PUNCTUATION_SL: 311,\n PUNCTUATION_SR: 312,\n PUNCTUATION_BAR: 313,\n PUNCTUATION_COMMA: 314,\n PUNCTUATION_SEMICOLON: 315,\n\n // ======= Non-terminal tokens =========\n NT_ENUM_DECL: 316,\n NT_TUPLE: 317,\n NT_ENUMERATION: 318,\n NT_TUPLE_DECL: 319,\n NT_ARG_DECL: 320,\n\n NT_FUNC_DEFINITION: 321,\n NT_ARGUMENTS: 322,\n NT_FUNC_CALL: 323,\n\n NT_DECLARATIVE_EXPR: 324,\n NT_IMPERATIVE_EXPR: 325,\n NT_RECURSIVE_FULL: 326,\n NT_RECURSIVE_SHORT: 327,\n\n // ======= Helper tokens ========\n INTERRUPT: 328,\n END: 329\n} as const;\nexport type TokenID = (typeof TokenID)[keyof typeof TokenID];\n","/**\n * Module: Syntactic errors reporting.\n */\n\nimport { type AstNode, visitAstDFS } from '../../parsing';\nimport { annotateError } from '../ast-annotations';\nimport { type ErrorReporter, RSErrorCode, type RSErrorDescription } from '../error';\n\nimport { Variable } from './parser.terms';\nimport { TokenID } from './token';\n\nexport function extractSyntaxErrors(\n ast: AstNode,\n expression: string,\n reporter: ErrorReporter,\n annotateErrors: boolean = false\n) {\n const bracketError = extractBracketErrors(expression);\n if (bracketError !== null) {\n reporter(bracketError);\n if (annotateErrors) {\n annotateError(ast, bracketError.code, bracketError.params);\n }\n }\n const hasBracketErrors = bracketError !== null;\n visitAstDFS(ast, node => extractInternal(node, reporter, annotateErrors, hasBracketErrors));\n}\n\n// ====== Internals =========\nfunction extractInternal(\n node: AstNode,\n reporter: ErrorReporter,\n annotateErrors: boolean,\n ignoreUnknownErrors: boolean\n) {\n if (node.typeID !== TokenID.ERROR) {\n return;\n }\n\n function emit(target: AstNode, code: RSErrorCode) {\n reporter({ code: code, from: target.from, to: target.to });\n if (annotateErrors) {\n annotateError(target, code);\n }\n }\n\n const parent = node.parent;\n if (parent === null) {\n if (!ignoreUnknownErrors) {\n return emit(node, RSErrorCode.unknownSyntax);\n }\n return;\n }\n\n if (parent.typeID === Variable) {\n return emit(parent, RSErrorCode.expectedLocal);\n }\n\n if (!ignoreUnknownErrors) {\n emit(node.from === node.to ? parent : node, RSErrorCode.unknownSyntax);\n }\n}\n\ntype OpenBracket = '(' | '[' | '{';\ntype CloseBracket = ')' | ']' | '}';\n\ninterface BracketFrame {\n bracket: OpenBracket;\n index: number;\n}\n\nfunction extractBracketErrors(expression: string): RSErrorDescription | null {\n const stack: BracketFrame[] = [];\n\n for (let pos = 0; pos < expression.length; pos++) {\n const symbol = expression[pos];\n if (isOpenBracket(symbol)) {\n if (isDoubleParenthesis(expression, pos)) {\n return {\n code: RSErrorCode.doubleParenthesis,\n from: pos,\n to: pos + 2\n };\n }\n stack.push({ bracket: symbol, index: pos });\n continue;\n }\n if (!isCloseBracket(symbol)) {\n continue;\n }\n\n const expectedOpen = closeToOpen(symbol);\n const top = stack[stack.length - 1];\n if (top === undefined) {\n return {\n code: RSErrorCode.missingOpenBracket,\n from: pos,\n to: pos + 1,\n params: [expectedOpen]\n };\n }\n\n if (top.bracket !== expectedOpen) {\n return {\n code: RSErrorCode.bracketMismatch,\n from: pos,\n to: pos + 1,\n params: [openToClose(top.bracket), symbol]\n };\n }\n\n stack.pop();\n }\n\n if (stack.length > 0) {\n const unclosed = stack[0];\n const code = missingBracketCode(unclosed.bracket);\n return {\n code,\n from: expression.length,\n to: expression.length\n };\n }\n\n return null;\n}\n\nfunction missingBracketCode(bracket: OpenBracket): RSErrorCode {\n switch (bracket) {\n case '(':\n return RSErrorCode.missingParenthesis;\n case '[':\n return RSErrorCode.missingSquareBracket;\n case '{':\n return RSErrorCode.missingCurlyBrace;\n }\n}\n\nfunction isOpenBracket(symbol: string): symbol is OpenBracket {\n return symbol === '(' || symbol === '[' || symbol === '{';\n}\n\nfunction isCloseBracket(symbol: string): symbol is CloseBracket {\n return symbol === ')' || symbol === ']' || symbol === '}';\n}\n\nfunction openToClose(symbol: OpenBracket): CloseBracket {\n switch (symbol) {\n case '(':\n return ')';\n case '[':\n return ']';\n case '{':\n return '}';\n }\n}\n\nfunction closeToOpen(symbol: CloseBracket): OpenBracket {\n switch (symbol) {\n case ')':\n return '(';\n case ']':\n return '[';\n case '}':\n return '{';\n }\n}\n\nfunction isDoubleParenthesis(expression: string, pos: number): boolean {\n const isOpenDoubleParenthesis = expression[pos] === '(' && expression[pos + 1] === '(';\n if (!isOpenDoubleParenthesis) {\n return false;\n }\n\n const outerClose = findMatchingCloseBracket(expression, pos);\n const innerClose = findMatchingCloseBracket(expression, pos + 1);\n if (outerClose < 0 || innerClose < 0) {\n return false;\n }\n\n return outerClose === innerClose + 1;\n}\n\nfunction findMatchingCloseBracket(expression: string, openPos: number): number {\n if (expression[openPos] !== '(') {\n return -1;\n }\n\n const stack: OpenBracket[] = [];\n for (let index = openPos; index < expression.length; index++) {\n const symbol = expression[index];\n if (isOpenBracket(symbol)) {\n stack.push(symbol);\n continue;\n }\n if (!isCloseBracket(symbol)) {\n continue;\n }\n const top = stack.pop();\n if (top === undefined || top !== closeToOpen(symbol)) {\n return -1;\n }\n if (stack.length === 0) {\n return index;\n }\n }\n\n return -1;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"syntax-errors.js","names":[],"sources":["../../../src/rslang/parser/syntax-errors.ts"],"sourcesContent":["/**\n * Module: Syntactic errors reporting.\n */\n\nimport { type AstNode, visitAstDFS } from '../../parsing';\nimport { annotateError } from '../ast-annotations';\nimport { type ErrorReporter, RSErrorCode, type RSErrorDescription } from '../error';\n\nimport { Variable } from './parser.terms';\nimport { TokenID } from './token';\n\nexport function extractSyntaxErrors(\n ast: AstNode,\n expression: string,\n reporter: ErrorReporter,\n annotateErrors: boolean = false\n) {\n const bracketError = extractBracketErrors(expression);\n if (bracketError !== null) {\n reporter(bracketError);\n if (annotateErrors) {\n annotateError(ast, bracketError.code, bracketError.params);\n }\n }\n const hasBracketErrors = bracketError !== null;\n visitAstDFS(ast, node => extractInternal(node, reporter, annotateErrors, hasBracketErrors));\n}\n\n// ====== Internals =========\nfunction extractInternal(\n node: AstNode,\n reporter: ErrorReporter,\n annotateErrors: boolean,\n ignoreUnknownErrors: boolean\n) {\n if (node.typeID !== TokenID.ERROR) {\n return;\n }\n\n function emit(target: AstNode, code: RSErrorCode) {\n reporter({ code: code, from: target.from, to: target.to });\n if (annotateErrors) {\n annotateError(target, code);\n }\n }\n\n const parent = node.parent;\n if (parent === null) {\n if (!ignoreUnknownErrors) {\n return emit(node, RSErrorCode.unknownSyntax);\n }\n return;\n }\n\n if (parent.typeID === Variable) {\n return emit(parent, RSErrorCode.expectedLocal);\n }\n\n if (!ignoreUnknownErrors) {\n emit(node.from === node.to ? parent : node, RSErrorCode.unknownSyntax);\n }\n}\n\ntype OpenBracket = '(' | '[' | '{';\ntype CloseBracket = ')' | ']' | '}';\n\ninterface BracketFrame {\n bracket: OpenBracket;\n index: number;\n}\n\nfunction extractBracketErrors(expression: string): RSErrorDescription | null {\n const stack: BracketFrame[] = [];\n\n for (let pos = 0; pos < expression.length; pos++) {\n const symbol = expression[pos];\n if (isOpenBracket(symbol)) {\n if (isDoubleParenthesis(expression, pos)) {\n return {\n code: RSErrorCode.doubleParenthesis,\n from: pos,\n to: pos + 2\n };\n }\n stack.push({ bracket: symbol, index: pos });\n continue;\n }\n if (!isCloseBracket(symbol)) {\n continue;\n }\n\n const expectedOpen = closeToOpen(symbol);\n const top = stack[stack.length - 1];\n if (top === undefined) {\n return {\n code: RSErrorCode.missingOpenBracket,\n from: pos,\n to: pos + 1,\n params: [expectedOpen]\n };\n }\n\n if (top.bracket !== expectedOpen) {\n return {\n code: RSErrorCode.bracketMismatch,\n from: pos,\n to: pos + 1,\n params: [openToClose(top.bracket), symbol]\n };\n }\n\n stack.pop();\n }\n\n if (stack.length > 0) {\n const unclosed = stack[0];\n const code = missingBracketCode(unclosed.bracket);\n return {\n code,\n from: expression.length,\n to: expression.length\n };\n }\n\n return null;\n}\n\nfunction missingBracketCode(bracket: OpenBracket): RSErrorCode {\n switch (bracket) {\n case '(':\n return RSErrorCode.missingParenthesis;\n case '[':\n return RSErrorCode.missingSquareBracket;\n case '{':\n return RSErrorCode.missingCurlyBrace;\n }\n}\n\nfunction isOpenBracket(symbol: string): symbol is OpenBracket {\n return symbol === '(' || symbol === '[' || symbol === '{';\n}\n\nfunction isCloseBracket(symbol: string): symbol is CloseBracket {\n return symbol === ')' || symbol === ']' || symbol === '}';\n}\n\nfunction openToClose(symbol: OpenBracket): CloseBracket {\n switch (symbol) {\n case '(':\n return ')';\n case '[':\n return ']';\n case '{':\n return '}';\n }\n}\n\nfunction closeToOpen(symbol: CloseBracket): OpenBracket {\n switch (symbol) {\n case ')':\n return '(';\n case ']':\n return '[';\n case '}':\n return '{';\n }\n}\n\nfunction isDoubleParenthesis(expression: string, pos: number): boolean {\n const isOpenDoubleParenthesis = expression[pos] === '(' && expression[pos + 1] === '(';\n if (!isOpenDoubleParenthesis) {\n return false;\n }\n\n const outerClose = findMatchingCloseBracket(expression, pos);\n const innerClose = findMatchingCloseBracket(expression, pos + 1);\n if (outerClose < 0 || innerClose < 0) {\n return false;\n }\n\n return outerClose === innerClose + 1;\n}\n\nfunction findMatchingCloseBracket(expression: string, openPos: number): number {\n if (expression[openPos] !== '(') {\n return -1;\n }\n\n const stack: OpenBracket[] = [];\n for (let index = openPos; index < expression.length; index++) {\n const symbol = expression[index];\n if (isOpenBracket(symbol)) {\n stack.push(symbol);\n continue;\n }\n if (!isCloseBracket(symbol)) {\n continue;\n }\n const top = stack.pop();\n if (top === undefined || top !== closeToOpen(symbol)) {\n return -1;\n }\n if (stack.length === 0) {\n return index;\n }\n }\n\n return -1;\n}\n"],"mappings":"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"}
@@ -1,79 +1,2 @@
1
- /** Represents RSLang token types. */
2
- declare const TokenID: {
3
- readonly ERROR: 0;
4
- readonly ID_LOCAL: 258;
5
- readonly ID_GLOBAL: 259;
6
- readonly ID_FUNCTION: 260;
7
- readonly ID_PREDICATE: 261;
8
- readonly ID_RADICAL: 262;
9
- readonly LIT_INTEGER: 263;
10
- readonly LIT_WHOLE_NUMBERS: 264;
11
- readonly LIT_EMPTYSET: 265;
12
- readonly PLUS: 266;
13
- readonly MINUS: 267;
14
- readonly MULTIPLY: 268;
15
- readonly GREATER: 269;
16
- readonly LESSER: 270;
17
- readonly GREATER_OR_EQ: 271;
18
- readonly LESSER_OR_EQ: 272;
19
- readonly EQUAL: 273;
20
- readonly NOTEQUAL: 274;
21
- readonly QUANTOR_UNIVERSAL: 275;
22
- readonly QUANTOR_EXISTS: 276;
23
- readonly LOGIC_NOT: 277;
24
- readonly LOGIC_EQUIVALENT: 278;
25
- readonly LOGIC_IMPLICATION: 279;
26
- readonly LOGIC_OR: 280;
27
- readonly LOGIC_AND: 281;
28
- readonly SET_IN: 282;
29
- readonly SET_NOT_IN: 283;
30
- readonly SUBSET: 284;
31
- readonly SUBSET_OR_EQ: 285;
32
- readonly NOT_SUBSET: 286;
33
- readonly DECART: 287;
34
- readonly SET_UNION: 288;
35
- readonly SET_INTERSECTION: 289;
36
- readonly SET_MINUS: 290;
37
- readonly SET_SYMMETRIC_MINUS: 291;
38
- readonly BOOLEAN: 292;
39
- readonly BIGPR: 293;
40
- readonly SMALLPR: 294;
41
- readonly FILTER: 295;
42
- readonly CARD: 296;
43
- readonly BOOL: 297;
44
- readonly DEBOOL: 298;
45
- readonly REDUCE: 299;
46
- readonly DECLARATIVE: 300;
47
- readonly RECURSIVE: 301;
48
- readonly IMPERATIVE: 302;
49
- readonly ITERATE: 303;
50
- readonly ASSIGN: 304;
51
- readonly PUNCTUATION_DEFINE: 305;
52
- readonly PUNCTUATION_STRUCT: 306;
53
- readonly PUNCTUATION_PL: 307;
54
- readonly PUNCTUATION_PR: 308;
55
- readonly PUNCTUATION_CL: 309;
56
- readonly PUNCTUATION_CR: 310;
57
- readonly PUNCTUATION_SL: 311;
58
- readonly PUNCTUATION_SR: 312;
59
- readonly PUNCTUATION_BAR: 313;
60
- readonly PUNCTUATION_COMMA: 314;
61
- readonly PUNCTUATION_SEMICOLON: 315;
62
- readonly NT_ENUM_DECL: 316;
63
- readonly NT_TUPLE: 317;
64
- readonly NT_ENUMERATION: 318;
65
- readonly NT_TUPLE_DECL: 319;
66
- readonly NT_ARG_DECL: 320;
67
- readonly NT_FUNC_DEFINITION: 321;
68
- readonly NT_ARGUMENTS: 322;
69
- readonly NT_FUNC_CALL: 323;
70
- readonly NT_DECLARATIVE_EXPR: 324;
71
- readonly NT_IMPERATIVE_EXPR: 325;
72
- readonly NT_RECURSIVE_FULL: 326;
73
- readonly NT_RECURSIVE_SHORT: 327;
74
- readonly INTERRUPT: 328;
75
- readonly END: 329;
76
- };
77
- type TokenID = (typeof TokenID)[keyof typeof TokenID];
78
-
79
- export { TokenID };
1
+ import { t as TokenID } from "../../token-DeXAmzwr.js";
2
+ export { TokenID };