@rsconcept/domain 1.0.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/LICENSE +21 -0
- package/README.md +55 -0
- package/dist/cctext/index.d.ts +1 -0
- package/dist/cctext/index.js +42 -0
- package/dist/cctext/index.js.map +1 -0
- package/dist/cctext/language-api.d.ts +43 -0
- package/dist/cctext/language-api.js +252 -0
- package/dist/cctext/language-api.js.map +1 -0
- package/dist/cctext/language.d.ts +58 -0
- package/dist/cctext/language.js +44 -0
- package/dist/cctext/language.js.map +1 -0
- package/dist/graph/graph.d.ts +62 -0
- package/dist/graph/graph.js +385 -0
- package/dist/graph/graph.js.map +1 -0
- package/dist/graph/index.d.ts +1 -0
- package/dist/graph/index.js +384 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +5851 -0
- package/dist/index.js.map +1 -0
- package/dist/library/folder-tree.d.ts +32 -0
- package/dist/library/folder-tree.js +136 -0
- package/dist/library/folder-tree.js.map +1 -0
- package/dist/library/index.d.ts +17 -0
- package/dist/library/index.js +2800 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/library-api.d.ts +6 -0
- package/dist/library/library-api.js +13 -0
- package/dist/library/library-api.js.map +1 -0
- package/dist/library/library.d.ts +56 -0
- package/dist/library/library.js +23 -0
- package/dist/library/library.js.map +1 -0
- package/dist/library/oss-api.d.ts +47 -0
- package/dist/library/oss-api.js +1105 -0
- package/dist/library/oss-api.js.map +1 -0
- package/dist/library/oss-layout-api.d.ts +36 -0
- package/dist/library/oss-layout-api.js +330 -0
- package/dist/library/oss-layout-api.js.map +1 -0
- package/dist/library/oss-layout.d.ts +25 -0
- package/dist/library/oss-layout.js +1 -0
- package/dist/library/oss-layout.js.map +1 -0
- package/dist/library/oss.d.ts +136 -0
- package/dist/library/oss.js +30 -0
- package/dist/library/oss.js.map +1 -0
- package/dist/library/rsengine.d.ts +116 -0
- package/dist/library/rsengine.js +2604 -0
- package/dist/library/rsengine.js.map +1 -0
- package/dist/library/rsform-api.d.ts +74 -0
- package/dist/library/rsform-api.js +879 -0
- package/dist/library/rsform-api.js.map +1 -0
- package/dist/library/rsform.d.ts +206 -0
- package/dist/library/rsform.js +32 -0
- package/dist/library/rsform.js.map +1 -0
- package/dist/library/rsmodel-api.d.ts +43 -0
- package/dist/library/rsmodel-api.js +836 -0
- package/dist/library/rsmodel-api.js.map +1 -0
- package/dist/library/rsmodel.d.ts +52 -0
- package/dist/library/rsmodel.js +25 -0
- package/dist/library/rsmodel.js.map +1 -0
- package/dist/library/structure-planner.d.ts +33 -0
- package/dist/library/structure-planner.js +481 -0
- package/dist/library/structure-planner.js.map +1 -0
- package/dist/parsing/ast.d.ts +49 -0
- package/dist/parsing/ast.js +93 -0
- package/dist/parsing/ast.js.map +1 -0
- package/dist/parsing/index.d.ts +3 -0
- package/dist/parsing/index.js +141 -0
- package/dist/parsing/index.js.map +1 -0
- package/dist/parsing/lezer-tree.d.ts +13 -0
- package/dist/parsing/lezer-tree.js +50 -0
- package/dist/parsing/lezer-tree.js.map +1 -0
- package/dist/rslang/api.d.ts +53 -0
- package/dist/rslang/api.js +846 -0
- package/dist/rslang/api.js.map +1 -0
- package/dist/rslang/ast-annotations.d.ts +18 -0
- package/dist/rslang/ast-annotations.js +56 -0
- package/dist/rslang/ast-annotations.js.map +1 -0
- package/dist/rslang/error.d.ts +85 -0
- package/dist/rslang/error.js +159 -0
- package/dist/rslang/error.js.map +1 -0
- package/dist/rslang/eval/calculator.d.ts +43 -0
- package/dist/rslang/eval/calculator.js +1639 -0
- package/dist/rslang/eval/calculator.js.map +1 -0
- package/dist/rslang/eval/evaluation-cache.d.ts +36 -0
- package/dist/rslang/eval/evaluation-cache.js +310 -0
- package/dist/rslang/eval/evaluation-cache.js.map +1 -0
- package/dist/rslang/eval/evaluator.d.ts +70 -0
- package/dist/rslang/eval/evaluator.js +1514 -0
- package/dist/rslang/eval/evaluator.js.map +1 -0
- package/dist/rslang/eval/value-api.d.ts +48 -0
- package/dist/rslang/eval/value-api.js +490 -0
- package/dist/rslang/eval/value-api.js.map +1 -0
- package/dist/rslang/eval/value.d.ts +36 -0
- package/dist/rslang/eval/value.js +118 -0
- package/dist/rslang/eval/value.js.map +1 -0
- package/dist/rslang/index.d.ts +17 -0
- package/dist/rslang/index.js +4314 -0
- package/dist/rslang/index.js.map +1 -0
- package/dist/rslang/labels.d.ts +16 -0
- package/dist/rslang/labels.js +315 -0
- package/dist/rslang/labels.js.map +1 -0
- package/dist/rslang/parser/expression-generator.d.ts +10 -0
- package/dist/rslang/parser/expression-generator.js +451 -0
- package/dist/rslang/parser/expression-generator.js.map +1 -0
- package/dist/rslang/parser/normalize.d.ts +11 -0
- package/dist/rslang/parser/normalize.js +507 -0
- package/dist/rslang/parser/normalize.js.map +1 -0
- package/dist/rslang/parser/parser.d.ts +5 -0
- package/dist/rslang/parser/parser.js +24 -0
- package/dist/rslang/parser/parser.js.map +1 -0
- package/dist/rslang/parser/parser.terms.d.ts +42 -0
- package/dist/rslang/parser/parser.terms.js +84 -0
- package/dist/rslang/parser/parser.terms.js.map +1 -0
- package/dist/rslang/parser/syntax-errors.d.ts +11 -0
- package/dist/rslang/parser/syntax-errors.js +403 -0
- package/dist/rslang/parser/syntax-errors.js.map +1 -0
- package/dist/rslang/parser/token.d.ts +79 -0
- package/dist/rslang/parser/token.js +95 -0
- package/dist/rslang/parser/token.js.map +1 -0
- package/dist/rslang/semantic/analyzer.d.ts +39 -0
- package/dist/rslang/semantic/analyzer.js +2604 -0
- package/dist/rslang/semantic/analyzer.js.map +1 -0
- package/dist/rslang/semantic/arguments-extractor.d.ts +42 -0
- package/dist/rslang/semantic/arguments-extractor.js +366 -0
- package/dist/rslang/semantic/arguments-extractor.js.map +1 -0
- package/dist/rslang/semantic/type-auditor.d.ts +73 -0
- package/dist/rslang/semantic/type-auditor.js +1570 -0
- package/dist/rslang/semantic/type-auditor.js.map +1 -0
- package/dist/rslang/semantic/typification-api.d.ts +27 -0
- package/dist/rslang/semantic/typification-api.js +320 -0
- package/dist/rslang/semantic/typification-api.js.map +1 -0
- package/dist/rslang/semantic/typification-parser.d.ts +12 -0
- package/dist/rslang/semantic/typification-parser.js +226 -0
- package/dist/rslang/semantic/typification-parser.js.map +1 -0
- package/dist/rslang/semantic/typification.d.ts +119 -0
- package/dist/rslang/semantic/typification.js +74 -0
- package/dist/rslang/semantic/typification.js.map +1 -0
- package/dist/rslang/semantic/value-auditor.d.ts +43 -0
- package/dist/rslang/semantic/value-auditor.js +523 -0
- package/dist/rslang/semantic/value-auditor.js.map +1 -0
- package/dist/rslang/semantic/value-class.d.ts +10 -0
- package/dist/rslang/semantic/value-class.js +9 -0
- package/dist/rslang/semantic/value-class.js.map +1 -0
- package/dist/rslang/typification-graph.d.ts +33 -0
- package/dist/rslang/typification-graph.js +311 -0
- package/dist/rslang/typification-graph.js.map +1 -0
- package/dist/shared/branded.d.ts +7 -0
- package/dist/shared/branded.js +1 -0
- package/dist/shared/branded.js.map +1 -0
- package/dist/shared/hash.d.ts +6 -0
- package/dist/shared/hash.js +18 -0
- package/dist/shared/hash.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +18 -0
- package/dist/shared/index.js.map +1 -0
- package/package.json +184 -0
- package/src/cctext/index.ts +9 -0
- package/src/cctext/language-api.test.ts +149 -0
- package/src/cctext/language-api.ts +285 -0
- package/src/cctext/language.ts +80 -0
- package/src/graph/graph.test.ts +392 -0
- package/src/graph/graph.ts +433 -0
- package/src/graph/index.ts +1 -0
- package/src/index.ts +96 -0
- package/src/library/folder-tree.test.ts +47 -0
- package/src/library/folder-tree.ts +156 -0
- package/src/library/index.ts +46 -0
- package/src/library/library-api.test.ts +32 -0
- package/src/library/library-api.ts +11 -0
- package/src/library/library.ts +61 -0
- package/src/library/oss-api.ts +449 -0
- package/src/library/oss-layout-api.ts +377 -0
- package/src/library/oss-layout.ts +27 -0
- package/src/library/oss.ts +150 -0
- package/src/library/rsengine.ts +593 -0
- package/src/library/rsform-api.ts +533 -0
- package/src/library/rsform.ts +228 -0
- package/src/library/rsmodel-api.ts +340 -0
- package/src/library/rsmodel.ts +50 -0
- package/src/library/structure-planner.ts +143 -0
- package/src/parsing/ast.ts +136 -0
- package/src/parsing/index.ts +15 -0
- package/src/parsing/lezer-tree.ts +69 -0
- package/src/rslang/api.test.ts +116 -0
- package/src/rslang/api.ts +183 -0
- package/src/rslang/ast-annotations.ts +70 -0
- package/src/rslang/error.ts +129 -0
- package/src/rslang/eval/calculator.test.ts +124 -0
- package/src/rslang/eval/calculator.ts +121 -0
- package/src/rslang/eval/evaluation-cache.ts +257 -0
- package/src/rslang/eval/evaluator.test.ts +352 -0
- package/src/rslang/eval/evaluator.ts +935 -0
- package/src/rslang/eval/value-api.test.ts +105 -0
- package/src/rslang/eval/value-api.ts +444 -0
- package/src/rslang/eval/value.ts +102 -0
- package/src/rslang/index.ts +23 -0
- package/src/rslang/labels.ts +191 -0
- package/src/rslang/parser/expression-generator.test.ts +100 -0
- package/src/rslang/parser/expression-generator.ts +466 -0
- package/src/rslang/parser/normalize.test.ts +99 -0
- package/src/rslang/parser/normalize.ts +462 -0
- package/src/rslang/parser/parser.terms.ts +42 -0
- package/src/rslang/parser/parser.test.ts +153 -0
- package/src/rslang/parser/parser.ts +20 -0
- package/src/rslang/parser/rslang.grammar +251 -0
- package/src/rslang/parser/syntax-errors.ts +209 -0
- package/src/rslang/parser/token.ts +106 -0
- package/src/rslang/semantic/analyzer.test.ts +59 -0
- package/src/rslang/semantic/analyzer.ts +179 -0
- package/src/rslang/semantic/arguments-extractor.ts +327 -0
- package/src/rslang/semantic/type-auditor.test.ts +326 -0
- package/src/rslang/semantic/type-auditor.ts +1049 -0
- package/src/rslang/semantic/typification-api.test.ts +46 -0
- package/src/rslang/semantic/typification-api.ts +321 -0
- package/src/rslang/semantic/typification-parser.test.ts +50 -0
- package/src/rslang/semantic/typification-parser.ts +220 -0
- package/src/rslang/semantic/typification.ts +180 -0
- package/src/rslang/semantic/value-auditor.test.ts +206 -0
- package/src/rslang/semantic/value-auditor.ts +332 -0
- package/src/rslang/semantic/value-class.ts +11 -0
- package/src/rslang/typification-graph.ts +155 -0
- package/src/shared/branded.ts +6 -0
- package/src/shared/hash.ts +17 -0
- package/src/shared/index.ts +2 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AstNodeBase } from '../parsing/ast.js';
|
|
2
|
+
import { TokenID } from './parser/token.js';
|
|
3
|
+
import { ExpressionType } from './semantic/typification.js';
|
|
4
|
+
import '@lezer/common';
|
|
5
|
+
import '../shared/branded.js';
|
|
6
|
+
|
|
7
|
+
/** Retrieves label for {@link TokenID}. */
|
|
8
|
+
declare function labelToken(id: TokenID): string;
|
|
9
|
+
/** Generates label for {@link AstNodeBase}. */
|
|
10
|
+
declare function labelRSLangNode(node: AstNodeBase): string;
|
|
11
|
+
/** Converts expression type to string. */
|
|
12
|
+
declare function labelType(type: ExpressionType | null): string;
|
|
13
|
+
/** Converts expression type to normalized string. */
|
|
14
|
+
declare function normalizeType(type: ExpressionType | null): string;
|
|
15
|
+
|
|
16
|
+
export { labelRSLangNode, labelToken, labelType, normalizeType };
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
// src/parsing/ast.ts
|
|
2
|
+
var TOKEN_ERROR = 0;
|
|
3
|
+
|
|
4
|
+
// src/rslang/parser/token.ts
|
|
5
|
+
var TokenID = {
|
|
6
|
+
// Global, local IDs and literals
|
|
7
|
+
ERROR: TOKEN_ERROR,
|
|
8
|
+
ID_LOCAL: 258,
|
|
9
|
+
ID_GLOBAL: 259,
|
|
10
|
+
ID_FUNCTION: 260,
|
|
11
|
+
ID_PREDICATE: 261,
|
|
12
|
+
ID_RADICAL: 262,
|
|
13
|
+
LIT_INTEGER: 263,
|
|
14
|
+
LIT_WHOLE_NUMBERS: 264,
|
|
15
|
+
LIT_EMPTYSET: 265,
|
|
16
|
+
// Arithmetic
|
|
17
|
+
PLUS: 266,
|
|
18
|
+
MINUS: 267,
|
|
19
|
+
MULTIPLY: 268,
|
|
20
|
+
// Integer predicate symbols
|
|
21
|
+
GREATER: 269,
|
|
22
|
+
LESSER: 270,
|
|
23
|
+
GREATER_OR_EQ: 271,
|
|
24
|
+
LESSER_OR_EQ: 272,
|
|
25
|
+
// Equality comparison
|
|
26
|
+
EQUAL: 273,
|
|
27
|
+
NOTEQUAL: 274,
|
|
28
|
+
// Logic predicate symbols
|
|
29
|
+
QUANTOR_UNIVERSAL: 275,
|
|
30
|
+
QUANTOR_EXISTS: 276,
|
|
31
|
+
LOGIC_NOT: 277,
|
|
32
|
+
LOGIC_EQUIVALENT: 278,
|
|
33
|
+
LOGIC_IMPLICATION: 279,
|
|
34
|
+
LOGIC_OR: 280,
|
|
35
|
+
LOGIC_AND: 281,
|
|
36
|
+
// Set theory predicate symbols
|
|
37
|
+
SET_IN: 282,
|
|
38
|
+
SET_NOT_IN: 283,
|
|
39
|
+
SUBSET: 284,
|
|
40
|
+
SUBSET_OR_EQ: 285,
|
|
41
|
+
NOT_SUBSET: 286,
|
|
42
|
+
// Set theory operators
|
|
43
|
+
DECART: 287,
|
|
44
|
+
SET_UNION: 288,
|
|
45
|
+
SET_INTERSECTION: 289,
|
|
46
|
+
SET_MINUS: 290,
|
|
47
|
+
SET_SYMMETRIC_MINUS: 291,
|
|
48
|
+
BOOLEAN: 292,
|
|
49
|
+
// Structure operations
|
|
50
|
+
BIGPR: 293,
|
|
51
|
+
SMALLPR: 294,
|
|
52
|
+
FILTER: 295,
|
|
53
|
+
CARD: 296,
|
|
54
|
+
BOOL: 297,
|
|
55
|
+
DEBOOL: 298,
|
|
56
|
+
REDUCE: 299,
|
|
57
|
+
// Term constructions prefixes
|
|
58
|
+
DECLARATIVE: 300,
|
|
59
|
+
RECURSIVE: 301,
|
|
60
|
+
IMPERATIVE: 302,
|
|
61
|
+
ITERATE: 303,
|
|
62
|
+
ASSIGN: 304,
|
|
63
|
+
// Punctuation
|
|
64
|
+
PUNCTUATION_DEFINE: 305,
|
|
65
|
+
PUNCTUATION_STRUCT: 306,
|
|
66
|
+
PUNCTUATION_PL: 307,
|
|
67
|
+
PUNCTUATION_PR: 308,
|
|
68
|
+
PUNCTUATION_CL: 309,
|
|
69
|
+
PUNCTUATION_CR: 310,
|
|
70
|
+
PUNCTUATION_SL: 311,
|
|
71
|
+
PUNCTUATION_SR: 312,
|
|
72
|
+
PUNCTUATION_BAR: 313,
|
|
73
|
+
PUNCTUATION_COMMA: 314,
|
|
74
|
+
PUNCTUATION_SEMICOLON: 315,
|
|
75
|
+
// ======= Non-terminal tokens =========
|
|
76
|
+
NT_ENUM_DECL: 316,
|
|
77
|
+
NT_TUPLE: 317,
|
|
78
|
+
NT_ENUMERATION: 318,
|
|
79
|
+
NT_TUPLE_DECL: 319,
|
|
80
|
+
NT_ARG_DECL: 320,
|
|
81
|
+
NT_FUNC_DEFINITION: 321,
|
|
82
|
+
NT_ARGUMENTS: 322,
|
|
83
|
+
NT_FUNC_CALL: 323,
|
|
84
|
+
NT_DECLARATIVE_EXPR: 324,
|
|
85
|
+
NT_IMPERATIVE_EXPR: 325,
|
|
86
|
+
NT_RECURSIVE_FULL: 326,
|
|
87
|
+
NT_RECURSIVE_SHORT: 327,
|
|
88
|
+
// ======= Helper tokens ========
|
|
89
|
+
INTERRUPT: 328,
|
|
90
|
+
END: 329
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// src/rslang/semantic/typification.ts
|
|
94
|
+
var TypeID = {
|
|
95
|
+
anyTypification: 1,
|
|
96
|
+
integer: 2,
|
|
97
|
+
basic: 3,
|
|
98
|
+
tuple: 4,
|
|
99
|
+
collection: 5,
|
|
100
|
+
logic: 6,
|
|
101
|
+
function: 7,
|
|
102
|
+
predicate: 8
|
|
103
|
+
};
|
|
104
|
+
var LogicT = { typeID: TypeID.logic };
|
|
105
|
+
var IntegerT = {
|
|
106
|
+
typeID: TypeID.integer,
|
|
107
|
+
isOrdered: true,
|
|
108
|
+
isArithmetic: true,
|
|
109
|
+
isIntegerCompatible: true
|
|
110
|
+
};
|
|
111
|
+
var AnyTypificationT = { typeID: TypeID.anyTypification };
|
|
112
|
+
var EmptySetT = bool(AnyTypificationT);
|
|
113
|
+
function bool(base) {
|
|
114
|
+
return { typeID: TypeID.collection, base };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// src/rslang/labels.ts
|
|
118
|
+
var INTEGER_TYPE_NAME = "Z";
|
|
119
|
+
var ANY_TYPE_NAME = "R0";
|
|
120
|
+
var LOGIC_TYPE_NAME = "Logic";
|
|
121
|
+
var labelTokenRecord = {
|
|
122
|
+
[TokenID.DECART]: "\xD7",
|
|
123
|
+
[TokenID.PUNCTUATION_PL]: "( )",
|
|
124
|
+
[TokenID.PUNCTUATION_SL]: "[ ]",
|
|
125
|
+
[TokenID.QUANTOR_UNIVERSAL]: "\u2200",
|
|
126
|
+
[TokenID.QUANTOR_EXISTS]: "\u2203",
|
|
127
|
+
[TokenID.LOGIC_NOT]: "\xAC",
|
|
128
|
+
[TokenID.LOGIC_AND]: "&",
|
|
129
|
+
[TokenID.LOGIC_OR]: "\u2228",
|
|
130
|
+
[TokenID.LOGIC_IMPLICATION]: "\u21D2",
|
|
131
|
+
[TokenID.LOGIC_EQUIVALENT]: "\u21D4",
|
|
132
|
+
[TokenID.LIT_EMPTYSET]: "\u2205",
|
|
133
|
+
[TokenID.LIT_WHOLE_NUMBERS]: "Z",
|
|
134
|
+
[TokenID.MULTIPLY]: "*",
|
|
135
|
+
[TokenID.EQUAL]: "=",
|
|
136
|
+
[TokenID.NOTEQUAL]: "\u2260",
|
|
137
|
+
[TokenID.GREATER_OR_EQ]: "\u2265",
|
|
138
|
+
[TokenID.LESSER_OR_EQ]: "\u2264",
|
|
139
|
+
[TokenID.SET_IN]: "\u2208",
|
|
140
|
+
[TokenID.SET_NOT_IN]: "\u2209",
|
|
141
|
+
[TokenID.SUBSET_OR_EQ]: "\u2286",
|
|
142
|
+
[TokenID.SUBSET]: "\u2282",
|
|
143
|
+
[TokenID.NOT_SUBSET]: "\u2284",
|
|
144
|
+
[TokenID.SET_INTERSECTION]: "\u2229",
|
|
145
|
+
[TokenID.SET_UNION]: "\u222A",
|
|
146
|
+
[TokenID.SET_MINUS]: "\\",
|
|
147
|
+
[TokenID.SET_SYMMETRIC_MINUS]: "\u2206",
|
|
148
|
+
[TokenID.BOOLEAN]: "\u212C()",
|
|
149
|
+
[TokenID.NT_DECLARATIVE_EXPR]: "D{}",
|
|
150
|
+
[TokenID.NT_IMPERATIVE_EXPR]: "I{}",
|
|
151
|
+
[TokenID.NT_RECURSIVE_FULL]: "R{}",
|
|
152
|
+
[TokenID.BIGPR]: "Pr1()",
|
|
153
|
+
[TokenID.SMALLPR]: "pr1()",
|
|
154
|
+
[TokenID.FILTER]: "Fi1[]()",
|
|
155
|
+
[TokenID.REDUCE]: "red()",
|
|
156
|
+
[TokenID.CARD]: "card()",
|
|
157
|
+
[TokenID.BOOL]: "bool()",
|
|
158
|
+
[TokenID.DEBOOL]: "debool()",
|
|
159
|
+
[TokenID.ASSIGN]: ":=",
|
|
160
|
+
[TokenID.ITERATE]: ":\u2208"
|
|
161
|
+
};
|
|
162
|
+
function labelToken(id) {
|
|
163
|
+
const text = labelTokenRecord[id];
|
|
164
|
+
return text ?? "UNKNOWN TOKEN: " + String(id);
|
|
165
|
+
}
|
|
166
|
+
function labelRSLangNode(node) {
|
|
167
|
+
switch (node.typeID) {
|
|
168
|
+
case TokenID.ERROR:
|
|
169
|
+
return "[ERROR]";
|
|
170
|
+
case TokenID.ID_LOCAL:
|
|
171
|
+
case TokenID.ID_GLOBAL:
|
|
172
|
+
case TokenID.ID_FUNCTION:
|
|
173
|
+
case TokenID.ID_PREDICATE:
|
|
174
|
+
case TokenID.ID_RADICAL:
|
|
175
|
+
return node.data.value;
|
|
176
|
+
case TokenID.LIT_INTEGER:
|
|
177
|
+
return String(node.data.value);
|
|
178
|
+
case TokenID.BIGPR:
|
|
179
|
+
return "Pr" + node.data.value.toString();
|
|
180
|
+
case TokenID.SMALLPR:
|
|
181
|
+
return "pr" + node.data.value.toString();
|
|
182
|
+
case TokenID.FILTER:
|
|
183
|
+
return "Fi" + node.data.value.toString();
|
|
184
|
+
case TokenID.NT_DECLARATIVE_EXPR:
|
|
185
|
+
return "DECLARATIVE";
|
|
186
|
+
case TokenID.NT_IMPERATIVE_EXPR:
|
|
187
|
+
return "IMPERATIVE";
|
|
188
|
+
case TokenID.NT_RECURSIVE_FULL:
|
|
189
|
+
return "RECURSIVE";
|
|
190
|
+
case TokenID.NT_RECURSIVE_SHORT:
|
|
191
|
+
return "RECURSIVE";
|
|
192
|
+
case TokenID.BOOLEAN:
|
|
193
|
+
return "\u212C";
|
|
194
|
+
case TokenID.REDUCE:
|
|
195
|
+
return "red";
|
|
196
|
+
case TokenID.CARD:
|
|
197
|
+
return "card";
|
|
198
|
+
case TokenID.BOOL:
|
|
199
|
+
return "bool";
|
|
200
|
+
case TokenID.DEBOOL:
|
|
201
|
+
return "debool";
|
|
202
|
+
case TokenID.PLUS:
|
|
203
|
+
return "+";
|
|
204
|
+
case TokenID.MINUS:
|
|
205
|
+
return "-";
|
|
206
|
+
case TokenID.MULTIPLY:
|
|
207
|
+
return "*";
|
|
208
|
+
case TokenID.GREATER:
|
|
209
|
+
return ">";
|
|
210
|
+
case TokenID.LESSER:
|
|
211
|
+
return "<";
|
|
212
|
+
case TokenID.NT_TUPLE:
|
|
213
|
+
return "TUPLE";
|
|
214
|
+
case TokenID.NT_ENUMERATION:
|
|
215
|
+
return "ENUM";
|
|
216
|
+
case TokenID.NT_ENUM_DECL:
|
|
217
|
+
return "ENUM_DECLARE";
|
|
218
|
+
case TokenID.NT_TUPLE_DECL:
|
|
219
|
+
return "TUPLE_DECLARE";
|
|
220
|
+
case TokenID.PUNCTUATION_DEFINE:
|
|
221
|
+
return "DEFINITION";
|
|
222
|
+
case TokenID.PUNCTUATION_STRUCT:
|
|
223
|
+
return "STRUCTURE_DEFINE";
|
|
224
|
+
case TokenID.NT_ARG_DECL:
|
|
225
|
+
return "ARG";
|
|
226
|
+
case TokenID.NT_FUNC_CALL:
|
|
227
|
+
return "CALL";
|
|
228
|
+
case TokenID.NT_ARGUMENTS:
|
|
229
|
+
return "ARGS";
|
|
230
|
+
case TokenID.NT_FUNC_DEFINITION:
|
|
231
|
+
return "FUNCTION_DEFINE";
|
|
232
|
+
case TokenID.DECART:
|
|
233
|
+
case TokenID.QUANTOR_UNIVERSAL:
|
|
234
|
+
case TokenID.QUANTOR_EXISTS:
|
|
235
|
+
case TokenID.LOGIC_NOT:
|
|
236
|
+
case TokenID.LOGIC_AND:
|
|
237
|
+
case TokenID.LOGIC_OR:
|
|
238
|
+
case TokenID.LOGIC_IMPLICATION:
|
|
239
|
+
case TokenID.LOGIC_EQUIVALENT:
|
|
240
|
+
case TokenID.LIT_EMPTYSET:
|
|
241
|
+
case TokenID.LIT_WHOLE_NUMBERS:
|
|
242
|
+
case TokenID.EQUAL:
|
|
243
|
+
case TokenID.NOTEQUAL:
|
|
244
|
+
case TokenID.GREATER_OR_EQ:
|
|
245
|
+
case TokenID.LESSER_OR_EQ:
|
|
246
|
+
case TokenID.SET_IN:
|
|
247
|
+
case TokenID.SET_NOT_IN:
|
|
248
|
+
case TokenID.SUBSET_OR_EQ:
|
|
249
|
+
case TokenID.SUBSET:
|
|
250
|
+
case TokenID.NOT_SUBSET:
|
|
251
|
+
case TokenID.SET_INTERSECTION:
|
|
252
|
+
case TokenID.SET_UNION:
|
|
253
|
+
case TokenID.SET_MINUS:
|
|
254
|
+
case TokenID.SET_SYMMETRIC_MINUS:
|
|
255
|
+
case TokenID.ASSIGN:
|
|
256
|
+
case TokenID.ITERATE:
|
|
257
|
+
return labelToken(node.typeID);
|
|
258
|
+
}
|
|
259
|
+
if (node.data.value) {
|
|
260
|
+
return node.data.value;
|
|
261
|
+
}
|
|
262
|
+
return "UNKNOWN NODE: " + String(node.typeID);
|
|
263
|
+
}
|
|
264
|
+
function labelType(type) {
|
|
265
|
+
if (!type) {
|
|
266
|
+
return "N/A";
|
|
267
|
+
}
|
|
268
|
+
switch (type.typeID) {
|
|
269
|
+
case TypeID.anyTypification:
|
|
270
|
+
return ANY_TYPE_NAME;
|
|
271
|
+
case TypeID.integer:
|
|
272
|
+
return INTEGER_TYPE_NAME;
|
|
273
|
+
case TypeID.basic:
|
|
274
|
+
return type.baseID;
|
|
275
|
+
case TypeID.tuple:
|
|
276
|
+
return type.factors.map((factor) => factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)).join("\xD7");
|
|
277
|
+
case TypeID.collection:
|
|
278
|
+
return type.base.typeID === TypeID.collection ? `\u212C${labelType(type.base)}` : `\u212C(${labelType(type.base)})`;
|
|
279
|
+
case TypeID.logic:
|
|
280
|
+
return LOGIC_TYPE_NAME;
|
|
281
|
+
case TypeID.predicate:
|
|
282
|
+
case TypeID.function:
|
|
283
|
+
const argsText = type.args.map((arg) => labelType(arg.type)).join(", ");
|
|
284
|
+
return `[${argsText}] \u2192 ${labelType(type.result)}`;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function normalizeType(type) {
|
|
288
|
+
if (!type) {
|
|
289
|
+
return "N/A";
|
|
290
|
+
}
|
|
291
|
+
switch (type.typeID) {
|
|
292
|
+
case TypeID.anyTypification:
|
|
293
|
+
return ANY_TYPE_NAME;
|
|
294
|
+
case TypeID.integer:
|
|
295
|
+
case TypeID.basic:
|
|
296
|
+
return "X1";
|
|
297
|
+
case TypeID.tuple:
|
|
298
|
+
return type.factors.map((factor) => factor.typeID === TypeID.tuple ? `(${normalizeType(factor)})` : normalizeType(factor)).join("\xD7");
|
|
299
|
+
case TypeID.collection:
|
|
300
|
+
return type.base.typeID === TypeID.collection ? `\u212C${normalizeType(type.base)}` : `\u212C(${normalizeType(type.base)})`;
|
|
301
|
+
case TypeID.logic:
|
|
302
|
+
return LOGIC_TYPE_NAME;
|
|
303
|
+
case TypeID.predicate:
|
|
304
|
+
case TypeID.function:
|
|
305
|
+
const argsText = type.args.map((arg) => normalizeType(arg.type)).join(", ");
|
|
306
|
+
return `[${argsText}] \u2192 ${normalizeType(type.result)}`;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
export {
|
|
310
|
+
labelRSLangNode,
|
|
311
|
+
labelToken,
|
|
312
|
+
labelType,
|
|
313
|
+
normalizeType
|
|
314
|
+
};
|
|
315
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/parsing/ast.ts","../../src/rslang/parser/token.ts","../../src/rslang/semantic/typification.ts","../../src/rslang/labels.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","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: Typification for RSLang.\n */\n\nimport { type Branded } from '../../shared';\n\n/** Typification structure enumeration. */\nexport const TypeID = {\n anyTypification: 1,\n integer: 2,\n basic: 3,\n tuple: 4,\n collection: 5,\n logic: 6,\n function: 7,\n predicate: 8\n} as const;\nexport type TypeID = (typeof TypeID)[keyof typeof TypeID];\n\n/** Represents type class. */\nexport const TypeClass = {\n logic: 1,\n typification: 2,\n function: 3,\n predicate: 4\n} as const;\nexport type TypeClass = (typeof TypeClass)[keyof typeof TypeClass];\n\n/** Logic type object. */\nexport const LogicT = { typeID: TypeID.logic } as const;\n\n/** Integer type object. */\nexport const IntegerT = {\n typeID: TypeID.integer,\n isOrdered: true,\n isArithmetic: true,\n isIntegerCompatible: true\n} as const;\n\n/** Type transformation path. */\nexport type TypePath = Branded<number[], 'TypePath'>;\n\n/** Creates type path. */\nexport function makeTypePath(path: number[]): TypePath {\n return path as TypePath;\n}\n\n/** AnyTyped type object. */\nexport const AnyTypificationT = { typeID: TypeID.anyTypification } as const;\n\n/** Empty set typification. */\nexport const EmptySetT = bool(AnyTypificationT);\n\n/** Parametrized typification. */\nexport type Parametrized = EchelonFunctional | EchelonPredicate;\n\n/** General expression types. */\nexport type ExpressionType =\n | EchelonLogic\n | EchelonBase\n | EchelonTuple\n | EchelonCollection\n | EchelonFunctional\n | EchelonPredicate\n | EchelonAnyTyped\n | EchelonInteger;\n\n/** Setexpr type. */\nexport type Typification = EchelonBase | EchelonAnyTyped | EchelonInteger | EchelonCollection | EchelonTuple;\n\n/** Typification context. */\nexport type TypeContext = Map<string, ExpressionType>;\n\n/** Functional argument. */\nexport interface Argument {\n readonly alias: string;\n readonly type: Typification;\n}\n\n/** Type: Logic. */\nexport interface EchelonLogic {\n readonly typeID: typeof TypeID.logic;\n}\n\n/** Type: AnyTyped. */\nexport interface EchelonAnyTyped {\n readonly typeID: typeof TypeID.anyTypification;\n}\n\n/** Type: Integer. */\nexport interface EchelonInteger {\n readonly typeID: typeof TypeID.integer;\n readonly isOrdered: true;\n readonly isArithmetic: true;\n readonly isIntegerCompatible: true;\n}\n\n/** Type: Element of basic set. */\nexport interface EchelonBase {\n readonly typeID: typeof TypeID.basic;\n readonly baseID: string;\n readonly isOrdered?: boolean;\n readonly isArithmetic?: boolean;\n readonly isIntegerCompatible?: boolean;\n}\n\n/** Type: Tuple. */\nexport interface EchelonTuple {\n readonly typeID: typeof TypeID.tuple;\n readonly factors: readonly Typification[];\n}\n\n/** Type: Collection. */\nexport interface EchelonCollection {\n readonly typeID: typeof TypeID.collection;\n readonly base: Typification;\n}\n\n/** Type: Functional. */\nexport interface EchelonFunctional {\n readonly typeID: typeof TypeID.function;\n readonly result: Typification;\n readonly args: readonly Argument[];\n}\n\n/** Type: Predicate. */\nexport interface EchelonPredicate {\n readonly typeID: typeof TypeID.predicate;\n readonly result: EchelonLogic;\n readonly args: readonly Argument[];\n}\n\n/** Create basic element typification. */\nexport function basic(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias };\n}\n\n/** Create constant element typification. */\nexport function constant(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias, isOrdered: true, isArithmetic: true, isIntegerCompatible: true };\n}\n\n/** Create boolean typification. */\nexport function bool(base: Typification): EchelonCollection {\n return { typeID: TypeID.collection, base };\n}\n\n/** Create tuple typification. */\nexport function tuple(factors: Typification[]): EchelonTuple {\n if (factors.length < 2) {\n throw new Error('Tuple with less than two factors is not allowed');\n }\n return { typeID: TypeID.tuple, factors };\n}\n\n/** Remove boolean from typification. */\nexport function debool(target: EchelonCollection): Typification {\n return target.base;\n}\n\n/** Extract component from tuple. */\nexport function component(target: EchelonTuple, index: number): Typification | null {\n return target.factors[index - 1] ?? null;\n}\n\n/** Checks if given type is typification. */\nexport function isTypification(type: ExpressionType | null): boolean {\n return (\n type?.typeID === TypeID.basic ||\n type?.typeID === TypeID.anyTypification ||\n type?.typeID === TypeID.integer ||\n type?.typeID === TypeID.collection ||\n type?.typeID === TypeID.tuple\n );\n}\n\n/** Checks if given type is radical. */\nexport function isRadical(alias: string): boolean {\n return alias.length > 0 && alias.startsWith('R') && alias[1] !== '0';\n}\n","import { type AstNodeBase } from '../parsing';\n\nimport { TokenID } from './parser/token';\nimport { type ExpressionType, TypeID } from './semantic/typification';\n\nconst INTEGER_TYPE_NAME = 'Z';\nconst ANY_TYPE_NAME = 'R0';\nconst LOGIC_TYPE_NAME = 'Logic';\n\nconst labelTokenRecord: Partial<Record<TokenID, string>> = {\n [TokenID.DECART]: '×',\n [TokenID.PUNCTUATION_PL]: '( )',\n [TokenID.PUNCTUATION_SL]: '[ ]',\n [TokenID.QUANTOR_UNIVERSAL]: '∀',\n [TokenID.QUANTOR_EXISTS]: '∃',\n [TokenID.LOGIC_NOT]: '¬',\n [TokenID.LOGIC_AND]: '&',\n [TokenID.LOGIC_OR]: '∨',\n [TokenID.LOGIC_IMPLICATION]: '⇒',\n [TokenID.LOGIC_EQUIVALENT]: '⇔',\n [TokenID.LIT_EMPTYSET]: '∅',\n [TokenID.LIT_WHOLE_NUMBERS]: 'Z',\n [TokenID.MULTIPLY]: '*',\n [TokenID.EQUAL]: '=',\n [TokenID.NOTEQUAL]: '≠',\n [TokenID.GREATER_OR_EQ]: '≥',\n [TokenID.LESSER_OR_EQ]: '≤',\n [TokenID.SET_IN]: '∈',\n [TokenID.SET_NOT_IN]: '∉',\n [TokenID.SUBSET_OR_EQ]: '⊆',\n [TokenID.SUBSET]: '⊂',\n [TokenID.NOT_SUBSET]: '⊄',\n [TokenID.SET_INTERSECTION]: '∩',\n [TokenID.SET_UNION]: '∪',\n [TokenID.SET_MINUS]: '\\\\',\n [TokenID.SET_SYMMETRIC_MINUS]: '∆',\n [TokenID.BOOLEAN]: 'ℬ()',\n [TokenID.NT_DECLARATIVE_EXPR]: 'D{}',\n [TokenID.NT_IMPERATIVE_EXPR]: 'I{}',\n [TokenID.NT_RECURSIVE_FULL]: 'R{}',\n [TokenID.BIGPR]: 'Pr1()',\n [TokenID.SMALLPR]: 'pr1()',\n [TokenID.FILTER]: 'Fi1[]()',\n [TokenID.REDUCE]: 'red()',\n [TokenID.CARD]: 'card()',\n [TokenID.BOOL]: 'bool()',\n [TokenID.DEBOOL]: 'debool()',\n [TokenID.ASSIGN]: ':=',\n [TokenID.ITERATE]: ':∈'\n};\n\n/** Retrieves label for {@link TokenID}. */\nexport function labelToken(id: TokenID): string {\n const text = labelTokenRecord[id];\n return text ?? 'UNKNOWN TOKEN: ' + String(id);\n}\n\n/** Generates label for {@link AstNodeBase}. */\nexport function labelRSLangNode(node: AstNodeBase): string {\n // prettier-ignore\n switch (node.typeID) {\n case TokenID.ERROR: return '[ERROR]';\n case TokenID.ID_LOCAL:\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n case TokenID.ID_RADICAL:\n return node.data.value as string;\n\n case TokenID.LIT_INTEGER: return String(node.data.value);\n\n case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();\n case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();\n case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();\n\n case TokenID.NT_DECLARATIVE_EXPR: return 'DECLARATIVE';\n case TokenID.NT_IMPERATIVE_EXPR: return 'IMPERATIVE';\n case TokenID.NT_RECURSIVE_FULL: return 'RECURSIVE';\n case TokenID.NT_RECURSIVE_SHORT: return 'RECURSIVE';\n\n case TokenID.BOOLEAN: return 'ℬ';\n case TokenID.REDUCE: return 'red';\n case TokenID.CARD: return 'card';\n case TokenID.BOOL: return 'bool';\n case TokenID.DEBOOL: return 'debool';\n\n case TokenID.PLUS: return '+';\n case TokenID.MINUS: return '-';\n case TokenID.MULTIPLY: return '*';\n case TokenID.GREATER: return '>';\n case TokenID.LESSER: return '<';\n\n case TokenID.NT_TUPLE: return 'TUPLE';\n case TokenID.NT_ENUMERATION: return 'ENUM';\n\n case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';\n case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';\n case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';\n case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';\n\n case TokenID.NT_ARG_DECL: return 'ARG';\n case TokenID.NT_FUNC_CALL: return 'CALL';\n case TokenID.NT_ARGUMENTS: return 'ARGS';\n\n case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';\n\n case TokenID.DECART:\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n case TokenID.LOGIC_NOT:\n case TokenID.LOGIC_AND:\n case TokenID.LOGIC_OR:\n case TokenID.LOGIC_IMPLICATION:\n case TokenID.LOGIC_EQUIVALENT:\n case TokenID.LIT_EMPTYSET:\n case TokenID.LIT_WHOLE_NUMBERS:\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_UNION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.ASSIGN:\n case TokenID.ITERATE:\n return labelToken(node.typeID);\n }\n if (node.data.value) {\n return node.data.value as string;\n }\n return 'UNKNOWN NODE: ' + String(node.typeID);\n}\n\n/** Converts expression type to string. */\nexport function labelType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n return INTEGER_TYPE_NAME;\n case TypeID.basic:\n return type.baseID;\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${labelType(type.base)}` : `ℬ(${labelType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => labelType(arg.type)).join(', ');\n return `[${argsText}] → ${labelType(type.result)}`;\n }\n}\n\n/** Converts expression type to normalized string. */\nexport function normalizeType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n case TypeID.basic:\n return 'X1';\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${normalizeType(factor)})` : normalizeType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${normalizeType(type.base)}` : `ℬ(${normalizeType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => normalizeType(arg.type)).join(', ');\n return `[${argsText}] → ${normalizeType(type.result)}`;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AstNode } from '../../parsing/ast.js';
|
|
2
|
+
import '@lezer/common';
|
|
3
|
+
|
|
4
|
+
interface ExpressionGeneratorOptions {
|
|
5
|
+
normalize?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Generates Math-syntax RS expression from AST, with optional identifier normalization. */
|
|
8
|
+
declare function generateExpressionFromAst(ast: AstNode, options?: ExpressionGeneratorOptions): string;
|
|
9
|
+
|
|
10
|
+
export { generateExpressionFromAst };
|