occam-parsers 23.0.62 → 23.0.64
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/example.js +52 -41
- package/lib/example/basic/bnf.js +2 -2
- package/lib/example/view/basic.js +2 -2
- package/lib/example/view/textarea/bnf.js +2 -2
- package/lib/example/view/textarea/lexicalEntries.js +2 -2
- package/lib/example/view.js +4 -4
- package/lib/node/nonTerminal.js +37 -27
- package/lib/rule.js +9 -8
- package/package.json +1 -1
- package/src/example/basic/bnf.js +28 -10
- package/src/example/view/basic.js +1 -1
- package/src/example/view/textarea/bnf.js +1 -1
- package/src/example/view/textarea/lexicalEntries.js +1 -1
- package/src/example/view.js +4 -4
- package/src/node/nonTerminal.js +34 -30
- package/src/rule.js +11 -9
package/src/node/nonTerminal.js
CHANGED
|
@@ -42,21 +42,11 @@ export default class NonTerminalNode {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
setChildNodes(childNodes) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
parentNode = null;
|
|
48
|
-
|
|
49
|
-
this.childNodes.forEach((childNode) => {
|
|
50
|
-
childNode.setParentNode(parentNode);
|
|
51
|
-
});
|
|
45
|
+
this.resetChildNodesParentNode();
|
|
52
46
|
|
|
53
47
|
this.childNodes = childNodes;
|
|
54
48
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.childNodes.forEach((childNode) => {
|
|
58
|
-
childNode.setParentNode(parentNode);
|
|
59
|
-
});
|
|
49
|
+
this.setChildNodesParentNode();
|
|
60
50
|
}
|
|
61
51
|
|
|
62
52
|
setParentNode(parentNode) {
|
|
@@ -263,6 +253,17 @@ export default class NonTerminalNode {
|
|
|
263
253
|
return rewrittenNonTerminalNode;
|
|
264
254
|
}
|
|
265
255
|
|
|
256
|
+
cloneChildNodes() {
|
|
257
|
+
const parentNode = this, ///
|
|
258
|
+
childNodes = this.childNodes.map((childNode) => {
|
|
259
|
+
childNode = childNode.clone(parentNode); ///
|
|
260
|
+
|
|
261
|
+
return childNode;
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
return childNodes;
|
|
265
|
+
}
|
|
266
|
+
|
|
266
267
|
replaceChildNodes(replacedChildNodes, replacementChildNodes) {
|
|
267
268
|
const replacedChildNodesLength = replacedChildNodes.length,
|
|
268
269
|
firstReplacedChildNode = first(replacedChildNodes),
|
|
@@ -272,18 +273,32 @@ export default class NonTerminalNode {
|
|
|
272
273
|
|
|
273
274
|
this.childNodes.splice(start, deleteCount, ...replacementChildNodes);
|
|
274
275
|
|
|
275
|
-
|
|
276
|
+
this.resetChildNodesParentNode(replacedChildNodes);
|
|
276
277
|
|
|
277
|
-
|
|
278
|
+
this.setChildNodesParentNode(replacementChildNodes);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
setChildNodesParentNode(childNodes) {
|
|
282
|
+
if (childNodes === undefined) {
|
|
283
|
+
childNodes = this.childNodes;
|
|
284
|
+
}
|
|
278
285
|
|
|
279
|
-
|
|
280
|
-
|
|
286
|
+
const parentNode = this;
|
|
287
|
+
|
|
288
|
+
childNodes.forEach((childNode) => {
|
|
289
|
+
childNode.setParentNode(parentNode);
|
|
281
290
|
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
resetChildNodesParentNode(childNodes) {
|
|
294
|
+
if (childNodes === undefined) {
|
|
295
|
+
childNodes = this.childNodes;
|
|
296
|
+
}
|
|
282
297
|
|
|
283
|
-
parentNode =
|
|
298
|
+
const parentNode = null;
|
|
284
299
|
|
|
285
|
-
|
|
286
|
-
|
|
300
|
+
childNodes.forEach((childNode) => {
|
|
301
|
+
childNode.setParentNode(parentNode);
|
|
287
302
|
});
|
|
288
303
|
}
|
|
289
304
|
|
|
@@ -295,17 +310,6 @@ export default class NonTerminalNode {
|
|
|
295
310
|
return parseTree;
|
|
296
311
|
}
|
|
297
312
|
|
|
298
|
-
cloneChildNodes() {
|
|
299
|
-
const parentNode = this, ///
|
|
300
|
-
childNodes = this.childNodes.map((childNode) => {
|
|
301
|
-
childNode = childNode.clone(parentNode); ///
|
|
302
|
-
|
|
303
|
-
return childNode;
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
return childNodes;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
313
|
clone(parentNode = null) {
|
|
310
314
|
const Class = this.constructor,
|
|
311
315
|
ruleName = this.ruleName,
|
package/src/rule.js
CHANGED
|
@@ -86,12 +86,16 @@ export default class Rule {
|
|
|
86
86
|
callback = () => { ///
|
|
87
87
|
let parsed;
|
|
88
88
|
|
|
89
|
-
parsed = true;
|
|
90
|
-
|
|
91
89
|
const precedence = state.getPrecedence();
|
|
92
90
|
|
|
93
91
|
nonTerminalNode.setPrecedence(precedence);
|
|
94
92
|
|
|
93
|
+
parsed = true;
|
|
94
|
+
|
|
95
|
+
if (parsed) {
|
|
96
|
+
node.setChildNodesParentNode();
|
|
97
|
+
}
|
|
98
|
+
|
|
95
99
|
const rewrittenNonTerminalNode = nonTerminalNode.rewrite();
|
|
96
100
|
|
|
97
101
|
if (rewrittenNonTerminalNode !== null) {
|
|
@@ -138,6 +142,10 @@ export default class Rule {
|
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
144
|
|
|
145
|
+
if (!parsed) {
|
|
146
|
+
node.resetChildNodesParentNode();
|
|
147
|
+
}
|
|
148
|
+
|
|
141
149
|
return parsed;
|
|
142
150
|
};
|
|
143
151
|
|
|
@@ -150,13 +158,7 @@ export default class Rule {
|
|
|
150
158
|
return parsed;
|
|
151
159
|
});
|
|
152
160
|
|
|
153
|
-
if (parsed) {
|
|
154
|
-
const parentNode = node; ///
|
|
155
|
-
|
|
156
|
-
childNodes.forEach((childNode) => {
|
|
157
|
-
childNode.setParentNode(parentNode);
|
|
158
|
-
});
|
|
159
|
-
} else {
|
|
161
|
+
if (!parsed) {
|
|
160
162
|
nodes.pop();
|
|
161
163
|
}
|
|
162
164
|
|