occam-furtle 2.0.291 → 2.0.293
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/context/file.js +5 -6
- package/lib/element/returnBlock.js +198 -0
- package/lib/node/assignment/array.js +2 -2
- package/lib/node/assignment/object.js +2 -2
- package/lib/node/assignment/variable.js +2 -2
- package/lib/node/assignment.js +9 -4
- package/lib/node/assignments/variable.js +4 -4
- package/lib/node/assignments.js +9 -4
- package/lib/node/comparison.js +9 -4
- package/lib/node/declaration.js +9 -4
- package/lib/node/error.js +107 -0
- package/lib/node/every.js +9 -4
- package/lib/node/expression.js +9 -4
- package/lib/node/expressions.js +9 -4
- package/lib/node/label.js +9 -4
- package/lib/node/parameter.js +9 -4
- package/lib/node/parameters.js +9 -4
- package/lib/node/procedure.js +9 -4
- package/lib/node/procedureCall.js +9 -4
- package/lib/node/query.js +9 -4
- package/lib/node/reduce.js +9 -4
- package/lib/node/reference.js +9 -4
- package/lib/node/returnBlock.js +9 -4
- package/lib/node/some.js +107 -0
- package/lib/node/statement.js +9 -4
- package/lib/node/step.js +9 -4
- package/lib/node/ternary.js +9 -4
- package/lib/node/variable.js +9 -4
- package/lib/nonTerminalNodeMap.js +2 -3
- package/lib/preamble.js +3 -3
- package/lib/ruleNames.js +1 -5
- package/lib/utilities/furtle.js +31 -0
- package/lib/utilities/lexers.js +55 -0
- package/lib/utilities/parsers.js +74 -0
- package/package.json +6 -4
- package/src/context/file.js +1 -6
- package/src/element/{block/return.js → returnBlock.js} +5 -5
- package/src/node/assignment/array.js +1 -1
- package/src/node/assignment/object.js +1 -1
- package/src/node/assignment/variable.js +1 -1
- package/src/node/assignment.js +1 -1
- package/src/node/assignments/variable.js +3 -3
- package/src/node/assignments.js +1 -1
- package/src/node/comparison.js +1 -1
- package/src/node/declaration.js +1 -1
- package/src/node/error.js +7 -0
- package/src/node/every.js +1 -1
- package/src/node/expression.js +1 -1
- package/src/node/expressions.js +1 -1
- package/src/node/label.js +1 -1
- package/src/node/parameter.js +1 -1
- package/src/node/parameters.js +1 -1
- package/src/node/procedure.js +1 -1
- package/src/node/procedureCall.js +1 -1
- package/src/node/query.js +1 -1
- package/src/node/reduce.js +1 -1
- package/src/node/reference.js +1 -1
- package/src/node/returnBlock.js +1 -1
- package/src/node/some.js +7 -0
- package/src/node/statement.js +1 -1
- package/src/node/step.js +1 -1
- package/src/node/ternary.js +1 -1
- package/src/node/variable.js +1 -1
- package/src/nonTerminalNodeMap.js +0 -3
- package/src/preamble.js +1 -1
- package/src/ruleNames.js +0 -1
- package/src/utilities/furtle.js +11 -0
- package/src/utilities/lexers.js +44 -0
- package/src/utilities/parsers.js +70 -0
- package/test/main.js +1 -1
- package/lib/element/block/return.js +0 -198
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import elements from "
|
|
4
|
-
import Exception from "
|
|
5
|
-
import BlockContext from "
|
|
3
|
+
import elements from "../elements";
|
|
4
|
+
import Exception from "../exception";
|
|
5
|
+
import BlockContext from "../context/block";
|
|
6
6
|
|
|
7
|
-
import { define } from "
|
|
8
|
-
import { nodeQuery, nodesQuery } from "
|
|
7
|
+
import { define } from "../elements";
|
|
8
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
9
9
|
|
|
10
10
|
const stepNodesQuery = nodesQuery("/returnBlock/step"),
|
|
11
11
|
nonsenseNodesQuery = nodesQuery("/returnBlock/nonsense"),
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
import AssignmentrNode from "../../node/assignment";
|
|
4
4
|
|
|
5
5
|
export default class ArrayAssignmentNode extends AssignmentrNode {
|
|
6
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return AssignmentrNode.fromRuleNameChildNodesOpacityAndPrecedence(ArrayAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
7
|
}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
import AssignmentrNode from "../../node/assignment";
|
|
4
4
|
|
|
5
5
|
export default class ObjectAssignmentNode extends AssignmentrNode {
|
|
6
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return AssignmentrNode.fromRuleNameChildNodesOpacityAndPrecedence(ObjectAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
7
|
}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
import AssignmentrNode from "../../node/assignment";
|
|
4
4
|
|
|
5
5
|
export default class VariableAssignmentNode extends AssignmentrNode {
|
|
6
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return AssignmentrNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableAssignmentNode, ruleName, childNodes, opacity, precedence); }
|
|
7
7
|
}
|
package/src/node/assignment.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class AssignmentrNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import AssignmentsNode from "../../node/assignment";
|
|
4
4
|
|
|
5
|
-
export default class VariableAssignmentsNode extends
|
|
6
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return
|
|
5
|
+
export default class VariableAssignmentsNode extends AssignmentsNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return AssignmentsNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableAssignmentsNode, ruleName, childNodes, opacity, precedence); }
|
|
7
7
|
}
|
package/src/node/assignments.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class AssignmentrsNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
|
package/src/node/comparison.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ComparisonNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ComparisonNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/declaration.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class DeclarationNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DeclarationNode, ruleName, childNodes, opacity, precedence); }
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
|
+
|
|
5
|
+
export default class ErrorNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ErrorNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
package/src/node/every.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class QueryNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(QueryNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/expression.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ExpressionNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ExpressionNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/expressions.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ExpressionsNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ExpressionsNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/label.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class LabelNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(LabelNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/parameter.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ParamterNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParamterNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/parameters.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ParamtersNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParamtersNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/procedure.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ProcedureNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureNode, ruleName, childNodes, opacity, precedence); }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ProcedureCallNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureCallNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/query.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class QueryNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(QueryNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/reduce.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ReduceNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReduceNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/reference.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ReferenceNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReferenceNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/returnBlock.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class ReturnBlockNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReturnBlockNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/some.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
|
+
|
|
5
|
+
export default class SomeNode extends NonTerminalNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(SomeNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|
package/src/node/statement.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class StatementNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(StatementNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/step.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class StepNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(StepNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/ternary.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class TernaryNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TernaryNode, ruleName, childNodes, opacity, precedence); }
|
package/src/node/variable.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
5
|
export default class VariableNode extends NonTerminalNode {
|
|
6
6
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableNode, ruleName, childNodes, opacity, precedence); }
|
|
@@ -6,7 +6,6 @@ import EveryNode from "./node/every";
|
|
|
6
6
|
import LabelNode from "./node/label";
|
|
7
7
|
import ErrorNode from "./node/error";
|
|
8
8
|
import QueryNode from "./node/query";
|
|
9
|
-
import BlockNode from "./node/block";
|
|
10
9
|
import ReduceNode from "./node/reduce";
|
|
11
10
|
import TernaryNode from "./node/ternary";
|
|
12
11
|
import VariableNode from "./node/variable";
|
|
@@ -32,7 +31,6 @@ import { STEP_RULE_NAME,
|
|
|
32
31
|
LABEL_RULE_NAME,
|
|
33
32
|
ERROR_RULE_NAME,
|
|
34
33
|
QUERY_RULE_NAME,
|
|
35
|
-
BLOCK_RULE_NAME,
|
|
36
34
|
REDUCE_RULE_NAME,
|
|
37
35
|
TERNARY_RULE_NAME,
|
|
38
36
|
VARIABLE_RULE_NAME,
|
|
@@ -59,7 +57,6 @@ const NonTerminalNodeMap = {
|
|
|
59
57
|
[LABEL_RULE_NAME]: LabelNode,
|
|
60
58
|
[ERROR_RULE_NAME]: ErrorNode,
|
|
61
59
|
[QUERY_RULE_NAME]: QueryNode,
|
|
62
|
-
[BLOCK_RULE_NAME]: BlockNode,
|
|
63
60
|
[REDUCE_RULE_NAME]: ReduceNode,
|
|
64
61
|
[TERNARY_RULE_NAME]: TernaryNode,
|
|
65
62
|
[VARIABLE_RULE_NAME]: VariableNode,
|
package/src/preamble.js
CHANGED
|
@@ -17,7 +17,7 @@ import NodesQuery from "./element/query/nodes";
|
|
|
17
17
|
import Comparison from "./element/comparison";
|
|
18
18
|
import Expression from "./element/expression";
|
|
19
19
|
import Expressions from "./element/expressions";
|
|
20
|
-
import ReturnBlock from "./element/
|
|
20
|
+
import ReturnBlock from "./element/returnBlock";
|
|
21
21
|
import ProcedureCall from "./element/procedureCall";
|
|
22
22
|
import NamedParameter from "./element/parameter/named";
|
|
23
23
|
import ArrayAssigment from "./element/assignment/array";
|
package/src/ruleNames.js
CHANGED
|
@@ -6,7 +6,6 @@ export const EVERY_RULE_NAME = "every";
|
|
|
6
6
|
export const LABEL_RULE_NAME = "label";
|
|
7
7
|
export const ERROR_RULE_NAME = "error";
|
|
8
8
|
export const QUERY_RULE_NAME = "query";
|
|
9
|
-
export const BLOCK_RULE_NAME = "block";
|
|
10
9
|
export const REDUCE_RULE_NAME = "reduce";
|
|
11
10
|
export const TERNARY_RULE_NAME = "ternary";
|
|
12
11
|
export const VARIABLE_RULE_NAME = "variable";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import FurtleLexer from "../furtle/Lexer";
|
|
4
|
+
import FurtleParser from "../furtle/Parser";
|
|
5
|
+
|
|
6
|
+
import { furtleLexerFromNothing } from "../utilities/lexers";
|
|
7
|
+
import { furtleParserFromNothing } from "../utilities/parsers";
|
|
8
|
+
|
|
9
|
+
export const furtleLexer = furtleLexerFromNothing(FurtleLexer);
|
|
10
|
+
|
|
11
|
+
export const furtleParser = furtleParserFromNothing(FurtleParser);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { lexerUtilities } from "occam-lexers";
|
|
4
|
+
|
|
5
|
+
import FurtleLexer from "../furtle/lexer";
|
|
6
|
+
|
|
7
|
+
const { lexerFromRules, rulesFromEntries } = lexerUtilities;
|
|
8
|
+
|
|
9
|
+
export function furtleLexerFromNothing(Class) {
|
|
10
|
+
if (Class === undefined) {
|
|
11
|
+
Class = FurtleLexer; ///
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { entries } = FurtleLexer;
|
|
15
|
+
|
|
16
|
+
let rules;
|
|
17
|
+
|
|
18
|
+
rules = rulesFromEntries(entries);
|
|
19
|
+
|
|
20
|
+
const furtleLexer = lexerFromRules(Class, rules);
|
|
21
|
+
|
|
22
|
+
return furtleLexer;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function furtleLexerFromEntries(Class, entries) {
|
|
26
|
+
if (entries === undefined) {
|
|
27
|
+
entries = Class; ///
|
|
28
|
+
|
|
29
|
+
Class = FurtleLexer; ///
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let rules;
|
|
33
|
+
|
|
34
|
+
rules = rulesFromEntries(entries);
|
|
35
|
+
|
|
36
|
+
const furtleLexer = lexerFromRules(Class, rules);
|
|
37
|
+
|
|
38
|
+
return furtleLexer;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export default {
|
|
42
|
+
furtleLexerFromEntries,
|
|
43
|
+
furtleLexerFromNothing
|
|
44
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { parserUtilities } from "occam-parsers";
|
|
4
|
+
import { eliminateLeftRecursion } from "occam-grammar-utilities";
|
|
5
|
+
|
|
6
|
+
import FurtleParser from "../furtle/parser";
|
|
7
|
+
|
|
8
|
+
const { rulesFromBNF, parserFromRules, parserFromRulesAndStartRuleName } = parserUtilities;
|
|
9
|
+
|
|
10
|
+
export function furtleParserFromBNF(Class, bnf) {
|
|
11
|
+
if (bnf === undefined) {
|
|
12
|
+
bnf = Class; ///
|
|
13
|
+
|
|
14
|
+
Class = FurtleParser; ///
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let rules;
|
|
18
|
+
|
|
19
|
+
rules = rulesFromBNF(bnf);
|
|
20
|
+
|
|
21
|
+
rules = eliminateLeftRecursion(rules); ///
|
|
22
|
+
|
|
23
|
+
const furtleParser = parserFromRules(Class, rules);
|
|
24
|
+
|
|
25
|
+
return furtleParser;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function furtleParserFromNothing(Class) {
|
|
29
|
+
if (Class === undefined) {
|
|
30
|
+
Class = FurtleParser; ///
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const { bnf } = FurtleParser;
|
|
34
|
+
|
|
35
|
+
let rules;
|
|
36
|
+
|
|
37
|
+
rules = rulesFromBNF(bnf);
|
|
38
|
+
|
|
39
|
+
rules = eliminateLeftRecursion(rules); ///
|
|
40
|
+
|
|
41
|
+
const furtleParser = parserFromRules(Class, rules);
|
|
42
|
+
|
|
43
|
+
return furtleParser;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function furtleParserFromBNFAndStartRuleName(Class, bnf, startRuleName) {
|
|
47
|
+
if (startRuleName === undefined) {
|
|
48
|
+
startRuleName = bnf; ///
|
|
49
|
+
|
|
50
|
+
bnf = Class; ///
|
|
51
|
+
|
|
52
|
+
Class = FurtleParser; ///
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let rules;
|
|
56
|
+
|
|
57
|
+
rules = rulesFromBNF(bnf);
|
|
58
|
+
|
|
59
|
+
rules = eliminateLeftRecursion(rules); ///
|
|
60
|
+
|
|
61
|
+
const furtleParser = parserFromRulesAndStartRuleName(Class, rules, startRuleName);
|
|
62
|
+
|
|
63
|
+
return furtleParser;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default {
|
|
67
|
+
furtleParserFromBNF,
|
|
68
|
+
furtleParserFromNothing,
|
|
69
|
+
furtleParserFromBNFAndStartRuleName
|
|
70
|
+
};
|
package/test/main.js
CHANGED
|
@@ -9,7 +9,7 @@ const { furtleFileFromNothing } = require("./helpers/furtle"),
|
|
|
9
9
|
{ procedureFromReleaseContext } = require("./helpers/procedure"),
|
|
10
10
|
{ nominalFileContextFromReleaseContext } = require("./helpers/nominal");
|
|
11
11
|
|
|
12
|
-
describe("src/
|
|
12
|
+
describe("src/main", () => {
|
|
13
13
|
let fileContext,
|
|
14
14
|
releaseContext;
|
|
15
15
|
|