@rsconcept/domain 1.0.0 → 1.2.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.
- package/README.md +3 -3
- package/dist/analyzer-DlSq3Y3r.d.ts +39 -0
- package/dist/arguments-extractor-1acwjQNc.d.ts +38 -0
- package/dist/ast-C8sIpKdL.d.ts +51 -0
- package/dist/ast-annotations-BiMjkKvz.d.ts +16 -0
- package/dist/branded-ZlzIcxzu.d.ts +9 -0
- package/dist/calculator-C9W2jkSx.d.ts +39 -0
- package/dist/cctext/index.d.ts +2 -1
- package/dist/cctext/index.js +2 -42
- package/dist/cctext/language-api.d.ts +10 -12
- package/dist/cctext/language-api.js +157 -227
- package/dist/cctext/language-api.js.map +1 -1
- package/dist/cctext/language.d.ts +24 -22
- package/dist/cctext/language.js +43 -39
- package/dist/cctext/language.js.map +1 -1
- package/dist/error-E1LVq_3w.d.ts +87 -0
- package/dist/graph/graph.d.ts +2 -62
- package/dist/graph/graph.js +339 -382
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/index.d.ts +2 -1
- package/dist/graph/index.js +2 -384
- package/dist/graph-DR8rL2o3.d.ts +64 -0
- package/dist/hash-Y8I4c6Al.d.ts +8 -0
- package/dist/index-BKZ67WMa.d.ts +1 -0
- package/dist/index-BVVgDSdq.d.ts +1 -0
- package/dist/index-DmtQKWjk.d.ts +1 -0
- package/dist/index-_6s0AX1B.d.ts +1 -0
- package/dist/index.d.ts +27 -28
- package/dist/index.js +23 -5851
- package/dist/lezer-tree-iS7LpLBJ.d.ts +14 -0
- package/dist/library/folder-tree.d.ts +22 -20
- package/dist/library/folder-tree.js +108 -130
- package/dist/library/folder-tree.js.map +1 -1
- package/dist/library/index.d.ts +8 -17
- package/dist/library/index.js +7 -2800
- package/dist/library/library-api.d.ts +3 -1
- package/dist/library/library-api.js +9 -8
- package/dist/library/library-api.js.map +1 -1
- package/dist/library/library.d.ts +2 -56
- package/dist/library/library.js +23 -19
- package/dist/library/library.js.map +1 -1
- package/dist/library/oss-api.d.ts +26 -37
- package/dist/library/oss-api.js +258 -1096
- package/dist/library/oss-api.js.map +1 -1
- package/dist/library/oss-layout-api.d.ts +28 -28
- package/dist/library/oss-layout-api.js +239 -316
- package/dist/library/oss-layout-api.js.map +1 -1
- package/dist/library/oss-layout.d.ts +2 -25
- package/dist/library/oss-layout.js +1 -1
- package/dist/library/oss.d.ts +87 -89
- package/dist/library/oss.js +27 -26
- package/dist/library/oss.js.map +1 -1
- package/dist/library/rsengine.d.ts +100 -106
- package/dist/library/rsengine.js +439 -2599
- package/dist/library/rsengine.js.map +1 -1
- package/dist/library/rsform-api.d.ts +11 -16
- package/dist/library/rsform-api.js +313 -825
- package/dist/library/rsform-api.js.map +1 -1
- package/dist/library/rsform.d.ts +159 -167
- package/dist/library/rsform.js +29 -28
- package/dist/library/rsform.js.map +1 -1
- package/dist/library/rsmodel-api.d.ts +8 -15
- package/dist/library/rsmodel-api.js +172 -813
- package/dist/library/rsmodel-api.js.map +1 -1
- package/dist/library/rsmodel.d.ts +27 -33
- package/dist/library/rsmodel.js +16 -23
- package/dist/library/rsmodel.js.map +1 -1
- package/dist/library/structure-planner.d.ts +20 -26
- package/dist/library/structure-planner.js +106 -474
- package/dist/library/structure-planner.js.map +1 -1
- package/dist/library-CYun28Xz.d.ts +58 -0
- package/dist/oss-layout-3glgAqfn.d.ts +27 -0
- package/dist/parser-Bwd8LxJ1.d.ts +7 -0
- package/dist/parsing/ast.d.ts +2 -49
- package/dist/parsing/ast.js +68 -76
- package/dist/parsing/ast.js.map +1 -1
- package/dist/parsing/index.d.ts +3 -3
- package/dist/parsing/index.js +3 -141
- package/dist/parsing/lezer-tree.d.ts +2 -13
- package/dist/parsing/lezer-tree.js +50 -43
- package/dist/parsing/lezer-tree.js.map +1 -1
- package/dist/rslang/api.d.ts +9 -14
- package/dist/rslang/api.js +114 -827
- package/dist/rslang/api.js.map +1 -1
- package/dist/rslang/ast-annotations.d.ts +2 -18
- package/dist/rslang/ast-annotations.js +34 -45
- package/dist/rslang/ast-annotations.js.map +1 -1
- package/dist/rslang/error.d.ts +2 -85
- package/dist/rslang/error.js +88 -150
- package/dist/rslang/error.js.map +1 -1
- package/dist/rslang/eval/calculator.d.ts +2 -43
- package/dist/rslang/eval/calculator.js +81 -1636
- package/dist/rslang/eval/calculator.js.map +1 -1
- package/dist/rslang/eval/evaluation-cache.d.ts +22 -26
- package/dist/rslang/eval/evaluation-cache.js +168 -287
- package/dist/rslang/eval/evaluation-cache.js.map +1 -1
- package/dist/rslang/eval/evaluator.d.ts +59 -63
- package/dist/rslang/eval/evaluator.js +602 -1509
- package/dist/rslang/eval/evaluator.js.map +1 -1
- package/dist/rslang/eval/value-api.d.ts +2 -48
- package/dist/rslang/eval/value-api.js +2 -490
- package/dist/rslang/eval/value.d.ts +2 -36
- package/dist/rslang/eval/value.js +2 -118
- package/dist/rslang/index.d.ts +14 -17
- package/dist/rslang/index.js +12 -4314
- package/dist/rslang/labels.d.ts +6 -6
- package/dist/rslang/labels.js +139 -305
- package/dist/rslang/labels.js.map +1 -1
- package/dist/rslang/parser/expression-generator.d.ts +5 -5
- package/dist/rslang/parser/expression-generator.js +248 -446
- package/dist/rslang/parser/expression-generator.js.map +1 -1
- package/dist/rslang/parser/normalize.d.ts +4 -8
- package/dist/rslang/parser/normalize.js +286 -481
- package/dist/rslang/parser/normalize.js.map +1 -1
- package/dist/rslang/parser/parser.d.ts +2 -5
- package/dist/rslang/parser/parser.js +30 -21
- package/dist/rslang/parser/parser.js.map +1 -1
- package/dist/rslang/parser/parser.terms.d.ts +43 -41
- package/dist/rslang/parser/parser.terms.js +44 -83
- package/dist/rslang/parser/parser.terms.js.map +1 -1
- package/dist/rslang/parser/syntax-errors.d.ts +5 -8
- package/dist/rslang/parser/syntax-errors.js +113 -382
- package/dist/rslang/parser/syntax-errors.js.map +1 -1
- package/dist/rslang/parser/token.d.ts +2 -79
- package/dist/rslang/parser/token.js +81 -93
- package/dist/rslang/parser/token.js.map +1 -1
- package/dist/rslang/semantic/analyzer.d.ts +2 -39
- package/dist/rslang/semantic/analyzer.js +186 -2600
- package/dist/rslang/semantic/analyzer.js.map +1 -1
- package/dist/rslang/semantic/arguments-extractor.d.ts +2 -42
- package/dist/rslang/semantic/arguments-extractor.js +202 -361
- package/dist/rslang/semantic/arguments-extractor.js.map +1 -1
- package/dist/rslang/semantic/type-auditor.d.ts +64 -68
- package/dist/rslang/semantic/type-auditor.js +594 -1564
- package/dist/rslang/semantic/type-auditor.js.map +1 -1
- package/dist/rslang/semantic/typification-api.d.ts +4 -7
- package/dist/rslang/semantic/typification-api.js +162 -303
- package/dist/rslang/semantic/typification-api.js.map +1 -1
- package/dist/rslang/semantic/typification-parser.d.ts +2 -12
- package/dist/rslang/semantic/typification-parser.js +165 -219
- package/dist/rslang/semantic/typification-parser.js.map +1 -1
- package/dist/rslang/semantic/typification.d.ts +2 -119
- package/dist/rslang/semantic/typification.js +66 -52
- package/dist/rslang/semantic/typification.js.map +1 -1
- package/dist/rslang/semantic/value-auditor.d.ts +32 -38
- package/dist/rslang/semantic/value-auditor.js +206 -518
- package/dist/rslang/semantic/value-auditor.js.map +1 -1
- package/dist/rslang/semantic/value-class.d.ts +2 -10
- package/dist/rslang/semantic/value-class.js +8 -7
- package/dist/rslang/semantic/value-class.js.map +1 -1
- package/dist/rslang/typification-graph.d.ts +2 -33
- package/dist/rslang/typification-graph.js +94 -306
- package/dist/rslang/typification-graph.js.map +1 -1
- package/dist/shared/branded.d.ts +2 -7
- package/dist/shared/branded.js +1 -1
- package/dist/shared/hash.d.ts +2 -6
- package/dist/shared/hash.js +13 -13
- package/dist/shared/hash.js.map +1 -1
- package/dist/shared/index.d.ts +3 -2
- package/dist/shared/index.js +2 -18
- package/dist/token-DeXAmzwr.d.ts +81 -0
- package/dist/typification-Dk-fisgO.d.ts +120 -0
- package/dist/typification-graph-6HcZ-rKH.d.ts +30 -0
- package/dist/typification-parser-BBVx1RxP.d.ts +13 -0
- package/dist/value-B8UtCqaK.js +366 -0
- package/dist/value-B8UtCqaK.js.map +1 -0
- package/dist/value-CTjX6825.d.ts +33 -0
- package/dist/value-api-Bw-SgaYY.d.ts +49 -0
- package/dist/value-class-CNI-lqXJ.d.ts +12 -0
- package/package.json +8 -8
- package/src/library/oss-api.test.ts +76 -0
- package/src/library/oss-api.ts +4 -1
- package/src/library/rsform-api.test.ts +24 -0
- package/src/library/rsform-api.ts +12 -4
- package/dist/cctext/index.js.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/library/index.js.map +0 -1
- package/dist/library/oss-layout.js.map +0 -1
- package/dist/parsing/index.js.map +0 -1
- package/dist/rslang/eval/value-api.js.map +0 -1
- package/dist/rslang/eval/value.js.map +0 -1
- package/dist/rslang/index.js.map +0 -1
- package/dist/shared/branded.js.map +0 -1
- package/dist/shared/index.js.map +0 -1
|
@@ -1,523 +1,211 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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/token.ts
|
|
152
|
-
var TokenID = {
|
|
153
|
-
// Global, local IDs and literals
|
|
154
|
-
ERROR: TOKEN_ERROR,
|
|
155
|
-
ID_LOCAL: 258,
|
|
156
|
-
ID_GLOBAL: 259,
|
|
157
|
-
ID_FUNCTION: 260,
|
|
158
|
-
ID_PREDICATE: 261,
|
|
159
|
-
ID_RADICAL: 262,
|
|
160
|
-
LIT_INTEGER: 263,
|
|
161
|
-
LIT_WHOLE_NUMBERS: 264,
|
|
162
|
-
LIT_EMPTYSET: 265,
|
|
163
|
-
// Arithmetic
|
|
164
|
-
PLUS: 266,
|
|
165
|
-
MINUS: 267,
|
|
166
|
-
MULTIPLY: 268,
|
|
167
|
-
// Integer predicate symbols
|
|
168
|
-
GREATER: 269,
|
|
169
|
-
LESSER: 270,
|
|
170
|
-
GREATER_OR_EQ: 271,
|
|
171
|
-
LESSER_OR_EQ: 272,
|
|
172
|
-
// Equality comparison
|
|
173
|
-
EQUAL: 273,
|
|
174
|
-
NOTEQUAL: 274,
|
|
175
|
-
// Logic predicate symbols
|
|
176
|
-
QUANTOR_UNIVERSAL: 275,
|
|
177
|
-
QUANTOR_EXISTS: 276,
|
|
178
|
-
LOGIC_NOT: 277,
|
|
179
|
-
LOGIC_EQUIVALENT: 278,
|
|
180
|
-
LOGIC_IMPLICATION: 279,
|
|
181
|
-
LOGIC_OR: 280,
|
|
182
|
-
LOGIC_AND: 281,
|
|
183
|
-
// Set theory predicate symbols
|
|
184
|
-
SET_IN: 282,
|
|
185
|
-
SET_NOT_IN: 283,
|
|
186
|
-
SUBSET: 284,
|
|
187
|
-
SUBSET_OR_EQ: 285,
|
|
188
|
-
NOT_SUBSET: 286,
|
|
189
|
-
// Set theory operators
|
|
190
|
-
DECART: 287,
|
|
191
|
-
SET_UNION: 288,
|
|
192
|
-
SET_INTERSECTION: 289,
|
|
193
|
-
SET_MINUS: 290,
|
|
194
|
-
SET_SYMMETRIC_MINUS: 291,
|
|
195
|
-
BOOLEAN: 292,
|
|
196
|
-
// Structure operations
|
|
197
|
-
BIGPR: 293,
|
|
198
|
-
SMALLPR: 294,
|
|
199
|
-
FILTER: 295,
|
|
200
|
-
CARD: 296,
|
|
201
|
-
BOOL: 297,
|
|
202
|
-
DEBOOL: 298,
|
|
203
|
-
REDUCE: 299,
|
|
204
|
-
// Term constructions prefixes
|
|
205
|
-
DECLARATIVE: 300,
|
|
206
|
-
RECURSIVE: 301,
|
|
207
|
-
IMPERATIVE: 302,
|
|
208
|
-
ITERATE: 303,
|
|
209
|
-
ASSIGN: 304,
|
|
210
|
-
// Punctuation
|
|
211
|
-
PUNCTUATION_DEFINE: 305,
|
|
212
|
-
PUNCTUATION_STRUCT: 306,
|
|
213
|
-
PUNCTUATION_PL: 307,
|
|
214
|
-
PUNCTUATION_PR: 308,
|
|
215
|
-
PUNCTUATION_CL: 309,
|
|
216
|
-
PUNCTUATION_CR: 310,
|
|
217
|
-
PUNCTUATION_SL: 311,
|
|
218
|
-
PUNCTUATION_SR: 312,
|
|
219
|
-
PUNCTUATION_BAR: 313,
|
|
220
|
-
PUNCTUATION_COMMA: 314,
|
|
221
|
-
PUNCTUATION_SEMICOLON: 315,
|
|
222
|
-
// ======= Non-terminal tokens =========
|
|
223
|
-
NT_ENUM_DECL: 316,
|
|
224
|
-
NT_TUPLE: 317,
|
|
225
|
-
NT_ENUMERATION: 318,
|
|
226
|
-
NT_TUPLE_DECL: 319,
|
|
227
|
-
NT_ARG_DECL: 320,
|
|
228
|
-
NT_FUNC_DEFINITION: 321,
|
|
229
|
-
NT_ARGUMENTS: 322,
|
|
230
|
-
NT_FUNC_CALL: 323,
|
|
231
|
-
NT_DECLARATIVE_EXPR: 324,
|
|
232
|
-
NT_IMPERATIVE_EXPR: 325,
|
|
233
|
-
NT_RECURSIVE_FULL: 326,
|
|
234
|
-
NT_RECURSIVE_SHORT: 327,
|
|
235
|
-
// ======= Helper tokens ========
|
|
236
|
-
INTERRUPT: 328,
|
|
237
|
-
END: 329
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
// src/rslang/semantic/value-class.ts
|
|
241
|
-
var ValueClass = {
|
|
242
|
-
VALUE: "value",
|
|
243
|
-
PROPERTY: "property"
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
// src/rslang/semantic/value-auditor.ts
|
|
1
|
+
import { annotateError } from "../ast-annotations.js";
|
|
2
|
+
import { RSErrorCode } from "../error.js";
|
|
3
|
+
import { getNodeText } from "../../parsing/ast.js";
|
|
4
|
+
import "../../parsing/index.js";
|
|
5
|
+
import { TokenID } from "../parser/token.js";
|
|
6
|
+
import { ValueClass } from "./value-class.js";
|
|
7
|
+
//#region src/rslang/semantic/value-auditor.ts
|
|
8
|
+
/**
|
|
9
|
+
* Module: Value auditor for AST value class checking.
|
|
10
|
+
*
|
|
11
|
+
* Determines whether an expression yields a concrete value (computable)
|
|
12
|
+
* or a property (e.g., depends on a quantified variable).
|
|
13
|
+
*/
|
|
14
|
+
/** Value auditor for AST value class checking. */
|
|
247
15
|
var ValueAuditor = class {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
return null;
|
|
430
|
-
}
|
|
431
|
-
if (this.visitChild(node, 1) === null) {
|
|
432
|
-
return null;
|
|
433
|
-
}
|
|
434
|
-
return ValueClass.VALUE;
|
|
435
|
-
case TokenID.SUBSET:
|
|
436
|
-
case TokenID.NOT_SUBSET:
|
|
437
|
-
return this.assertAllValues(node);
|
|
438
|
-
}
|
|
439
|
-
return null;
|
|
440
|
-
}
|
|
441
|
-
visitDeclarative(node) {
|
|
442
|
-
if (this.visitChild(node, 2) === null) {
|
|
443
|
-
return null;
|
|
444
|
-
}
|
|
445
|
-
return this.visitChild(node, 1);
|
|
446
|
-
}
|
|
447
|
-
visitImperative(node) {
|
|
448
|
-
for (let child = 1; child < node.children.length; child++) {
|
|
449
|
-
if (this.visitChild(node, child) === null) {
|
|
450
|
-
return null;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
return this.assertChildIsValue(node, 0);
|
|
454
|
-
}
|
|
455
|
-
visitIterateOrAssign(node) {
|
|
456
|
-
if (this.visitChild(node, 0) === null) {
|
|
457
|
-
return null;
|
|
458
|
-
}
|
|
459
|
-
return this.assertChildIsValue(node, 1);
|
|
460
|
-
}
|
|
461
|
-
visitDecart(node) {
|
|
462
|
-
let result = ValueClass.VALUE;
|
|
463
|
-
for (let child = 0; child < node.children.length; child++) {
|
|
464
|
-
const childClass = this.visitChild(node, child);
|
|
465
|
-
if (childClass === null) {
|
|
466
|
-
return null;
|
|
467
|
-
}
|
|
468
|
-
if (childClass === ValueClass.PROPERTY) {
|
|
469
|
-
result = ValueClass.PROPERTY;
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
return result;
|
|
473
|
-
}
|
|
474
|
-
visitBoolean(node) {
|
|
475
|
-
if (this.visitChild(node, 0) === null) {
|
|
476
|
-
return null;
|
|
477
|
-
}
|
|
478
|
-
return ValueClass.PROPERTY;
|
|
479
|
-
}
|
|
480
|
-
visitFilter(node) {
|
|
481
|
-
let last = null;
|
|
482
|
-
for (const child of node.children) {
|
|
483
|
-
last = this.dispatchVisit(child);
|
|
484
|
-
if (last === null) {
|
|
485
|
-
return null;
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return last;
|
|
489
|
-
}
|
|
490
|
-
visitSetexprBinary(node) {
|
|
491
|
-
const first = this.visitChild(node, 0);
|
|
492
|
-
if (first === null) {
|
|
493
|
-
return null;
|
|
494
|
-
}
|
|
495
|
-
const second = this.visitChild(node, 1);
|
|
496
|
-
if (second === null) {
|
|
497
|
-
return null;
|
|
498
|
-
}
|
|
499
|
-
const isValue = combineOperationValues(
|
|
500
|
-
node.typeID,
|
|
501
|
-
first === ValueClass.VALUE,
|
|
502
|
-
second === ValueClass.VALUE
|
|
503
|
-
);
|
|
504
|
-
return isValue ? ValueClass.VALUE : ValueClass.PROPERTY;
|
|
505
|
-
}
|
|
16
|
+
context;
|
|
17
|
+
annotateErrors;
|
|
18
|
+
reporter;
|
|
19
|
+
constructor(context) {
|
|
20
|
+
this.context = context;
|
|
21
|
+
this.annotateErrors = false;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Runs value audit on the AST. Returns the value class on success, null on failure.
|
|
25
|
+
*/
|
|
26
|
+
run(ast, reporter, annotateErrors = false) {
|
|
27
|
+
if (ast.hasError) return null;
|
|
28
|
+
this.reporter = reporter;
|
|
29
|
+
this.annotateErrors = annotateErrors;
|
|
30
|
+
return this.dispatchVisit(ast);
|
|
31
|
+
}
|
|
32
|
+
dispatchVisit(node) {
|
|
33
|
+
switch (node.typeID) {
|
|
34
|
+
case TokenID.ID_GLOBAL:
|
|
35
|
+
case TokenID.ID_FUNCTION:
|
|
36
|
+
case TokenID.ID_PREDICATE: return this.visitGlobal(node);
|
|
37
|
+
case TokenID.ID_LOCAL:
|
|
38
|
+
case TokenID.ID_RADICAL:
|
|
39
|
+
case TokenID.LIT_INTEGER:
|
|
40
|
+
case TokenID.LIT_EMPTYSET: return ValueClass.VALUE;
|
|
41
|
+
case TokenID.LIT_WHOLE_NUMBERS: return ValueClass.PROPERTY;
|
|
42
|
+
case TokenID.NT_TUPLE_DECL:
|
|
43
|
+
case TokenID.NT_ENUM_DECL: return this.visitAllAndReturn(node, ValueClass.VALUE);
|
|
44
|
+
case TokenID.NT_ARGUMENTS:
|
|
45
|
+
case TokenID.NT_ARG_DECL: return this.visitAllAndReturn(node, ValueClass.VALUE);
|
|
46
|
+
case TokenID.PLUS:
|
|
47
|
+
case TokenID.MINUS:
|
|
48
|
+
case TokenID.MULTIPLY: return this.visitAllAndReturn(node, ValueClass.VALUE);
|
|
49
|
+
case TokenID.QUANTOR_UNIVERSAL:
|
|
50
|
+
case TokenID.QUANTOR_EXISTS: return this.visitQuantifier(node);
|
|
51
|
+
case TokenID.LOGIC_NOT:
|
|
52
|
+
case TokenID.LOGIC_AND:
|
|
53
|
+
case TokenID.LOGIC_OR:
|
|
54
|
+
case TokenID.LOGIC_IMPLICATION:
|
|
55
|
+
case TokenID.LOGIC_EQUIVALENT: return this.visitAllAndReturn(node, ValueClass.VALUE);
|
|
56
|
+
case TokenID.EQUAL:
|
|
57
|
+
case TokenID.NOTEQUAL: return this.assertAllValues(node);
|
|
58
|
+
case TokenID.GREATER:
|
|
59
|
+
case TokenID.LESSER:
|
|
60
|
+
case TokenID.GREATER_OR_EQ:
|
|
61
|
+
case TokenID.LESSER_OR_EQ: return this.visitAllAndReturn(node, ValueClass.VALUE);
|
|
62
|
+
case TokenID.SET_IN:
|
|
63
|
+
case TokenID.SET_NOT_IN:
|
|
64
|
+
case TokenID.SUBSET:
|
|
65
|
+
case TokenID.SUBSET_OR_EQ:
|
|
66
|
+
case TokenID.NOT_SUBSET: return this.visitSetexprPredicate(node);
|
|
67
|
+
case TokenID.DECART: return this.visitDecart(node);
|
|
68
|
+
case TokenID.BOOLEAN: return this.visitBoolean(node);
|
|
69
|
+
case TokenID.NT_TUPLE:
|
|
70
|
+
case TokenID.NT_ENUMERATION: return this.assertAllValues(node);
|
|
71
|
+
case TokenID.FILTER: return this.visitFilter(node);
|
|
72
|
+
case TokenID.CARD:
|
|
73
|
+
case TokenID.BOOL:
|
|
74
|
+
case TokenID.DEBOOL:
|
|
75
|
+
case TokenID.BIGPR:
|
|
76
|
+
case TokenID.SMALLPR:
|
|
77
|
+
case TokenID.REDUCE: return this.assertChildIsValue(node, 0);
|
|
78
|
+
case TokenID.SET_UNION:
|
|
79
|
+
case TokenID.SET_INTERSECTION:
|
|
80
|
+
case TokenID.SET_MINUS:
|
|
81
|
+
case TokenID.SET_SYMMETRIC_MINUS: return this.visitSetexprBinary(node);
|
|
82
|
+
case TokenID.NT_FUNC_DEFINITION: return this.visitFunctionDefinition(node);
|
|
83
|
+
case TokenID.NT_FUNC_CALL: return this.visitFunctionCall(node);
|
|
84
|
+
case TokenID.NT_DECLARATIVE_EXPR: return this.visitDeclarative(node);
|
|
85
|
+
case TokenID.NT_IMPERATIVE_EXPR: return this.visitImperative(node);
|
|
86
|
+
case TokenID.NT_RECURSIVE_FULL:
|
|
87
|
+
case TokenID.NT_RECURSIVE_SHORT: return this.assertAllValues(node);
|
|
88
|
+
case TokenID.ITERATE:
|
|
89
|
+
case TokenID.ASSIGN: return this.visitIterateOrAssign(node);
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
onError(code, node, params) {
|
|
94
|
+
this.reporter?.({
|
|
95
|
+
code,
|
|
96
|
+
from: node.from,
|
|
97
|
+
to: node.to,
|
|
98
|
+
params
|
|
99
|
+
});
|
|
100
|
+
if (this.annotateErrors) annotateError(node, code, params);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
visitChild(node, index) {
|
|
104
|
+
return this.dispatchVisit(node.children[index]);
|
|
105
|
+
}
|
|
106
|
+
visitAllAndReturn(node, value) {
|
|
107
|
+
for (const child of node.children) if (this.dispatchVisit(child) === null) return null;
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
assertChildIsValue(node, index) {
|
|
111
|
+
const result = this.visitChild(node, index);
|
|
112
|
+
if (result === null) return null;
|
|
113
|
+
if (result !== ValueClass.VALUE) {
|
|
114
|
+
const child = node.children[index];
|
|
115
|
+
return this.onError(RSErrorCode.invalidPropertyUsage, child ?? node);
|
|
116
|
+
}
|
|
117
|
+
return ValueClass.VALUE;
|
|
118
|
+
}
|
|
119
|
+
assertAllValues(node) {
|
|
120
|
+
for (let i = 0; i < node.children.length; i++) if (this.assertChildIsValue(node, i) === null) return null;
|
|
121
|
+
return ValueClass.VALUE;
|
|
122
|
+
}
|
|
123
|
+
visitFunctionDefinition(node) {
|
|
124
|
+
if (this.visitChild(node, 0) === null) return null;
|
|
125
|
+
return this.visitChild(node, 1);
|
|
126
|
+
}
|
|
127
|
+
visitFunctionCall(node) {
|
|
128
|
+
const result = this.visitChild(node, 0);
|
|
129
|
+
if (result === null) return null;
|
|
130
|
+
for (let child = 1; child < node.children.length; child++) if (this.assertChildIsValue(node, child) === null) return null;
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
visitGlobal(node) {
|
|
134
|
+
const alias = getNodeText(node);
|
|
135
|
+
const result = this.context.get(alias);
|
|
136
|
+
if (!result) return this.onError(RSErrorCode.globalNoValue, node, [alias]);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
visitQuantifier(node) {
|
|
140
|
+
if (this.assertChildIsValue(node, 1) === null) return null;
|
|
141
|
+
if (this.visitChild(node, 2) === null) return null;
|
|
142
|
+
return ValueClass.VALUE;
|
|
143
|
+
}
|
|
144
|
+
visitSetexprPredicate(node) {
|
|
145
|
+
switch (node.typeID) {
|
|
146
|
+
case TokenID.SET_IN:
|
|
147
|
+
case TokenID.SET_NOT_IN:
|
|
148
|
+
case TokenID.SUBSET_OR_EQ:
|
|
149
|
+
if (this.assertChildIsValue(node, 0) === null) return null;
|
|
150
|
+
if (this.visitChild(node, 1) === null) return null;
|
|
151
|
+
return ValueClass.VALUE;
|
|
152
|
+
case TokenID.SUBSET:
|
|
153
|
+
case TokenID.NOT_SUBSET: return this.assertAllValues(node);
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
visitDeclarative(node) {
|
|
158
|
+
if (this.visitChild(node, 2) === null) return null;
|
|
159
|
+
return this.visitChild(node, 1);
|
|
160
|
+
}
|
|
161
|
+
visitImperative(node) {
|
|
162
|
+
for (let child = 1; child < node.children.length; child++) if (this.visitChild(node, child) === null) return null;
|
|
163
|
+
return this.assertChildIsValue(node, 0);
|
|
164
|
+
}
|
|
165
|
+
visitIterateOrAssign(node) {
|
|
166
|
+
if (this.visitChild(node, 0) === null) return null;
|
|
167
|
+
return this.assertChildIsValue(node, 1);
|
|
168
|
+
}
|
|
169
|
+
visitDecart(node) {
|
|
170
|
+
let result = ValueClass.VALUE;
|
|
171
|
+
for (let child = 0; child < node.children.length; child++) {
|
|
172
|
+
const childClass = this.visitChild(node, child);
|
|
173
|
+
if (childClass === null) return null;
|
|
174
|
+
if (childClass === ValueClass.PROPERTY) result = ValueClass.PROPERTY;
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
visitBoolean(node) {
|
|
179
|
+
if (this.visitChild(node, 0) === null) return null;
|
|
180
|
+
return ValueClass.PROPERTY;
|
|
181
|
+
}
|
|
182
|
+
visitFilter(node) {
|
|
183
|
+
let last = null;
|
|
184
|
+
for (const child of node.children) {
|
|
185
|
+
last = this.dispatchVisit(child);
|
|
186
|
+
if (last === null) return null;
|
|
187
|
+
}
|
|
188
|
+
return last;
|
|
189
|
+
}
|
|
190
|
+
visitSetexprBinary(node) {
|
|
191
|
+
const first = this.visitChild(node, 0);
|
|
192
|
+
if (first === null) return null;
|
|
193
|
+
const second = this.visitChild(node, 1);
|
|
194
|
+
if (second === null) return null;
|
|
195
|
+
return combineOperationValues(node.typeID, first === ValueClass.VALUE, second === ValueClass.VALUE) ? ValueClass.VALUE : ValueClass.PROPERTY;
|
|
196
|
+
}
|
|
506
197
|
};
|
|
198
|
+
/** Combines value flags for set operations. */
|
|
507
199
|
function combineOperationValues(op, v1, v2) {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
return v1;
|
|
516
|
-
default:
|
|
517
|
-
return v1 && v2;
|
|
518
|
-
}
|
|
200
|
+
switch (op) {
|
|
201
|
+
case TokenID.SET_SYMMETRIC_MINUS:
|
|
202
|
+
case TokenID.SET_UNION: return v1 && v2;
|
|
203
|
+
case TokenID.SET_INTERSECTION: return v1 || v2;
|
|
204
|
+
case TokenID.SET_MINUS: return v1;
|
|
205
|
+
default: return v1 && v2;
|
|
206
|
+
}
|
|
519
207
|
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
208
|
+
//#endregion
|
|
209
|
+
export { ValueAuditor };
|
|
210
|
+
|
|
523
211
|
//# sourceMappingURL=value-auditor.js.map
|