occam-furtle 2.0.290 → 2.0.291
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/lib/furtle/lexer.js +80 -0
- package/lib/furtle/parser.js +102 -0
- package/lib/index.js +5 -1
- package/lib/node/assignment/array.js +107 -0
- package/lib/node/assignment/object.js +107 -0
- package/lib/node/assignment/variable.js +107 -0
- package/lib/node/assignment.js +102 -0
- package/lib/node/assignments/variable.js +107 -0
- package/lib/node/assignments.js +102 -0
- package/lib/node/comparison.js +102 -0
- package/lib/node/declaration.js +102 -0
- package/lib/node/every.js +102 -0
- package/lib/node/expression.js +102 -0
- package/lib/node/expressions.js +102 -0
- package/lib/node/label.js +102 -0
- package/lib/node/parameter.js +102 -0
- package/lib/node/parameters.js +102 -0
- package/lib/node/procedure.js +102 -0
- package/lib/node/procedureCall.js +102 -0
- package/lib/node/query.js +102 -0
- package/lib/node/reduce.js +102 -0
- package/lib/node/reference.js +102 -0
- package/lib/node/returnBlock.js +102 -0
- package/lib/node/statement.js +102 -0
- package/lib/node/step.js +102 -0
- package/lib/node/ternary.js +102 -0
- package/lib/node/variable.js +102 -0
- package/lib/nonTerminalNode.js +222 -0
- package/lib/nonTerminalNodeMap.js +59 -0
- package/lib/ruleNames.js +114 -0
- package/package.json +5 -4
- package/src/furtle/lexer.js +5 -0
- package/src/furtle/parser.js +12 -0
- package/src/index.js +1 -0
- package/src/node/assignment/array.js +7 -0
- package/src/node/assignment/object.js +7 -0
- package/src/node/assignment/variable.js +7 -0
- package/src/node/assignment.js +7 -0
- package/src/node/assignments/variable.js +7 -0
- package/src/node/assignments.js +7 -0
- package/src/node/comparison.js +7 -0
- package/src/node/declaration.js +7 -0
- package/src/node/every.js +7 -0
- package/src/node/expression.js +7 -0
- package/src/node/expressions.js +7 -0
- package/src/node/label.js +7 -0
- package/src/node/parameter.js +7 -0
- package/src/node/parameters.js +7 -0
- package/src/node/procedure.js +7 -0
- package/src/node/procedureCall.js +7 -0
- package/src/node/query.js +7 -0
- package/src/node/reduce.js +7 -0
- package/src/node/reference.js +7 -0
- package/src/node/returnBlock.js +7 -0
- package/src/node/statement.js +7 -0
- package/src/node/step.js +7 -0
- package/src/node/ternary.js +7 -0
- package/src/node/variable.js +7 -0
- package/src/nonTerminalNode.js +136 -0
- package/src/nonTerminalNodeMap.js +83 -0
- package/src/ruleNames.js +27 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-furtle",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.291",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-furtle",
|
|
7
7
|
"description": "Occam's Furtle language.",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"necessary": "^17.0.9",
|
|
14
|
-
"occam-grammars": "^1.3.
|
|
14
|
+
"occam-grammars": "^1.3.439",
|
|
15
|
+
"occam-parsers": "^23.1.38"
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@swc/core": "1.13.20",
|
|
@@ -19,8 +20,8 @@
|
|
|
19
20
|
"express": "^5.1.0",
|
|
20
21
|
"lively-cli": "^2.0.77",
|
|
21
22
|
"mocha": "^6.0.2",
|
|
22
|
-
"occam-custom-grammars": "^5.0.
|
|
23
|
-
"occam-entities": "^1.0.
|
|
23
|
+
"occam-custom-grammars": "^5.0.1341",
|
|
24
|
+
"occam-entities": "^1.0.445",
|
|
24
25
|
"occam-query": "^4.1.142",
|
|
25
26
|
"watchful-cli": "^1.7.67"
|
|
26
27
|
},
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { FurtleParser as FurtleParserBase } from "occam-grammars";
|
|
4
|
+
|
|
5
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
6
|
+
import NonTerminalNodeMap from "../nonTerminalNodeMap";
|
|
7
|
+
|
|
8
|
+
export default class FurtleParser extends FurtleParserBase {
|
|
9
|
+
static NonTerminalNodeMap = NonTerminalNodeMap;
|
|
10
|
+
|
|
11
|
+
static defaultNonTerminalNode = NonTerminalNode;
|
|
12
|
+
}
|
package/src/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { default as Expressions } from "./element/expressions";
|
|
|
7
7
|
export { default as Log } from "./log";
|
|
8
8
|
export { default as Element } from "./element";
|
|
9
9
|
export { default as FileContext } from "./context/file";
|
|
10
|
+
export { default as NonTerminalNode } from "./nonTerminalNode";
|
|
10
11
|
|
|
11
12
|
export { default as nodeUtilities } from "./utilities/node";
|
|
12
13
|
export { default as queryUtilities } from "./utilities/query";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AssignmentrNode from "../../node/assignment";
|
|
4
|
+
|
|
5
|
+
export default class ArrayAssignmentNode extends AssignmentrNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ArrayAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AssignmentrNode from "../../node/assignment";
|
|
4
|
+
|
|
5
|
+
export default class ObjectAssignmentNode extends AssignmentrNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ObjectAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AssignmentrNode from "../../node/assignment";
|
|
4
|
+
|
|
5
|
+
export default class VariableAssignmentNode extends AssignmentrNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class AssignmentrNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AssignmentrsNode from "../../node/assignment";
|
|
4
|
+
|
|
5
|
+
export default class VariableAssignmentsNode extends AssignmentrsNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableAssignmentsNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class AssignmentrsNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ComparisonNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ComparisonNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class DeclarationNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DeclarationNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class QueryNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(QueryNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ExpressionNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ExpressionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ExpressionsNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ExpressionsNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class LabelNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(LabelNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ParamterNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParamterNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ParamtersNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParamtersNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ProcedureNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ProcedureCallNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureCallNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class QueryNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(QueryNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ReduceNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReduceNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ReferenceNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReferenceNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class ReturnBlockNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReturnBlockNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class StatementNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(StatementNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
package/src/node/step.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class StepNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(StepNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class TernaryNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TernaryNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NonTerminalNode } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
export default class VariableNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import { NonTerminalNode as NonTerminalNodeBase } from "occam-parsers";
|
|
6
|
+
|
|
7
|
+
const { first } = arrayUtilities;
|
|
8
|
+
|
|
9
|
+
export default class NonTerminalNode extends NonTerminalNodeBase {
|
|
10
|
+
getNodeByRuleName(...ruleNames) {
|
|
11
|
+
const node = this.findChildNode((childNode) => {
|
|
12
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
13
|
+
|
|
14
|
+
if (childNodeNonTerminalNode) {
|
|
15
|
+
const nonTerminalNode = childNode, ///
|
|
16
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
17
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
18
|
+
|
|
19
|
+
if (ruleNamesIncludesRuleName) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}) || null;
|
|
24
|
+
|
|
25
|
+
return node;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getNodesByRuleName(...ruleNames) {
|
|
29
|
+
const nodes = this.filterChildNode((childNode) => {
|
|
30
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
31
|
+
|
|
32
|
+
if (childNodeNonTerminalNode) {
|
|
33
|
+
const nonTerminalNode = childNode, ///
|
|
34
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
35
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
36
|
+
|
|
37
|
+
if (ruleNamesIncludesRuleName) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return nodes;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
getLastNodeByRuleName(...ruleNames) {
|
|
47
|
+
let lastNode = null;
|
|
48
|
+
|
|
49
|
+
this.backwardsSomeChildNode((childNode) => {
|
|
50
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
51
|
+
|
|
52
|
+
if (childNodeNonTerminalNode) {
|
|
53
|
+
const nonTerminalNode = childNode, ///
|
|
54
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
55
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
56
|
+
|
|
57
|
+
if (ruleNamesIncludesRuleName) {
|
|
58
|
+
lastNode = childNode; ///
|
|
59
|
+
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return lastNode;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
getFirstNodeByRuleName(...ruleNames) {
|
|
69
|
+
let firstNode = null;
|
|
70
|
+
|
|
71
|
+
this.forwardsSomeChildNode((childNode) => {
|
|
72
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
73
|
+
|
|
74
|
+
if (childNodeNonTerminalNode) {
|
|
75
|
+
const nonTerminalNode = childNode, ///
|
|
76
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
77
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
78
|
+
|
|
79
|
+
if (ruleNamesIncludesRuleName) {
|
|
80
|
+
firstNode = childNode; ///
|
|
81
|
+
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return firstNode;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
getSingularNodeByRuleName(...ruleNames) {
|
|
91
|
+
let singularNode = null;
|
|
92
|
+
|
|
93
|
+
const nodes = this.filterChildNode((childNode) => {
|
|
94
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
95
|
+
|
|
96
|
+
if (childNodeNonTerminalNode) {
|
|
97
|
+
const nonTerminalNode = childNode, ///
|
|
98
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
99
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
100
|
+
|
|
101
|
+
if (ruleNamesIncludesRuleName) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}),
|
|
106
|
+
nodesLength = nodes.length;
|
|
107
|
+
|
|
108
|
+
if (nodesLength === 1) {
|
|
109
|
+
const firstNode = first(nodes);
|
|
110
|
+
|
|
111
|
+
singularNode = firstNode; ///
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return singularNode;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getDescendantNodesByRuleName(...ruleNames) {
|
|
118
|
+
const nodes = this.filterDescendantNode((descendantNode) => {
|
|
119
|
+
const descendantNodeNonTerminalNode = descendantNode.isNonTerminalNode();
|
|
120
|
+
|
|
121
|
+
if (descendantNodeNonTerminalNode) {
|
|
122
|
+
const nonTerminalNode = descendantNode, ///
|
|
123
|
+
ruleName = nonTerminalNode.getRuleName(),
|
|
124
|
+
ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
|
|
125
|
+
|
|
126
|
+
if (ruleNamesIncludesRuleName) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
return nodes;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNodeBase.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
|
|
136
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import StepNode from "./node/step";
|
|
4
|
+
import SomeNode from "./node/some";
|
|
5
|
+
import EveryNode from "./node/every";
|
|
6
|
+
import LabelNode from "./node/label";
|
|
7
|
+
import ErrorNode from "./node/error";
|
|
8
|
+
import QueryNode from "./node/query";
|
|
9
|
+
import BlockNode from "./node/block";
|
|
10
|
+
import ReduceNode from "./node/reduce";
|
|
11
|
+
import TernaryNode from "./node/ternary";
|
|
12
|
+
import VariableNode from "./node/variable";
|
|
13
|
+
import ReferenceNode from "./node/reference";
|
|
14
|
+
import ParameterNode from "./node/parameter";
|
|
15
|
+
import StatementNode from "./node/statement";
|
|
16
|
+
import ProcedureNode from "./node/procedure";
|
|
17
|
+
import ExpressionNode from "./node/expression";
|
|
18
|
+
import ComparisonNode from "./node/comparison";
|
|
19
|
+
import ParametersNode from "./node/parameters";
|
|
20
|
+
import DeclarationNode from "./node/declaration";
|
|
21
|
+
import ExpressionsNode from "./node/expressions";
|
|
22
|
+
import ReturnBlockNode from "./node/returnBlock";
|
|
23
|
+
import ProcedureCallNode from "./node/procedureCall";
|
|
24
|
+
import ArrayAssignmentNode from "./node/assignment/array";
|
|
25
|
+
import ObjectAssignmentNode from "./node/assignment/object";
|
|
26
|
+
import VariableAssignmentNode from "./node/assignment/variable";
|
|
27
|
+
import VariableAssignmentsNode from "./node/assignments/variable";
|
|
28
|
+
|
|
29
|
+
import { STEP_RULE_NAME,
|
|
30
|
+
SOME_RULE_NAME,
|
|
31
|
+
EVERY_RULE_NAME,
|
|
32
|
+
LABEL_RULE_NAME,
|
|
33
|
+
ERROR_RULE_NAME,
|
|
34
|
+
QUERY_RULE_NAME,
|
|
35
|
+
BLOCK_RULE_NAME,
|
|
36
|
+
REDUCE_RULE_NAME,
|
|
37
|
+
TERNARY_RULE_NAME,
|
|
38
|
+
VARIABLE_RULE_NAME,
|
|
39
|
+
REFERENCE_RULE_NAME,
|
|
40
|
+
PARAMETER_RULE_NAME,
|
|
41
|
+
STATEMENT_RULE_NAME,
|
|
42
|
+
PROCEDURE_RULE_NAME,
|
|
43
|
+
EXPRESSION_RULE_NAME,
|
|
44
|
+
COMPARISON_RULE_NAME,
|
|
45
|
+
PARAMETERS_RULE_NAME,
|
|
46
|
+
DECLARATION_RULE_NAME,
|
|
47
|
+
EXPRESSIONS_RULE_NAME,
|
|
48
|
+
RETURN_BLOCK_RULE_NAME,
|
|
49
|
+
PROCEDURE_CALL_RULE_NAME,
|
|
50
|
+
ARRAY_ASSIGNMENT_RULE_NAME,
|
|
51
|
+
OBJECT_ASSIGNMENT_RULE_NAME,
|
|
52
|
+
VARIABLE_ASSIGNMENT_RULE_NAME,
|
|
53
|
+
VARIABLE_ASSIGNMENTS_RULE_NAME } from "./ruleNames";
|
|
54
|
+
|
|
55
|
+
const NonTerminalNodeMap = {
|
|
56
|
+
[STEP_RULE_NAME]: StepNode,
|
|
57
|
+
[SOME_RULE_NAME]: SomeNode,
|
|
58
|
+
[EVERY_RULE_NAME]: EveryNode,
|
|
59
|
+
[LABEL_RULE_NAME]: LabelNode,
|
|
60
|
+
[ERROR_RULE_NAME]: ErrorNode,
|
|
61
|
+
[QUERY_RULE_NAME]: QueryNode,
|
|
62
|
+
[BLOCK_RULE_NAME]: BlockNode,
|
|
63
|
+
[REDUCE_RULE_NAME]: ReduceNode,
|
|
64
|
+
[TERNARY_RULE_NAME]: TernaryNode,
|
|
65
|
+
[VARIABLE_RULE_NAME]: VariableNode,
|
|
66
|
+
[REFERENCE_RULE_NAME]: ReferenceNode,
|
|
67
|
+
[PARAMETER_RULE_NAME]: ParameterNode,
|
|
68
|
+
[STATEMENT_RULE_NAME]: StatementNode,
|
|
69
|
+
[PROCEDURE_RULE_NAME]: ProcedureNode,
|
|
70
|
+
[EXPRESSION_RULE_NAME]: ExpressionNode,
|
|
71
|
+
[COMPARISON_RULE_NAME]: ComparisonNode,
|
|
72
|
+
[PARAMETERS_RULE_NAME]: ParametersNode,
|
|
73
|
+
[DECLARATION_RULE_NAME]: DeclarationNode,
|
|
74
|
+
[EXPRESSIONS_RULE_NAME]: ExpressionsNode,
|
|
75
|
+
[RETURN_BLOCK_RULE_NAME]: ReturnBlockNode,
|
|
76
|
+
[PROCEDURE_CALL_RULE_NAME]: ProcedureCallNode,
|
|
77
|
+
[ARRAY_ASSIGNMENT_RULE_NAME]: ArrayAssignmentNode,
|
|
78
|
+
[OBJECT_ASSIGNMENT_RULE_NAME]: ObjectAssignmentNode,
|
|
79
|
+
[VARIABLE_ASSIGNMENT_RULE_NAME]: VariableAssignmentNode,
|
|
80
|
+
[VARIABLE_ASSIGNMENTS_RULE_NAME]: VariableAssignmentsNode
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export default NonTerminalNodeMap;
|
package/src/ruleNames.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export const STEP_RULE_NAME = "step";
|
|
4
|
+
export const SOME_RULE_NAME = "some";
|
|
5
|
+
export const EVERY_RULE_NAME = "every";
|
|
6
|
+
export const LABEL_RULE_NAME = "label";
|
|
7
|
+
export const ERROR_RULE_NAME = "error";
|
|
8
|
+
export const QUERY_RULE_NAME = "query";
|
|
9
|
+
export const BLOCK_RULE_NAME = "block";
|
|
10
|
+
export const REDUCE_RULE_NAME = "reduce";
|
|
11
|
+
export const TERNARY_RULE_NAME = "ternary";
|
|
12
|
+
export const VARIABLE_RULE_NAME = "variable";
|
|
13
|
+
export const REFERENCE_RULE_NAME = "reference";
|
|
14
|
+
export const PARAMETER_RULE_NAME = "parameter";
|
|
15
|
+
export const STATEMENT_RULE_NAME = "statement";
|
|
16
|
+
export const PROCEDURE_RULE_NAME = "procedure";
|
|
17
|
+
export const EXPRESSION_RULE_NAME = "expression";
|
|
18
|
+
export const COMPARISON_RULE_NAME = "comparison";
|
|
19
|
+
export const PARAMETERS_RULE_NAME = "parameters";
|
|
20
|
+
export const DECLARATION_RULE_NAME = "declaration";
|
|
21
|
+
export const EXPRESSIONS_RULE_NAME = "expressions";
|
|
22
|
+
export const RETURN_BLOCK_RULE_NAME = "returnBlock";
|
|
23
|
+
export const PROCEDURE_CALL_RULE_NAME = "procedureCall";
|
|
24
|
+
export const ARRAY_ASSIGNMENT_RULE_NAME = "arrayAssignment";
|
|
25
|
+
export const OBJECT_ASSIGNMENT_RULE_NAME = "objectAssignment";
|
|
26
|
+
export const VARIABLE_ASSIGNMENT_RULE_NAME = "variableAssignment";
|
|
27
|
+
export const VARIABLE_ASSIGNMENTS_RULE_NAME = "variableAssignments";
|