bc-minecraft-molang 1.21.61-5 → 1.21.100-1
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 +29 -29
- package/README.md +18 -18
- package/lib/src/{MolangData/AnimationsControllers.d.ts → data/animations-controllers.d.ts} +1 -1
- package/lib/src/{MolangData/AnimationsControllers.js → data/animations-controllers.js} +1 -1
- package/lib/src/data/animations-controllers.js.map +1 -0
- package/lib/src/{MolangData/Animations.d.ts → data/animations.d.ts} +1 -1
- package/lib/src/{MolangData/Animations.js → data/animations.js} +1 -1
- package/lib/src/data/animations.js.map +1 -0
- package/lib/src/{MolangData/Attachables.d.ts → data/attachables.d.ts} +1 -1
- package/lib/src/{MolangData/Attachables.js → data/attachables.js} +1 -1
- package/lib/src/data/attachables.js.map +1 -0
- package/lib/src/{MolangData/Blocks.d.ts → data/blocks.d.ts} +1 -1
- package/lib/src/{MolangData/Blocks.js → data/blocks.js} +1 -1
- package/lib/src/data/blocks.js.map +1 -0
- package/lib/src/{MolangData/Data.js → data/data.js} +1 -1
- package/lib/src/data/data.js.map +1 -0
- package/lib/src/{MolangData/Entities.d.ts → data/entities.d.ts} +1 -1
- package/lib/src/{MolangData/Entities.js → data/entities.js} +1 -1
- package/lib/src/data/entities.js.map +1 -0
- package/lib/src/{MolangData/FeaturesRules.d.ts → data/features-rules.d.ts} +1 -1
- package/lib/src/{MolangData/FeaturesRules.js → data/features-rules.js} +1 -1
- package/lib/src/data/features-rules.js.map +1 -0
- package/lib/src/{MolangData/General.d.ts → data/general.d.ts} +1 -1
- package/lib/src/{MolangData/General.js → data/general.js} +1 -1
- package/lib/src/data/general.js.map +1 -0
- package/lib/src/data/index.d.ts +13 -0
- package/lib/src/{MolangData → data}/index.js +14 -14
- package/lib/src/data/index.js.map +1 -0
- package/lib/src/{MolangData/Items.d.ts → data/items.d.ts} +1 -1
- package/lib/src/{MolangData/Items.js → data/items.js} +1 -1
- package/lib/src/data/items.js.map +1 -0
- package/lib/src/{MolangData/MolangData.d.ts → data/molang-data.d.ts} +11 -11
- package/lib/src/data/molang-data.js +45 -0
- package/lib/src/data/molang-data.js.map +1 -0
- package/lib/src/{MolangData/MolangFunction.js → data/molang-function.js} +1 -1
- package/lib/src/data/molang-function.js.map +1 -0
- package/lib/src/{MolangData/Particles.d.ts → data/particles.d.ts} +1 -1
- package/lib/src/{MolangData/Particles.js → data/particles.js} +1 -1
- package/lib/src/data/particles.js.map +1 -0
- package/lib/src/{MolangData/RenderControllers.d.ts → data/render-controllers.d.ts} +1 -1
- package/lib/src/{MolangData/RenderControllers.js → data/render-controllers.js} +1 -1
- package/lib/src/data/render-controllers.js.map +1 -0
- package/lib/src/graph/mermaid.d.ts +48 -0
- package/lib/src/graph/mermaid.js +223 -0
- package/lib/src/graph/mermaid.js.map +1 -0
- package/lib/src/main.d.ts +2 -3
- package/lib/src/main.js +2 -3
- package/lib/src/main.js.map +1 -1
- package/lib/src/molang/cache.d.ts +11 -0
- package/lib/src/molang/cache.js +32 -0
- package/lib/src/molang/cache.js.map +1 -0
- package/lib/src/{Molang/Functions.d.ts → molang/functions.d.ts} +2 -1
- package/lib/src/{Molang/Functions.js → molang/functions.js} +7 -3
- package/lib/src/molang/functions.js.map +1 -0
- package/lib/src/molang/index.d.ts +5 -0
- package/lib/src/{Types/Defined Using/index.js → molang/index.js} +6 -4
- package/lib/src/molang/index.js.map +1 -0
- package/lib/src/molang/molang-set.d.ts +26 -0
- package/lib/src/molang/molang-set.js +88 -0
- package/lib/src/molang/molang-set.js.map +1 -0
- package/lib/src/molang/syntax/builder.d.ts +16 -0
- package/lib/src/molang/syntax/builder.js +56 -0
- package/lib/src/molang/syntax/builder.js.map +1 -0
- package/lib/src/molang/syntax/collect.d.ts +2 -0
- package/lib/src/molang/syntax/collect.js +15 -0
- package/lib/src/molang/syntax/collect.js.map +1 -0
- package/lib/src/molang/syntax/errors.d.ts +9 -0
- package/lib/src/molang/syntax/errors.js +20 -0
- package/lib/src/molang/syntax/errors.js.map +1 -0
- package/lib/src/molang/syntax/flatten.d.ts +2 -0
- package/lib/src/molang/syntax/flatten.js +10 -0
- package/lib/src/molang/syntax/flatten.js.map +1 -0
- package/lib/src/molang/syntax/index.d.ts +10 -0
- package/lib/src/{Molang/Types → molang/syntax}/index.js +10 -9
- package/lib/src/molang/syntax/index.js.map +1 -0
- package/lib/src/molang/syntax/nodes.d.ts +170 -0
- package/lib/src/molang/syntax/nodes.js +131 -0
- package/lib/src/molang/syntax/nodes.js.map +1 -0
- package/lib/src/molang/syntax/operators.d.ts +2 -0
- package/lib/src/molang/syntax/operators.js +234 -0
- package/lib/src/molang/syntax/operators.js.map +1 -0
- package/lib/src/molang/syntax/parse.d.ts +4 -0
- package/lib/src/molang/syntax/parse.js +264 -0
- package/lib/src/molang/syntax/parse.js.map +1 -0
- package/lib/src/molang/syntax/tokens.d.ts +35 -0
- package/lib/src/molang/syntax/tokens.js +229 -0
- package/lib/src/molang/syntax/tokens.js.map +1 -0
- package/lib/src/molang/syntax/util.d.ts +8 -0
- package/lib/src/molang/syntax/util.js +60 -0
- package/lib/src/molang/syntax/util.js.map +1 -0
- package/lib/src/molang/syntax/walk.d.ts +2 -0
- package/lib/src/molang/syntax/walk.js +15 -0
- package/lib/src/molang/syntax/walk.js.map +1 -0
- package/lib/src/{Molang/Traverse.d.ts → molang/traverse.d.ts} +2 -2
- package/lib/src/{Molang/Traverse.js → molang/traverse.js} +8 -8
- package/lib/src/molang/traverse.js.map +1 -0
- package/package.json +59 -59
- package/lib/src/Molang/Functions.js.map +0 -1
- package/lib/src/Molang/MolangSet.d.ts +0 -64
- package/lib/src/Molang/MolangSet.js +0 -127
- package/lib/src/Molang/MolangSet.js.map +0 -1
- package/lib/src/Molang/RegExp.d.ts +0 -31
- package/lib/src/Molang/RegExp.js +0 -84
- package/lib/src/Molang/RegExp.js.map +0 -1
- package/lib/src/Molang/Syntax.d.ts +0 -30
- package/lib/src/Molang/Syntax.js +0 -41
- package/lib/src/Molang/Syntax.js.map +0 -1
- package/lib/src/Molang/Traverse.js.map +0 -1
- package/lib/src/Molang/Types/Context.d.ts +0 -9
- package/lib/src/Molang/Types/Context.js +0 -18
- package/lib/src/Molang/Types/Context.js.map +0 -1
- package/lib/src/Molang/Types/Geometries.d.ts +0 -9
- package/lib/src/Molang/Types/Geometries.js +0 -18
- package/lib/src/Molang/Types/Geometries.js.map +0 -1
- package/lib/src/Molang/Types/Materials.d.ts +0 -9
- package/lib/src/Molang/Types/Materials.js +0 -18
- package/lib/src/Molang/Types/Materials.js.map +0 -1
- package/lib/src/Molang/Types/Math.d.ts +0 -9
- package/lib/src/Molang/Types/Math.js +0 -18
- package/lib/src/Molang/Types/Math.js.map +0 -1
- package/lib/src/Molang/Types/Queries.d.ts +0 -9
- package/lib/src/Molang/Types/Queries.js +0 -18
- package/lib/src/Molang/Types/Queries.js.map +0 -1
- package/lib/src/Molang/Types/Temps.d.ts +0 -15
- package/lib/src/Molang/Types/Temps.js +0 -27
- package/lib/src/Molang/Types/Temps.js.map +0 -1
- package/lib/src/Molang/Types/Textures.d.ts +0 -18
- package/lib/src/Molang/Types/Textures.js +0 -31
- package/lib/src/Molang/Types/Textures.js.map +0 -1
- package/lib/src/Molang/Types/Variables.d.ts +0 -15
- package/lib/src/Molang/Types/Variables.js +0 -27
- package/lib/src/Molang/Types/Variables.js.map +0 -1
- package/lib/src/Molang/Types/index.d.ts +0 -8
- package/lib/src/Molang/Types/index.js.map +0 -1
- package/lib/src/Molang/index.d.ts +0 -6
- package/lib/src/Molang/index.js +0 -47
- package/lib/src/Molang/index.js.map +0 -1
- package/lib/src/MolangData/Animations.js.map +0 -1
- package/lib/src/MolangData/AnimationsControllers.js.map +0 -1
- package/lib/src/MolangData/Attachables.js.map +0 -1
- package/lib/src/MolangData/Blocks.js.map +0 -1
- package/lib/src/MolangData/Data.js.map +0 -1
- package/lib/src/MolangData/Entities.js.map +0 -1
- package/lib/src/MolangData/FeaturesRules.js.map +0 -1
- package/lib/src/MolangData/General.js.map +0 -1
- package/lib/src/MolangData/Items.js.map +0 -1
- package/lib/src/MolangData/MolangData.js +0 -45
- package/lib/src/MolangData/MolangData.js.map +0 -1
- package/lib/src/MolangData/MolangFunction.js.map +0 -1
- package/lib/src/MolangData/Particles.js.map +0 -1
- package/lib/src/MolangData/RenderControllers.js.map +0 -1
- package/lib/src/MolangData/index.d.ts +0 -13
- package/lib/src/MolangData/index.js.map +0 -1
- package/lib/src/Types/Defined Using/Defined.d.ts +0 -23
- package/lib/src/Types/Defined Using/Defined.js +0 -38
- package/lib/src/Types/Defined Using/Defined.js.map +0 -1
- package/lib/src/Types/Defined Using/DefinedUsing.d.ts +0 -24
- package/lib/src/Types/Defined Using/DefinedUsing.js +0 -45
- package/lib/src/Types/Defined Using/DefinedUsing.js.map +0 -1
- package/lib/src/Types/Defined Using/Using.d.ts +0 -23
- package/lib/src/Types/Defined Using/Using.js +0 -38
- package/lib/src/Types/Defined Using/Using.js.map +0 -1
- package/lib/src/Types/Defined Using/index.d.ts +0 -3
- package/lib/src/Types/Defined Using/index.js.map +0 -1
- package/lib/src/Types/index.d.ts +0 -1
- package/lib/src/Types/index.js +0 -39
- package/lib/src/Types/index.js.map +0 -1
- /package/lib/src/{MolangData/Data.d.ts → data/data.d.ts} +0 -0
- /package/lib/src/{MolangData/MolangFunction.d.ts → data/molang-function.d.ts} +0 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMolang = parseMolang;
|
|
4
|
+
const nodes_1 = require("./nodes");
|
|
5
|
+
const tokens_1 = require("./tokens");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
const builder_1 = require("./builder");
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const operators_1 = require("./operators");
|
|
10
|
+
/** Main function to parse Molang code into a syntax tree */
|
|
11
|
+
function parseMolang(line) {
|
|
12
|
+
const tokens = (0, tokens_1.tokenize)(line.text);
|
|
13
|
+
const statements = splitTokens(tokens, (item) => item.type === tokens_1.TokenType.Semicolon).filter((t) => t.length > 0);
|
|
14
|
+
// Parse each statement
|
|
15
|
+
return statements
|
|
16
|
+
.map(trimEnding)
|
|
17
|
+
.filter((item) => item.length > 0 && item[0].type !== tokens_1.TokenType.EOF)
|
|
18
|
+
.map(parseTokens);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Converts the given tokens into nodes
|
|
22
|
+
* @param tokens
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
function parseTokens(tokens) {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
tokens = trimBraces(tokens);
|
|
28
|
+
tokens = trimEnding(tokens);
|
|
29
|
+
if (tokens.length === 1)
|
|
30
|
+
return (_a = convertToken(tokens[0])) !== null && _a !== void 0 ? _a : costlyConvertToken(tokens, 0).node;
|
|
31
|
+
const builder = new builder_1.SyntaxBuilder((_b = tokens[0].position) !== null && _b !== void 0 ? _b : 0);
|
|
32
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
33
|
+
const t = tokens[i];
|
|
34
|
+
const c = convertToken(t);
|
|
35
|
+
let n;
|
|
36
|
+
if (c) {
|
|
37
|
+
n = c;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const cdata = costlyConvertToken(tokens, i);
|
|
41
|
+
i = cdata.startIndex - 1;
|
|
42
|
+
n = cdata.node;
|
|
43
|
+
}
|
|
44
|
+
builder.add(n);
|
|
45
|
+
// Check for parenthese, brackets and braces
|
|
46
|
+
if (tokens_1.Token.oneOfType(t, tokens_1.TokenType.NamespacedIdentifier) &&
|
|
47
|
+
tokens_1.Token.oneOfType(tokens[i + 1], tokens_1.TokenType.OpenBrace, tokens_1.TokenType.OpenBracket, tokens_1.TokenType.OpenParen)) {
|
|
48
|
+
const code = (0, util_1.getMatchingTokenSlice)(tokens, i + 1);
|
|
49
|
+
const inner = trimBraces(code);
|
|
50
|
+
const params = splitTokens(inner, (item) => item.type === tokens_1.TokenType.Comma);
|
|
51
|
+
const bracketArgs = params.map(parseTokens);
|
|
52
|
+
i += code.length; // move index to end
|
|
53
|
+
switch (n.type) {
|
|
54
|
+
case nodes_1.NodeType.FunctionCall:
|
|
55
|
+
n.arguments = bracketArgs;
|
|
56
|
+
break;
|
|
57
|
+
case nodes_1.NodeType.ResourceReference:
|
|
58
|
+
if (bracketArgs.length > 0) {
|
|
59
|
+
throw errors_1.MolangSyntaxError.fromToken(t, "unexpected function call after resource access");
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case nodes_1.NodeType.Variable:
|
|
63
|
+
if (bracketArgs.length > 1) {
|
|
64
|
+
throw errors_1.MolangSyntaxError.fromToken(t, "unexpected amount of parameters for array access");
|
|
65
|
+
}
|
|
66
|
+
if (!tokens_1.Token.oneOfType(code[0], tokens_1.TokenType.OpenBracket)) {
|
|
67
|
+
throw errors_1.MolangSyntaxError.fromToken(t, "unexpected function call after resource access");
|
|
68
|
+
}
|
|
69
|
+
builder.replace(n, nodes_1.ArrayAccessNode.create({
|
|
70
|
+
position: n.position,
|
|
71
|
+
array: n,
|
|
72
|
+
index: bracketArgs[0],
|
|
73
|
+
}));
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//
|
|
79
|
+
(0, operators_1.processOperators)(builder);
|
|
80
|
+
return builder.build();
|
|
81
|
+
}
|
|
82
|
+
/** Filter () {} [] from start or finish if they match */
|
|
83
|
+
function trimBraces(tokens) {
|
|
84
|
+
if (tokens.length <= 1)
|
|
85
|
+
return tokens;
|
|
86
|
+
while ((tokens[0].type === tokens_1.TokenType.OpenBrace && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseBrace) ||
|
|
87
|
+
(tokens[0].type === tokens_1.TokenType.OpenBracket && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseBracket) ||
|
|
88
|
+
(tokens[0].type === tokens_1.TokenType.OpenParen && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseParen)) {
|
|
89
|
+
tokens = tokens.slice(1, tokens.length - 1);
|
|
90
|
+
if (tokens.length === 0)
|
|
91
|
+
return tokens;
|
|
92
|
+
}
|
|
93
|
+
return tokens;
|
|
94
|
+
}
|
|
95
|
+
function trimEnding(tokens) {
|
|
96
|
+
// Filter off
|
|
97
|
+
while (tokens[tokens.length - 1].type === tokens_1.TokenType.EOF || tokens[tokens.length - 1].type === tokens_1.TokenType.Semicolon) {
|
|
98
|
+
tokens = tokens.slice(0, tokens.length - 1);
|
|
99
|
+
if (tokens.length === 0)
|
|
100
|
+
return tokens;
|
|
101
|
+
}
|
|
102
|
+
return tokens;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Cheap converserions from tokens to nodes
|
|
106
|
+
* @param token
|
|
107
|
+
* @returns
|
|
108
|
+
*/
|
|
109
|
+
function convertToken(token) {
|
|
110
|
+
switch (token.type) {
|
|
111
|
+
case tokens_1.TokenType.NamespacedIdentifier:
|
|
112
|
+
const parts = token.value.split(".");
|
|
113
|
+
switch (parts[0]) {
|
|
114
|
+
case "q":
|
|
115
|
+
case "math":
|
|
116
|
+
case "query":
|
|
117
|
+
return nodes_1.FunctionCallNode.create({
|
|
118
|
+
names: parts.slice(1),
|
|
119
|
+
scope: parts[0],
|
|
120
|
+
arguments: [],
|
|
121
|
+
position: token.position,
|
|
122
|
+
});
|
|
123
|
+
case "texture":
|
|
124
|
+
case "material":
|
|
125
|
+
case "geometry":
|
|
126
|
+
return nodes_1.ResourceReferenceNode.create({
|
|
127
|
+
position: token.position,
|
|
128
|
+
scope: parts[0],
|
|
129
|
+
names: parts.slice(1),
|
|
130
|
+
});
|
|
131
|
+
case "temp":
|
|
132
|
+
case "t":
|
|
133
|
+
case "variable":
|
|
134
|
+
case "v":
|
|
135
|
+
case "context":
|
|
136
|
+
case "c":
|
|
137
|
+
case "array":
|
|
138
|
+
return nodes_1.VariableNode.create({
|
|
139
|
+
names: parts.slice(1),
|
|
140
|
+
position: token.position,
|
|
141
|
+
scope: parts[0],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case tokens_1.TokenType.Number:
|
|
146
|
+
return nodes_1.LiteralNode.create({
|
|
147
|
+
position: token.position,
|
|
148
|
+
value: token.value,
|
|
149
|
+
});
|
|
150
|
+
case tokens_1.TokenType.StringLiteral:
|
|
151
|
+
return nodes_1.StringLiteralNode.create({
|
|
152
|
+
position: token.position,
|
|
153
|
+
value: token.value,
|
|
154
|
+
});
|
|
155
|
+
case tokens_1.TokenType.Operator:
|
|
156
|
+
return nodes_1.BinaryOperationNode.create({
|
|
157
|
+
operator: token.value,
|
|
158
|
+
position: token.position,
|
|
159
|
+
left: {},
|
|
160
|
+
right: {},
|
|
161
|
+
});
|
|
162
|
+
case tokens_1.TokenType.UnaryOperator:
|
|
163
|
+
return nodes_1.UnaryOperationNode.create({
|
|
164
|
+
operator: token.value,
|
|
165
|
+
position: token.position,
|
|
166
|
+
operand: {},
|
|
167
|
+
});
|
|
168
|
+
case tokens_1.TokenType.Assignment:
|
|
169
|
+
return nodes_1.AssignmentNode.create({
|
|
170
|
+
position: token.position,
|
|
171
|
+
left: {},
|
|
172
|
+
right: {},
|
|
173
|
+
});
|
|
174
|
+
case tokens_1.TokenType.QuestionMark:
|
|
175
|
+
return nodes_1.ConditionalExpressionNode.create({
|
|
176
|
+
position: token.position,
|
|
177
|
+
condition: {},
|
|
178
|
+
falseExpression: {},
|
|
179
|
+
trueExpression: {},
|
|
180
|
+
});
|
|
181
|
+
case tokens_1.TokenType.Colon:
|
|
182
|
+
return nodes_1.MarkerNode.create({
|
|
183
|
+
position: token.position,
|
|
184
|
+
token: token,
|
|
185
|
+
});
|
|
186
|
+
case tokens_1.TokenType.NullishCoalescing:
|
|
187
|
+
return nodes_1.NullishCoalescingNode.create({
|
|
188
|
+
position: token.position,
|
|
189
|
+
left: {},
|
|
190
|
+
right: {},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The more costly conversions, and the last restort, will throw an error if doesn't know what to do
|
|
197
|
+
* @param tokens
|
|
198
|
+
* @param startIndex
|
|
199
|
+
*/
|
|
200
|
+
function costlyConvertToken(tokens, startIndex) {
|
|
201
|
+
const current = tokens[startIndex];
|
|
202
|
+
switch (current.type) {
|
|
203
|
+
case tokens_1.TokenType.OpenBrace:
|
|
204
|
+
case tokens_1.TokenType.OpenBracket:
|
|
205
|
+
case tokens_1.TokenType.OpenParen:
|
|
206
|
+
const code = (0, util_1.getMatchingTokenSlice)(tokens, startIndex);
|
|
207
|
+
return {
|
|
208
|
+
node: parseTokens(code),
|
|
209
|
+
startIndex: startIndex + code.length,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
throw errors_1.MolangSyntaxError.fromToken(current, `don't know how to process this token: ${current.value} ${tokens_1.TokenType[current.type]}`);
|
|
213
|
+
}
|
|
214
|
+
function splitTokens(tokens, predicate) {
|
|
215
|
+
const result = [];
|
|
216
|
+
let startIndex = 0;
|
|
217
|
+
let bracketIndex = 0;
|
|
218
|
+
let parentIndex = 0;
|
|
219
|
+
let braceIndex = 0;
|
|
220
|
+
//loop
|
|
221
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
222
|
+
const t = tokens[i];
|
|
223
|
+
switch (t.type) {
|
|
224
|
+
case tokens_1.TokenType.OpenBrace:
|
|
225
|
+
braceIndex++;
|
|
226
|
+
break;
|
|
227
|
+
case tokens_1.TokenType.OpenParen:
|
|
228
|
+
parentIndex++;
|
|
229
|
+
break;
|
|
230
|
+
case tokens_1.TokenType.OpenBracket:
|
|
231
|
+
bracketIndex++;
|
|
232
|
+
break;
|
|
233
|
+
case tokens_1.TokenType.CloseBrace:
|
|
234
|
+
braceIndex--;
|
|
235
|
+
break;
|
|
236
|
+
case tokens_1.TokenType.CloseParen:
|
|
237
|
+
parentIndex--;
|
|
238
|
+
break;
|
|
239
|
+
case tokens_1.TokenType.CloseBracket:
|
|
240
|
+
bracketIndex--;
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
if (bracketIndex > 0 || parentIndex > 0 || braceIndex > 0)
|
|
244
|
+
continue;
|
|
245
|
+
if (predicate(t)) {
|
|
246
|
+
const left = tokens.slice(startIndex, i);
|
|
247
|
+
result.push(left);
|
|
248
|
+
startIndex = i + 1;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Validate
|
|
252
|
+
if (bracketIndex > 0)
|
|
253
|
+
throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing {");
|
|
254
|
+
if (parentIndex > 0)
|
|
255
|
+
throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing (");
|
|
256
|
+
if (braceIndex > 0)
|
|
257
|
+
throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing [");
|
|
258
|
+
if (startIndex < tokens.length) {
|
|
259
|
+
const left = tokens.slice(startIndex);
|
|
260
|
+
result.push(left);
|
|
261
|
+
}
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/molang/syntax/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Represents a token in the Molang code */
|
|
2
|
+
export interface Token {
|
|
3
|
+
type: TokenType;
|
|
4
|
+
value: string;
|
|
5
|
+
position: number;
|
|
6
|
+
}
|
|
7
|
+
export declare namespace Token {
|
|
8
|
+
function oneOfType(t: Pick<Token, "type"> | undefined, ...params: TokenType[]): boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare enum TokenType {
|
|
11
|
+
ArrayAccess = 0,
|
|
12
|
+
Arrow = 1,
|
|
13
|
+
Assignment = 2,
|
|
14
|
+
CloseBrace = 3,
|
|
15
|
+
CloseBracket = 4,
|
|
16
|
+
CloseParen = 5,
|
|
17
|
+
Colon = 6,
|
|
18
|
+
Comma = 7,
|
|
19
|
+
Dot = 8,
|
|
20
|
+
Identifier = 9,
|
|
21
|
+
NamespacedIdentifier = 10,
|
|
22
|
+
NullishCoalescing = 11,
|
|
23
|
+
Number = 12,
|
|
24
|
+
OpenBrace = 13,
|
|
25
|
+
OpenBracket = 14,
|
|
26
|
+
OpenParen = 15,
|
|
27
|
+
Operator = 16,
|
|
28
|
+
QuestionMark = 17,
|
|
29
|
+
Semicolon = 18,
|
|
30
|
+
StringLiteral = 19,
|
|
31
|
+
UnaryOperator = 20,
|
|
32
|
+
EOF = 21
|
|
33
|
+
}
|
|
34
|
+
/** Tokenizes Molang code into a sequence of tokens */
|
|
35
|
+
export declare function tokenize(input: string): Token[];
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenType = exports.Token = void 0;
|
|
4
|
+
exports.tokenize = tokenize;
|
|
5
|
+
var Token;
|
|
6
|
+
(function (Token) {
|
|
7
|
+
function oneOfType(t, ...params) {
|
|
8
|
+
if (t === undefined)
|
|
9
|
+
return false;
|
|
10
|
+
return params.includes(t.type);
|
|
11
|
+
}
|
|
12
|
+
Token.oneOfType = oneOfType;
|
|
13
|
+
})(Token || (exports.Token = Token = {}));
|
|
14
|
+
var TokenType;
|
|
15
|
+
(function (TokenType) {
|
|
16
|
+
TokenType[TokenType["ArrayAccess"] = 0] = "ArrayAccess";
|
|
17
|
+
TokenType[TokenType["Arrow"] = 1] = "Arrow";
|
|
18
|
+
TokenType[TokenType["Assignment"] = 2] = "Assignment";
|
|
19
|
+
TokenType[TokenType["CloseBrace"] = 3] = "CloseBrace";
|
|
20
|
+
TokenType[TokenType["CloseBracket"] = 4] = "CloseBracket";
|
|
21
|
+
TokenType[TokenType["CloseParen"] = 5] = "CloseParen";
|
|
22
|
+
TokenType[TokenType["Colon"] = 6] = "Colon";
|
|
23
|
+
TokenType[TokenType["Comma"] = 7] = "Comma";
|
|
24
|
+
TokenType[TokenType["Dot"] = 8] = "Dot";
|
|
25
|
+
TokenType[TokenType["Identifier"] = 9] = "Identifier";
|
|
26
|
+
TokenType[TokenType["NamespacedIdentifier"] = 10] = "NamespacedIdentifier";
|
|
27
|
+
TokenType[TokenType["NullishCoalescing"] = 11] = "NullishCoalescing";
|
|
28
|
+
TokenType[TokenType["Number"] = 12] = "Number";
|
|
29
|
+
TokenType[TokenType["OpenBrace"] = 13] = "OpenBrace";
|
|
30
|
+
TokenType[TokenType["OpenBracket"] = 14] = "OpenBracket";
|
|
31
|
+
TokenType[TokenType["OpenParen"] = 15] = "OpenParen";
|
|
32
|
+
TokenType[TokenType["Operator"] = 16] = "Operator";
|
|
33
|
+
TokenType[TokenType["QuestionMark"] = 17] = "QuestionMark";
|
|
34
|
+
TokenType[TokenType["Semicolon"] = 18] = "Semicolon";
|
|
35
|
+
TokenType[TokenType["StringLiteral"] = 19] = "StringLiteral";
|
|
36
|
+
TokenType[TokenType["UnaryOperator"] = 20] = "UnaryOperator";
|
|
37
|
+
TokenType[TokenType["EOF"] = 21] = "EOF";
|
|
38
|
+
})(TokenType || (exports.TokenType = TokenType = {}));
|
|
39
|
+
function isDigit(ch) {
|
|
40
|
+
const code = ch.charCodeAt(0);
|
|
41
|
+
return code >= 48 && code <= 57; // 0-9
|
|
42
|
+
}
|
|
43
|
+
function isAlpha(ch) {
|
|
44
|
+
const code = ch.charCodeAt(0);
|
|
45
|
+
return ((code >= 65 && code <= 90) || // A-Z
|
|
46
|
+
(code >= 97 && code <= 122) || // a-z
|
|
47
|
+
ch === "_");
|
|
48
|
+
}
|
|
49
|
+
function isAlphaNumeric(ch) {
|
|
50
|
+
return isAlpha(ch) || isDigit(ch);
|
|
51
|
+
}
|
|
52
|
+
/** Tokenizes Molang code into a sequence of tokens */
|
|
53
|
+
function tokenize(input) {
|
|
54
|
+
const tokens = [];
|
|
55
|
+
let pos = 0;
|
|
56
|
+
while (pos < input.length) {
|
|
57
|
+
const char = input[pos];
|
|
58
|
+
// Skip whitespace
|
|
59
|
+
switch (char) {
|
|
60
|
+
case " ":
|
|
61
|
+
case "\t":
|
|
62
|
+
case "\r":
|
|
63
|
+
case "\n":
|
|
64
|
+
pos++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// Numbers
|
|
68
|
+
if (isDigit(char)) {
|
|
69
|
+
let value = "";
|
|
70
|
+
const start = pos;
|
|
71
|
+
while (pos < input.length && (isDigit(input[pos]) || input[pos] === ".")) {
|
|
72
|
+
value += input[pos];
|
|
73
|
+
pos++;
|
|
74
|
+
}
|
|
75
|
+
tokens.push({ type: TokenType.Number, value, position: start });
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Identifiers (including namespaced ones like math.sin and minecraft:state)
|
|
79
|
+
if (isAlpha(char)) {
|
|
80
|
+
let value = "";
|
|
81
|
+
const start = pos;
|
|
82
|
+
while (pos < input.length) {
|
|
83
|
+
const ch = input[pos];
|
|
84
|
+
// Allow alphanumeric, dots, underscores, and colons in identifiers
|
|
85
|
+
if (isAlphaNumeric(ch) || ch === "." || ch === ":") {
|
|
86
|
+
value += ch;
|
|
87
|
+
pos++;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// If it contains a dot, it's a namespaced identifier
|
|
94
|
+
if (value.includes(".")) {
|
|
95
|
+
tokens.push({ type: TokenType.NamespacedIdentifier, value: value.toLowerCase(), position: start });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
tokens.push({ type: TokenType.Identifier, value: value.toLowerCase(), position: start });
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Multi-character operators
|
|
103
|
+
const threeCharOp = input.slice(pos, pos + 3);
|
|
104
|
+
if (threeCharOp === "???") {
|
|
105
|
+
tokens.push({ type: TokenType.NullishCoalescing, value: threeCharOp, position: pos });
|
|
106
|
+
pos += 3;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const twoCharOp = input.slice(pos, pos + 2);
|
|
110
|
+
switch (twoCharOp) {
|
|
111
|
+
case "&&":
|
|
112
|
+
case "||":
|
|
113
|
+
case "==":
|
|
114
|
+
case "!=":
|
|
115
|
+
case "<=":
|
|
116
|
+
case ">=":
|
|
117
|
+
case "->":
|
|
118
|
+
tokens.push({ type: TokenType.Operator, value: twoCharOp, position: pos });
|
|
119
|
+
pos += 2;
|
|
120
|
+
continue;
|
|
121
|
+
case "??":
|
|
122
|
+
tokens.push({ type: TokenType.NullishCoalescing, value: twoCharOp, position: pos });
|
|
123
|
+
pos += 2;
|
|
124
|
+
continue;
|
|
125
|
+
default:
|
|
126
|
+
}
|
|
127
|
+
// Single-character operators and punctuation
|
|
128
|
+
switch (char) {
|
|
129
|
+
case "(":
|
|
130
|
+
tokens.push({ type: TokenType.OpenParen, value: char, position: pos });
|
|
131
|
+
break;
|
|
132
|
+
case ")":
|
|
133
|
+
tokens.push({ type: TokenType.CloseParen, value: char, position: pos });
|
|
134
|
+
break;
|
|
135
|
+
case "{":
|
|
136
|
+
tokens.push({ type: TokenType.OpenBrace, value: char, position: pos });
|
|
137
|
+
break;
|
|
138
|
+
case "}":
|
|
139
|
+
tokens.push({ type: TokenType.CloseBrace, value: char, position: pos });
|
|
140
|
+
break;
|
|
141
|
+
case "[":
|
|
142
|
+
tokens.push({ type: TokenType.OpenBracket, value: char, position: pos });
|
|
143
|
+
break;
|
|
144
|
+
case "]":
|
|
145
|
+
tokens.push({ type: TokenType.CloseBracket, value: char, position: pos });
|
|
146
|
+
break;
|
|
147
|
+
case ";":
|
|
148
|
+
tokens.push({ type: TokenType.Semicolon, value: char, position: pos });
|
|
149
|
+
break;
|
|
150
|
+
case "?":
|
|
151
|
+
tokens.push({ type: TokenType.QuestionMark, value: char, position: pos });
|
|
152
|
+
break;
|
|
153
|
+
case ":":
|
|
154
|
+
tokens.push({ type: TokenType.Colon, value: char, position: pos });
|
|
155
|
+
break;
|
|
156
|
+
case ".":
|
|
157
|
+
tokens.push({ type: TokenType.Dot, value: char, position: pos });
|
|
158
|
+
break;
|
|
159
|
+
case "=":
|
|
160
|
+
tokens.push({ type: TokenType.Assignment, value: char, position: pos });
|
|
161
|
+
break;
|
|
162
|
+
case "!":
|
|
163
|
+
tokens.push({ type: TokenType.UnaryOperator, value: char, position: pos });
|
|
164
|
+
break;
|
|
165
|
+
case "+":
|
|
166
|
+
case "-":
|
|
167
|
+
case "*":
|
|
168
|
+
case "/":
|
|
169
|
+
case "<":
|
|
170
|
+
case ">":
|
|
171
|
+
tokens.push({ type: TokenType.Operator, value: char, position: pos });
|
|
172
|
+
break;
|
|
173
|
+
case ",":
|
|
174
|
+
tokens.push({ type: TokenType.Comma, value: char, position: pos });
|
|
175
|
+
break;
|
|
176
|
+
case "'":
|
|
177
|
+
case '"':
|
|
178
|
+
// Handle string literals
|
|
179
|
+
const quote = char;
|
|
180
|
+
const start = pos;
|
|
181
|
+
pos++;
|
|
182
|
+
let value = "";
|
|
183
|
+
while (pos < input.length && input[pos] !== quote) {
|
|
184
|
+
// Capture everything inside quotes including special characters
|
|
185
|
+
value += input[pos];
|
|
186
|
+
pos++;
|
|
187
|
+
}
|
|
188
|
+
if (pos >= input.length) {
|
|
189
|
+
throw new Error(`Unterminated string literal starting at position ${start}`);
|
|
190
|
+
}
|
|
191
|
+
pos++; // Skip closing quote
|
|
192
|
+
tokens.push({
|
|
193
|
+
type: TokenType.StringLiteral,
|
|
194
|
+
value: value, // Use accumulated value instead of slicing
|
|
195
|
+
position: start,
|
|
196
|
+
});
|
|
197
|
+
continue; // Use continue instead of break to avoid the pos++ at the end of switch
|
|
198
|
+
default:
|
|
199
|
+
throw new Error(`Unexpected character at position ${pos}: ${char}`);
|
|
200
|
+
}
|
|
201
|
+
pos++;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
// Always add an EOF token at the end
|
|
205
|
+
tokens.push({ type: TokenType.EOF, value: " ", position: pos });
|
|
206
|
+
// Check for unary operators
|
|
207
|
+
tokens.forEach(checkUnaryOperators);
|
|
208
|
+
return tokens;
|
|
209
|
+
}
|
|
210
|
+
function checkUnaryOperators(item, index, items) {
|
|
211
|
+
if (item.type !== TokenType.Operator && item.value !== "-")
|
|
212
|
+
return;
|
|
213
|
+
if (index === 0) {
|
|
214
|
+
item.type = TokenType.UnaryOperator;
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const previous = items[index - 1];
|
|
218
|
+
switch (previous.type) {
|
|
219
|
+
case TokenType.Comma:
|
|
220
|
+
case TokenType.Operator:
|
|
221
|
+
case TokenType.OpenBrace:
|
|
222
|
+
case TokenType.OpenBracket:
|
|
223
|
+
case TokenType.OpenParen:
|
|
224
|
+
item.type = TokenType.UnaryOperator;
|
|
225
|
+
break;
|
|
226
|
+
default:
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../src/molang/syntax/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMatchingTokenSlice = getMatchingTokenSlice;
|
|
4
|
+
const tokens_1 = require("./tokens");
|
|
5
|
+
/**
|
|
6
|
+
* Gets a slice tokens from ( to ) (or for {}, [])
|
|
7
|
+
* @param tokens
|
|
8
|
+
* @param startIndex
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
function getMatchingTokenSlice(tokens, startIndex) {
|
|
12
|
+
if (startIndex >= tokens.length) {
|
|
13
|
+
throw new Error("Start index is out of bounds");
|
|
14
|
+
}
|
|
15
|
+
const startToken = tokens[startIndex];
|
|
16
|
+
let targetType;
|
|
17
|
+
let counterType;
|
|
18
|
+
// Determine what we're looking for based on the starting token
|
|
19
|
+
switch (startToken.type) {
|
|
20
|
+
case tokens_1.TokenType.OpenBrace:
|
|
21
|
+
targetType = tokens_1.TokenType.CloseBrace;
|
|
22
|
+
counterType = tokens_1.TokenType.OpenBrace;
|
|
23
|
+
break;
|
|
24
|
+
case tokens_1.TokenType.OpenParen:
|
|
25
|
+
targetType = tokens_1.TokenType.CloseParen;
|
|
26
|
+
counterType = tokens_1.TokenType.OpenParen;
|
|
27
|
+
break;
|
|
28
|
+
case tokens_1.TokenType.OpenBracket:
|
|
29
|
+
targetType = tokens_1.TokenType.CloseBracket;
|
|
30
|
+
counterType = tokens_1.TokenType.OpenBracket;
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`Token at index ${startIndex} is not an opening bracket, brace, or parenthesis`);
|
|
34
|
+
}
|
|
35
|
+
let level = 1; // We start with level 1 since we found the opening token
|
|
36
|
+
let endIndex = -1;
|
|
37
|
+
// Search for the matching closing token
|
|
38
|
+
for (let i = startIndex + 1; i < tokens.length; i++) {
|
|
39
|
+
const token = tokens[i];
|
|
40
|
+
if (token.type === counterType) {
|
|
41
|
+
level++;
|
|
42
|
+
}
|
|
43
|
+
else if (token.type === targetType) {
|
|
44
|
+
level--;
|
|
45
|
+
if (level === 0) {
|
|
46
|
+
endIndex = i;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Validate that we found the matching closing token
|
|
52
|
+
if (endIndex === -1) {
|
|
53
|
+
const tokenName = startToken.type === tokens_1.TokenType.OpenBrace ? "{" : startToken.type === tokens_1.TokenType.OpenParen ? "(" : "[";
|
|
54
|
+
const closingName = targetType === tokens_1.TokenType.CloseBrace ? "}" : targetType === tokens_1.TokenType.CloseParen ? ")" : "]";
|
|
55
|
+
throw new Error(`Couldn't find the matching closing ${closingName} for ${tokenName} at index ${startIndex}`);
|
|
56
|
+
}
|
|
57
|
+
// Return the slice including both opening and closing tokens
|
|
58
|
+
return tokens.slice(startIndex, endIndex + 1);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/molang/syntax/util.ts"],"names":[],"mappings":";;AAQA,sDAuDC;AA/DD,qCAA4C;AAE5C;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,MAAe,EAAE,UAAkB;IACvE,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,UAAqB,CAAC;IAC1B,IAAI,WAAsB,CAAC;IAE3B,+DAA+D;IAC/D,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,kBAAS,CAAC,SAAS;YACtB,UAAU,GAAG,kBAAS,CAAC,UAAU,CAAC;YAClC,WAAW,GAAG,kBAAS,CAAC,SAAS,CAAC;YAClC,MAAM;QACR,KAAK,kBAAS,CAAC,SAAS;YACtB,UAAU,GAAG,kBAAS,CAAC,UAAU,CAAC;YAClC,WAAW,GAAG,kBAAS,CAAC,SAAS,CAAC;YAClC,MAAM;QACR,KAAK,kBAAS,CAAC,WAAW;YACxB,UAAU,GAAG,kBAAS,CAAC,YAAY,CAAC;YACpC,WAAW,GAAG,kBAAS,CAAC,WAAW,CAAC;YACpC,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,mDAAmD,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,yDAAyD;IACxE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAElB,wCAAwC;IACxC,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtG,MAAM,WAAW,GAAG,UAAU,KAAK,kBAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,kBAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChH,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,QAAQ,SAAS,aAAa,UAAU,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,6DAA6D;IAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.walk = walk;
|
|
4
|
+
const nodes_1 = require("./nodes");
|
|
5
|
+
function walk(exp, callback) {
|
|
6
|
+
const objs = [exp];
|
|
7
|
+
for (let i = 0; i < objs.length; i++) {
|
|
8
|
+
const node = objs[i];
|
|
9
|
+
if (node === undefined)
|
|
10
|
+
continue;
|
|
11
|
+
callback(node);
|
|
12
|
+
objs.push(...nodes_1.ExpressionNode.getChildern(node));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../../src/molang/syntax/walk.ts"],"names":[],"mappings":";;AAEA,oBAUC;AAZD,mCAAyC;AAEzC,SAAgB,IAAI,CAAC,GAAmB,EAAE,QAAwC;IAChF,MAAM,IAAI,GAAqB,CAAC,GAAG,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|