occam-verify-cli 0.0.704 → 0.0.706
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/ruleNames.js +1 -13
- package/lib/utilities/array.js +24 -1
- package/lib/utilities/terminalNodes.js +46 -0
- package/lib/verifier/node/termAsConstructor.js +15 -7
- package/lib/verifier/node.js +29 -30
- package/lib/verifier/nodes/statement.js +33 -42
- package/lib/verifier/nodes/term.js +40 -49
- package/lib/verifier/nodes.js +41 -41
- package/lib/verify/givenVariable.js +31 -0
- package/lib/verify/term.js +33 -25
- package/package.json +5 -5
- package/src/ruleNames.js +0 -3
- package/src/utilities/array.js +28 -0
- package/src/utilities/terminalNodes.js +43 -0
- package/src/verifier/node/termAsConstructor.js +4 -5
- package/src/verifier/node.js +24 -25
- package/src/verifier/nodes/statement.js +29 -36
- package/src/verifier/nodes/term.js +43 -49
- package/src/verifier/nodes.js +43 -40
- package/src/verify/givenVariable.js +31 -0
- package/src/verify/term.js +40 -29
- package/lib/verify/termAsGivenVariable.js +0 -36
- package/src/verify/termAsGivenVariable.js +0 -39
package/src/verifier/node.js
CHANGED
|
@@ -32,6 +32,28 @@ export default class NodeVerifier {
|
|
|
32
32
|
return childNodesVerify;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
verifyTerminalNode(terminalNode, ...remainingArguments) {
|
|
36
|
+
let terminalNodeVerified;
|
|
37
|
+
|
|
38
|
+
const verifyAhead = remainingArguments.pop(), ///
|
|
39
|
+
verifiedAhead = verifyAhead(); ///
|
|
40
|
+
|
|
41
|
+
terminalNodeVerified = verifiedAhead; ///
|
|
42
|
+
|
|
43
|
+
return terminalNodeVerified;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
47
|
+
let nonTerminalNodeVerified;
|
|
48
|
+
|
|
49
|
+
const childNodes = nonTerminalNode.getChildNodes(), ///
|
|
50
|
+
childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
|
|
51
|
+
|
|
52
|
+
nonTerminalNodeVerified = childNodesVerify; ///
|
|
53
|
+
|
|
54
|
+
return nonTerminalNodeVerified;
|
|
55
|
+
}
|
|
56
|
+
|
|
35
57
|
verifyChildNodesAhead(index, childNodes, ...remainingArguments) {
|
|
36
58
|
let childNodesVerify;
|
|
37
59
|
|
|
@@ -46,11 +68,10 @@ export default class NodeVerifier {
|
|
|
46
68
|
const childNode = childNodes[index],
|
|
47
69
|
node = childNode, ///
|
|
48
70
|
nodeVerified = this.verifyNode(node, ...remainingArguments, () => {
|
|
49
|
-
index++;
|
|
50
|
-
|
|
51
71
|
remainingArguments.push(verifyAhead);
|
|
52
72
|
|
|
53
|
-
const
|
|
73
|
+
const aheadIndex = index + 1,
|
|
74
|
+
childNodesVerifyAhead = this.verifyChildNodesAhead(aheadIndex, childNodes, ...remainingArguments);
|
|
54
75
|
|
|
55
76
|
return childNodesVerifyAhead;
|
|
56
77
|
});
|
|
@@ -60,26 +81,4 @@ export default class NodeVerifier {
|
|
|
60
81
|
|
|
61
82
|
return childNodesVerify;
|
|
62
83
|
}
|
|
63
|
-
|
|
64
|
-
verifyTerminalNode(terminalNode, ...remainingArguments) {
|
|
65
|
-
let terminalNodeVerified;
|
|
66
|
-
|
|
67
|
-
const verifyAhead = remainingArguments.pop(), ///
|
|
68
|
-
verifiedAhead = verifyAhead(); ///
|
|
69
|
-
|
|
70
|
-
terminalNodeVerified = verifiedAhead; ///
|
|
71
|
-
|
|
72
|
-
return terminalNodeVerified;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
76
|
-
let nonTerminalNodeVerified;
|
|
77
|
-
|
|
78
|
-
const childNodes = nonTerminalNode.getChildNodes(), ///
|
|
79
|
-
childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
|
|
80
|
-
|
|
81
|
-
nonTerminalNodeVerified = childNodesVerify; ///
|
|
82
|
-
|
|
83
|
-
return nonTerminalNodeVerified;
|
|
84
|
-
}
|
|
85
84
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import termNodesVerifier from "../../verifier/nodes/term";
|
|
4
5
|
|
|
5
6
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
import { verifyArgument } from "../../verifier/nodes/term";
|
|
7
7
|
import { STATEMENT_META_TYPE } from "../../metaTypes";
|
|
8
8
|
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
9
9
|
|
|
@@ -26,9 +26,9 @@ class StatementNodesVerifier extends NodesVerifier {
|
|
|
26
26
|
case ARGUMENT_RULE_NAME: {
|
|
27
27
|
const argumentNode = nonTerminalNode, ///
|
|
28
28
|
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
29
|
-
|
|
29
|
+
argumentNodeVerified = termNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
|
|
30
30
|
|
|
31
|
-
nonTerminalNodeVerified =
|
|
31
|
+
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
32
32
|
|
|
33
33
|
break;
|
|
34
34
|
}
|
|
@@ -36,8 +36,7 @@ class StatementNodesVerifier extends NodesVerifier {
|
|
|
36
36
|
case META_ARGUMENT_RULE_NAME: {
|
|
37
37
|
const metaArgumentNode = nonTerminalNode, ///
|
|
38
38
|
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
39
|
-
|
|
40
|
-
metaArgumentNodeVerified = metaArgumentVerified; ///
|
|
39
|
+
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead);
|
|
41
40
|
|
|
42
41
|
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
43
42
|
|
|
@@ -54,47 +53,41 @@ class StatementNodesVerifier extends NodesVerifier {
|
|
|
54
53
|
|
|
55
54
|
return nonTerminalNodeVerified;
|
|
56
55
|
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const statementNodesVerifier = new StatementNodesVerifier();
|
|
60
|
-
|
|
61
|
-
export default statementNodesVerifier;
|
|
62
|
-
|
|
63
|
-
export function verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
|
|
64
|
-
let metaArgumentVerified = false;
|
|
65
56
|
|
|
66
|
-
|
|
57
|
+
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
|
|
58
|
+
let metaArgumentNodeVerified = false;
|
|
67
59
|
|
|
68
|
-
|
|
60
|
+
const metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
69
61
|
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
63
|
+
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
72
64
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
} else {
|
|
76
|
-
if (combinatorMetaTYpeNode === null) {
|
|
77
|
-
const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
78
|
-
|
|
79
|
-
context.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
65
|
+
if (statementNode === null) {
|
|
66
|
+
context.debug(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
80
67
|
} else {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
68
|
+
if (combinatorMetaTYpeNode === null) {
|
|
69
|
+
const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
84
70
|
|
|
85
|
-
|
|
86
|
-
context.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE}' but got '${content}' instead.`, metaArgumentNode);
|
|
71
|
+
context.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
87
72
|
} else {
|
|
88
|
-
const
|
|
73
|
+
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
74
|
+
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
75
|
+
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
76
|
+
|
|
77
|
+
if (!contentStatementMetaType) {
|
|
78
|
+
context.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE}' but got '${content}' instead.`, metaArgumentNode);
|
|
79
|
+
} else {
|
|
80
|
+
const verifiedAhead = verifyAhead();
|
|
89
81
|
|
|
90
|
-
|
|
82
|
+
metaArgumentNodeVerified = verifiedAhead; ///
|
|
83
|
+
}
|
|
91
84
|
}
|
|
92
85
|
}
|
|
93
|
-
}
|
|
94
86
|
|
|
95
|
-
|
|
96
|
-
context.debug(`...verified the '${metaArgumentString}' metaargument.`, metaArgumentNode);
|
|
87
|
+
return metaArgumentNodeVerified;
|
|
97
88
|
}
|
|
98
|
-
|
|
99
|
-
return metaArgumentVerified;
|
|
100
89
|
}
|
|
90
|
+
|
|
91
|
+
const statementNodesVerifier = new StatementNodesVerifier();
|
|
92
|
+
|
|
93
|
+
export default statementNodesVerifier;
|
|
@@ -21,8 +21,7 @@ class TermNodesVerifier extends NodesVerifier {
|
|
|
21
21
|
case ARGUMENT_RULE_NAME: {
|
|
22
22
|
const argumentNode = nonTerminalNode, ///
|
|
23
23
|
constructorArgumentNode = constructorNonTerminalNode, ///
|
|
24
|
-
|
|
25
|
-
argumentNodeVerified = argumentVerified; ///
|
|
24
|
+
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
|
|
26
25
|
|
|
27
26
|
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
28
27
|
|
|
@@ -39,69 +38,64 @@ class TermNodesVerifier extends NodesVerifier {
|
|
|
39
38
|
|
|
40
39
|
return nonTerminalNodeVerified;
|
|
41
40
|
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const termNodesVerifier = new TermNodesVerifier();
|
|
45
|
-
|
|
46
|
-
export default termNodesVerifier;
|
|
47
|
-
|
|
48
|
-
export function verifyArgument(argumentNode, constructorArgumentNode, context, verifyAhead) {
|
|
49
|
-
let argumentVerified = false;
|
|
50
41
|
|
|
51
|
-
|
|
42
|
+
verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead) {
|
|
43
|
+
let argumentNodeVerified = false;
|
|
52
44
|
|
|
53
|
-
|
|
45
|
+
const argumentString = context.nodeAsString(argumentNode);
|
|
54
46
|
|
|
55
|
-
|
|
47
|
+
const typeNode = typeNodeQuery(argumentNode);
|
|
56
48
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
if (typeNode !== null) {
|
|
50
|
+
context.debug(`The '${argumentString}' argument should be a term, not a type.`, argumentNode);
|
|
51
|
+
} else {
|
|
52
|
+
const termNode = termNodeQuery(argumentNode);
|
|
61
53
|
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
if (!argumentNodeVerified) {
|
|
55
|
+
const constructorTermNode = termNodeQuery(constructorArgumentNode);
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
if (constructorTermNode !== null) {
|
|
58
|
+
const node = termNode, ///
|
|
59
|
+
constructorNode = constructorTermNode, ///
|
|
60
|
+
nodeVerified = this.verifyNode(node, constructorNode, context, verifyAhead);
|
|
69
61
|
|
|
70
|
-
|
|
62
|
+
argumentNodeVerified = nodeVerified; ///
|
|
63
|
+
}
|
|
71
64
|
}
|
|
72
|
-
}
|
|
73
65
|
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
if (!argumentNodeVerified) {
|
|
67
|
+
const constructorTypeNode = typeNodeQuery(constructorArgumentNode);
|
|
76
68
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
69
|
+
if (constructorTypeNode !== null) {
|
|
70
|
+
const { verifyTerm } = termNodesVerifier,
|
|
71
|
+
terms = [],
|
|
72
|
+
termVerified = verifyTerm(termNode, terms, context, () => {
|
|
73
|
+
let verifiedAhead = false;
|
|
82
74
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
75
|
+
const constructorTypeName = typeNameFromTypeNode(constructorTypeNode),
|
|
76
|
+
firstTerm = first(terms),
|
|
77
|
+
term = firstTerm, ///
|
|
78
|
+
termType = term.getType(),
|
|
79
|
+
constructorType = context.findTypeByTypeName(constructorTypeName),
|
|
80
|
+
termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(constructorType);
|
|
89
81
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
82
|
+
if (termTypeEqualToOrSubTypeOfType) {
|
|
83
|
+
verifiedAhead = verifyAhead();
|
|
84
|
+
}
|
|
93
85
|
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
return verifiedAhead;
|
|
87
|
+
});
|
|
96
88
|
|
|
97
|
-
|
|
89
|
+
argumentNodeVerified = termVerified; ///
|
|
90
|
+
}
|
|
98
91
|
}
|
|
99
92
|
}
|
|
100
|
-
}
|
|
101
93
|
|
|
102
|
-
|
|
103
|
-
context.debug(`...verified the '${argumentString}' argument.`, argumentNode);
|
|
94
|
+
return argumentNodeVerified;
|
|
104
95
|
}
|
|
105
|
-
|
|
106
|
-
return argumentVerified;
|
|
107
96
|
}
|
|
97
|
+
|
|
98
|
+
const termNodesVerifier = new TermNodesVerifier();
|
|
99
|
+
|
|
100
|
+
export default termNodesVerifier;
|
|
101
|
+
|
package/src/verifier/nodes.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual } from "../utilities/terminalNodes";
|
|
4
|
+
|
|
3
5
|
export default class NodesVerifier {
|
|
4
6
|
verifyNode(nodeA, nodeB, ...remainingArguments) {
|
|
5
7
|
let nodeVerified = false;
|
|
@@ -35,15 +37,51 @@ export default class NodesVerifier {
|
|
|
35
37
|
childNodesBLength = childNodesB.length;
|
|
36
38
|
|
|
37
39
|
if (childNodesALength === childNodesBLength) {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
+
const childTerminalNodeMapA = terminalNodeMapFromNodes(childNodesA),
|
|
41
|
+
childTerminalNodeMapB = terminalNodeMapFromNodes(childNodesB),
|
|
42
|
+
terminalNodeMapsEqual = areTerminalNodeMapsEqual(childTerminalNodeMapA, childTerminalNodeMapB);
|
|
43
|
+
|
|
44
|
+
if (terminalNodeMapsEqual) {
|
|
45
|
+
const index = 0,
|
|
46
|
+
childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodesA, childNodesB, ...remainingArguments);
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
childNodesVerify = childNodesVerifyAhead; ///
|
|
49
|
+
}
|
|
42
50
|
}
|
|
43
51
|
|
|
44
52
|
return childNodesVerify;
|
|
45
53
|
}
|
|
46
54
|
|
|
55
|
+
verifyTerminalNode(terminalNodeA, terminalNodeB, ...remainingArguments) { ///
|
|
56
|
+
let terminalNodeVerified;
|
|
57
|
+
|
|
58
|
+
const verifyAhead = remainingArguments.pop(),
|
|
59
|
+
verifiedAhead = verifyAhead();
|
|
60
|
+
|
|
61
|
+
terminalNodeVerified = verifiedAhead; ///
|
|
62
|
+
|
|
63
|
+
return terminalNodeVerified;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
|
|
67
|
+
let nonTerminalNodeVerified = false;
|
|
68
|
+
|
|
69
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
70
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
71
|
+
|
|
72
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
73
|
+
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
74
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
75
|
+
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
76
|
+
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
77
|
+
childNodesVerify = this.verifyChildNodes(childNodesA, childNodesB, ...remainingArguments);
|
|
78
|
+
|
|
79
|
+
nonTerminalNodeVerified = childNodesVerify; ///
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return nonTerminalNodeVerified;
|
|
83
|
+
}
|
|
84
|
+
|
|
47
85
|
verifyChildNodesAhead(index, childNodesA, childNodesB, ...remainingArguments) {
|
|
48
86
|
let childNodesVerify;
|
|
49
87
|
|
|
@@ -60,11 +98,10 @@ export default class NodesVerifier {
|
|
|
60
98
|
nodeA = childNodeA, ///
|
|
61
99
|
nodeB = childNodeB, ///
|
|
62
100
|
nodeVerified = this.verifyNode(nodeA, nodeB, ...remainingArguments, () => {
|
|
63
|
-
index++;
|
|
64
|
-
|
|
65
101
|
remainingArguments.push(verifyAhead); ///
|
|
66
102
|
|
|
67
|
-
const
|
|
103
|
+
const aheadIndex = index + 1,
|
|
104
|
+
childNodesVerifyAhead = this.verifyChildNodesAhead(aheadIndex, childNodesA, childNodesB, ...remainingArguments);
|
|
68
105
|
|
|
69
106
|
return childNodesVerifyAhead;
|
|
70
107
|
});
|
|
@@ -74,38 +111,4 @@ export default class NodesVerifier {
|
|
|
74
111
|
|
|
75
112
|
return childNodesVerify;
|
|
76
113
|
}
|
|
77
|
-
|
|
78
|
-
verifyTerminalNode(terminalNodeA, terminalNodeB, ...remainingArguments) {
|
|
79
|
-
let terminalNodeVerified = false;
|
|
80
|
-
|
|
81
|
-
const matches = terminalNodeA.match(terminalNodeB);
|
|
82
|
-
|
|
83
|
-
if (matches) {
|
|
84
|
-
const verifyAhead = remainingArguments.pop(),
|
|
85
|
-
verifiedAhead = verifyAhead();
|
|
86
|
-
|
|
87
|
-
terminalNodeVerified = verifiedAhead; ///
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return terminalNodeVerified;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
|
|
94
|
-
let nonTerminalNodeVerified = false;
|
|
95
|
-
|
|
96
|
-
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
97
|
-
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
98
|
-
|
|
99
|
-
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
100
|
-
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
101
|
-
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
102
|
-
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
103
|
-
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
104
|
-
childNodesVerify = this.verifyChildNodes(childNodesA, childNodesB, ...remainingArguments);
|
|
105
|
-
|
|
106
|
-
nonTerminalNodeVerified = childNodesVerify; ///
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return nonTerminalNodeVerified;
|
|
110
|
-
}
|
|
111
114
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export default function verifyGivenVariable(variableNode, variables, context, verifyAhead) {
|
|
4
|
+
let givenVariableVerified = false;
|
|
5
|
+
|
|
6
|
+
const variableString = context.nodeAsString(variableNode);
|
|
7
|
+
|
|
8
|
+
context.trace(`Verifying the '${variableString}' given variable...`, variableNode);
|
|
9
|
+
|
|
10
|
+
const variable = context.findVariableByVariableNode(variableNode);
|
|
11
|
+
|
|
12
|
+
if (variable !== null) {
|
|
13
|
+
let verifiedAhead;
|
|
14
|
+
|
|
15
|
+
variables.push(variable);
|
|
16
|
+
|
|
17
|
+
verifiedAhead = verifyAhead();
|
|
18
|
+
|
|
19
|
+
if (!verifiedAhead) {
|
|
20
|
+
variables.pop();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
givenVariableVerified = verifiedAhead; ///
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (givenVariableVerified) {
|
|
27
|
+
context.debug(`...verified the '${variableString}' given variable.`, variableNode);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return givenVariableVerified;
|
|
31
|
+
}
|
package/src/verify/term.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import Term from "../term";
|
|
4
4
|
import termNodesVerifier from "../verifier/nodes/term";
|
|
5
|
-
import
|
|
5
|
+
import verifyGivenVariable from "../verify/givenVariable";
|
|
6
6
|
|
|
7
7
|
import { first } from "../utilities/array";
|
|
8
|
+
import { nodeQuery } from "../utilities/query";
|
|
9
|
+
|
|
10
|
+
const variableNodeQuery = nodeQuery("/term/variable!");
|
|
8
11
|
|
|
9
12
|
function verifyTerm(termNode, terms, context, verifyAhead) {
|
|
10
13
|
let termVerified;
|
|
@@ -60,53 +63,61 @@ Object.assign(termNodesVerifier, {
|
|
|
60
63
|
export default verifyTerm;
|
|
61
64
|
|
|
62
65
|
function verifyTermAsVariable(termNode, terms, context, verifyAhead) {
|
|
63
|
-
let termVerifiedAsVariable;
|
|
66
|
+
let termVerifiedAsVariable = false;
|
|
64
67
|
|
|
65
|
-
const
|
|
68
|
+
const variableNode = variableNodeQuery(termNode);
|
|
66
69
|
|
|
67
|
-
|
|
70
|
+
if (variableNode !== null) {
|
|
71
|
+
const termString = context.nodeAsString(termNode);
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
termVerifiedAsGivenVariable = verifyTermAsGivenVariable(termNode, variables, context, () => {
|
|
71
|
-
let verifiedAhead;
|
|
73
|
+
context.trace(`Verifying the '${termString}' term as a variable...`, termNode);
|
|
72
74
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
term = Term.fromTermNodeAndType(termNode, type);
|
|
75
|
+
const variables = [],
|
|
76
|
+
givenVariableVerified = verifyGivenVariable(variableNode, variables, context, () => {
|
|
77
|
+
let verifiedAhead;
|
|
77
78
|
|
|
78
|
-
|
|
79
|
+
const firstVariable = first(variables),
|
|
80
|
+
variable = firstVariable, ///
|
|
81
|
+
type = variable.getType(),
|
|
82
|
+
term = Term.fromTermNodeAndType(termNode, type);
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
terms.push(term);
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
terms.pop();
|
|
84
|
-
}
|
|
86
|
+
verifiedAhead = verifyAhead();
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
if (!verifiedAhead) {
|
|
89
|
+
terms.pop();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return verifiedAhead;
|
|
93
|
+
});
|
|
88
94
|
|
|
89
|
-
|
|
95
|
+
termVerifiedAsVariable = givenVariableVerified; ///
|
|
90
96
|
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
if (termVerifiedAsVariable) {
|
|
98
|
+
context.debug(`...verified the '${termString}' term as a variable.`, termNode);
|
|
99
|
+
}
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
return termVerifiedAsVariable;
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
function verifyTermAgainstConstructors(termNode, terms, context, verifyAhead) {
|
|
99
|
-
let termVerifiedAgainstConstructors;
|
|
106
|
+
let termVerifiedAgainstConstructors = false;
|
|
100
107
|
|
|
101
|
-
const
|
|
108
|
+
const variableNode = variableNodeQuery(termNode);
|
|
102
109
|
|
|
103
|
-
|
|
104
|
-
const
|
|
110
|
+
if (variableNode === null) {
|
|
111
|
+
const constructors = context.getConstructors();
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
termVerifiedAgainstConstructors = constructors.some((constructor) => {
|
|
114
|
+
const termVerifiedAgainstConstructor = verifyTermAgainstConstructor(termNode, terms, constructor, context, verifyAhead);
|
|
115
|
+
|
|
116
|
+
if (termVerifiedAgainstConstructor) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
110
121
|
|
|
111
122
|
return termVerifiedAgainstConstructors;
|
|
112
123
|
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return verifyTermAsGivenVariable;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _query = require("../utilities/query");
|
|
12
|
-
var variableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
|
|
13
|
-
function verifyTermAsGivenVariable(termNode, variables, context, verifyAhead) {
|
|
14
|
-
var termVerifiedAsVariable = false;
|
|
15
|
-
var variableNode = variableNodeQuery(termNode);
|
|
16
|
-
if (variableNode !== null) {
|
|
17
|
-
var termString = context.nodeAsString(termNode);
|
|
18
|
-
context.trace("Verifying the '".concat(termString, "' term as a given variable..."), termNode);
|
|
19
|
-
var variable = context.findVariableByVariableNode(variableNode);
|
|
20
|
-
if (variable !== null) {
|
|
21
|
-
var verifiedAhead;
|
|
22
|
-
variables.push(variable);
|
|
23
|
-
verifiedAhead = verifyAhead();
|
|
24
|
-
if (!verifiedAhead) {
|
|
25
|
-
variables.pop();
|
|
26
|
-
}
|
|
27
|
-
termVerifiedAsVariable = verifiedAhead; ///
|
|
28
|
-
}
|
|
29
|
-
if (termVerifiedAsVariable) {
|
|
30
|
-
context.debug("...verified the '".concat(termString, "' term as a given variable."), termNode);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return termVerifiedAsVariable;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGVybUFzR2l2ZW5WYXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCB2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGVybUFzR2l2ZW5WYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRlcm1Ob2RlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBnaXZlbiB2YXJpYWJsZS4uLmAsIHRlcm1Ob2RlKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBsZXQgdmVyaWZpZWRBaGVhZDtcblxuICAgICAgdmFyaWFibGVzLnB1c2godmFyaWFibGUpO1xuXG4gICAgICB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcblxuICAgICAgaWYgKCF2ZXJpZmllZEFoZWFkKSB7XG4gICAgICAgIHZhcmlhYmxlcy5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmaWVkQWhlYWQ7IC8vL1xuICAgIH1cblxuICAgIGlmICh0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBnaXZlbiB2YXJpYWJsZS5gLCB0ZXJtTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZEFzVmFyaWFibGU7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VGVybUFzR2l2ZW5WYXJpYWJsZSIsInZhcmlhYmxlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidGVybU5vZGUiLCJ2YXJpYWJsZXMiLCJjb250ZXh0IiwidmVyaWZ5QWhlYWQiLCJ0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlIiwidmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsInZlcmlmaWVkQWhlYWQiLCJwdXNoIiwicG9wIiwiZGVidWciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBd0JBOzs7cUJBSkU7QUFFMUIsSUFBTUMsb0JBQW9CQyxJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLFNBQVNGLDBCQUEwQkcsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVztJQUN6RixJQUFJQyx5QkFBeUI7SUFFN0IsSUFBTUMsZUFBZVAsa0JBQWtCRTtJQUV2QyxJQUFJSyxpQkFBaUIsTUFBTTtRQUN6QixJQUFNQyxhQUFhSixRQUFRSyxZQUFZLENBQUNQO1FBRXhDRSxRQUFRTSxLQUFLLENBQUMsQUFBQyxrQkFBNEIsT0FBWEYsWUFBVyxrQ0FBZ0NOO1FBRTNFLElBQU1TLFdBQVdQLFFBQVFRLDBCQUEwQixDQUFDTDtRQUVwRCxJQUFJSSxhQUFhLE1BQU07WUFDckIsSUFBSUU7WUFFSlYsVUFBVVcsSUFBSSxDQUFDSDtZQUVmRSxnQkFBZ0JSO1lBRWhCLElBQUksQ0FBQ1EsZUFBZTtnQkFDbEJWLFVBQVVZLEdBQUc7WUFDZjtZQUVBVCx5QkFBeUJPLGVBQWUsR0FBRztRQUM3QztRQUVBLElBQUlQLHdCQUF3QjtZQUMxQkYsUUFBUVksS0FBSyxDQUFDLEFBQUMsb0JBQThCLE9BQVhSLFlBQVcsZ0NBQThCTjtRQUM3RTtJQUNGO0lBRUEsT0FBT0k7QUFDVCJ9
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { nodeQuery } from "../utilities/query";
|
|
4
|
-
|
|
5
|
-
const variableNodeQuery = nodeQuery("/term/variable!");
|
|
6
|
-
|
|
7
|
-
export default function verifyTermAsGivenVariable(termNode, variables, context, verifyAhead) {
|
|
8
|
-
let termVerifiedAsVariable = false;
|
|
9
|
-
|
|
10
|
-
const variableNode = variableNodeQuery(termNode);
|
|
11
|
-
|
|
12
|
-
if (variableNode !== null) {
|
|
13
|
-
const termString = context.nodeAsString(termNode);
|
|
14
|
-
|
|
15
|
-
context.trace(`Verifying the '${termString}' term as a given variable...`, termNode);
|
|
16
|
-
|
|
17
|
-
const variable = context.findVariableByVariableNode(variableNode);
|
|
18
|
-
|
|
19
|
-
if (variable !== null) {
|
|
20
|
-
let verifiedAhead;
|
|
21
|
-
|
|
22
|
-
variables.push(variable);
|
|
23
|
-
|
|
24
|
-
verifiedAhead = verifyAhead();
|
|
25
|
-
|
|
26
|
-
if (!verifiedAhead) {
|
|
27
|
-
variables.pop();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
termVerifiedAsVariable = verifiedAhead; ///
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (termVerifiedAsVariable) {
|
|
34
|
-
context.debug(`...verified the '${termString}' term as a given variable.`, termNode);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return termVerifiedAsVariable;
|
|
39
|
-
}
|