occam-verify-cli 0.0.478 → 0.0.480
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/conclusion.js +113 -29
- package/lib/constants.js +5 -1
- package/lib/equality.js +10 -13
- package/lib/metaSubstitution.js +26 -24
- package/lib/premise.js +149 -38
- package/lib/rule.js +74 -16
- package/lib/ruleNames.js +13 -9
- package/lib/substitution.js +31 -29
- package/lib/type.js +22 -21
- package/lib/utilities/node.js +16 -15
- package/lib/variable.js +12 -19
- package/lib/verify/statement/qualified.js +6 -3
- package/lib/verify/statement.js +13 -12
- package/lib/verify/statementAsEquality.js +139 -0
- package/lib/verify/statementTypeAssertion.js +82 -0
- package/package.json +3 -3
- package/src/conclusion.js +176 -35
- package/src/constants.js +1 -0
- package/src/equality.js +14 -16
- package/src/metaSubstitution.js +33 -29
- package/src/premise.js +236 -50
- package/src/rule.js +96 -16
- package/src/ruleNames.js +3 -2
- package/src/substitution.js +37 -33
- package/src/type.js +26 -20
- package/src/utilities/node.js +13 -13
- package/src/variable.js +10 -16
- package/src/verify/statement/qualified.js +7 -2
- package/src/verify/statement.js +13 -15
- package/src/verify/statementAsEquality.js +146 -0
- package/src/verify/{assertion/type.js → statementTypeAssertion.js} +40 -31
- package/lib/verify/assertion/type.js +0 -78
- package/lib/verify/equality.js +0 -68
- package/src/verify/equality.js +0 -92
|
@@ -0,0 +1,139 @@
|
|
|
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 verifyStatementAsEquality;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _equality = /*#__PURE__*/ _interopRequireDefault(require("../equality"));
|
|
12
|
+
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
|
|
13
|
+
var _term = /*#__PURE__*/ _interopRequireWildcard(require("../verify/term"));
|
|
14
|
+
var _query = require("../utilities/query");
|
|
15
|
+
var _string = require("../utilities/string");
|
|
16
|
+
var _array = require("../utilities/array");
|
|
17
|
+
var _constants = require("../constants");
|
|
18
|
+
function _interopRequireDefault(obj) {
|
|
19
|
+
return obj && obj.__esModule ? obj : {
|
|
20
|
+
default: obj
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
24
|
+
if (typeof WeakMap !== "function") return null;
|
|
25
|
+
var cacheBabelInterop = new WeakMap();
|
|
26
|
+
var cacheNodeInterop = new WeakMap();
|
|
27
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
28
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
29
|
+
})(nodeInterop);
|
|
30
|
+
}
|
|
31
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
32
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
35
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
36
|
+
return {
|
|
37
|
+
default: obj
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
41
|
+
if (cache && cache.has(obj)) {
|
|
42
|
+
return cache.get(obj);
|
|
43
|
+
}
|
|
44
|
+
var newObj = {};
|
|
45
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
46
|
+
for(var key in obj){
|
|
47
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
48
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
49
|
+
if (desc && (desc.get || desc.set)) {
|
|
50
|
+
Object.defineProperty(newObj, key, desc);
|
|
51
|
+
} else {
|
|
52
|
+
newObj[key] = obj[key];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
newObj.default = obj;
|
|
57
|
+
if (cache) {
|
|
58
|
+
cache.set(obj, newObj);
|
|
59
|
+
}
|
|
60
|
+
return newObj;
|
|
61
|
+
}
|
|
62
|
+
var specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
|
|
63
|
+
function verifyStatementAsEquality(statementNode, proofContext) {
|
|
64
|
+
var statementVerifiedAsEquality = false;
|
|
65
|
+
proofContext.begin(statementNode);
|
|
66
|
+
var statementString = (0, _string.nodeAsString)(statementNode);
|
|
67
|
+
proofContext.debug("Verifying the '".concat(statementString, "' statement as an equality..."));
|
|
68
|
+
var specialNode = specialNodeQuery(statementNode);
|
|
69
|
+
if (specialNode !== null) {
|
|
70
|
+
var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
|
|
71
|
+
if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
|
|
72
|
+
var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
|
|
73
|
+
if (leftTermVerified && rightTermVerified) {
|
|
74
|
+
var firstType = (0, _array.first)(types), secondType = (0, _array.second)(types), leftType = firstType, rightType = secondType, leftTermString = (0, _string.nodeAsString)(leftTermNode), rightTermString = (0, _string.nodeAsString)(rightTermNode);
|
|
75
|
+
if (leftType === null && rightType === null) {
|
|
76
|
+
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms are both undefined and therefore the terms cannot be equated."));
|
|
77
|
+
} else if (rightType === null) {
|
|
78
|
+
var type = leftType, termNode = rightTermNode, variable = addVariable(type, termNode, proofContext);
|
|
79
|
+
if (variable !== null) {
|
|
80
|
+
var leftTypeName = leftType.getName();
|
|
81
|
+
proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(leftTypeName, "' type."));
|
|
82
|
+
statementVerifiedAsEquality = true;
|
|
83
|
+
}
|
|
84
|
+
} else if (leftType === null) {
|
|
85
|
+
var type1 = rightType, termNode1 = leftType, variable1 = addVariable(type1, termNode1, proofContext);
|
|
86
|
+
if (variable1 !== null) {
|
|
87
|
+
var rightTypeName = rightType.getName();
|
|
88
|
+
proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(rightTypeName, "' type."));
|
|
89
|
+
statementVerifiedAsEquality = true;
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
var leftTypeMatchesRightType = leftType.match(rightType);
|
|
93
|
+
if (!leftTypeMatchesRightType) {
|
|
94
|
+
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms do not match and therefore the terms cannot be equated."));
|
|
95
|
+
} else {
|
|
96
|
+
var derived = proofContext.isDerived();
|
|
97
|
+
if (!derived) {
|
|
98
|
+
statementVerifiedAsEquality = true;
|
|
99
|
+
} else {
|
|
100
|
+
var equality = _equality.default.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
|
|
101
|
+
statementVerifiedAsEquality = equalityEquates; ///
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (statementVerifiedAsEquality) {
|
|
109
|
+
proofContext.info("Verified the '".concat(statementString, "' equality."));
|
|
110
|
+
}
|
|
111
|
+
statementVerifiedAsEquality ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
|
|
112
|
+
return statementVerifiedAsEquality;
|
|
113
|
+
}
|
|
114
|
+
function equalitiesFromProofSteps(proofSteps) {
|
|
115
|
+
var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
|
|
116
|
+
proofSteps = proofSteps.slice(start); ///
|
|
117
|
+
var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
|
|
118
|
+
var equality = _equality.default.fromProofStep(proofStep);
|
|
119
|
+
if (equality !== null) {
|
|
120
|
+
equalities.push(equality);
|
|
121
|
+
}
|
|
122
|
+
return equalities;
|
|
123
|
+
}, []);
|
|
124
|
+
return equalities;
|
|
125
|
+
}
|
|
126
|
+
function addVariable(type, termNode, proofContext) {
|
|
127
|
+
var variable = null;
|
|
128
|
+
var variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, proofContext);
|
|
129
|
+
if (termVerifiedAsVariable) {
|
|
130
|
+
var firstVariable = (0, _array.first)(variables);
|
|
131
|
+
variable = firstVariable; ///
|
|
132
|
+
var name = variable.getName();
|
|
133
|
+
variable = _variable.default.fromTypeAndName(type, name); ///
|
|
134
|
+
proofContext.addVariable(variable);
|
|
135
|
+
}
|
|
136
|
+
return variable;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50QXNFcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuaW1wb3J0IHZlcmlmeVRlcm0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUgfSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCB7IEVRVUFMU19DSEFSQUNURVIsIE1BWElNVU1fSU5ERVhFU19MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHNwZWNpYWxOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L0BzcGVjaWFsIVwiKSxcbiAgICAgIGxlZnRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90ZXJtWzBdXCIpLFxuICAgICAgcmlnaHRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90ZXJtWzFdXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudE5vZGUsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgY29uc3Qgc3BlY2lhbE5vZGUgPSBzcGVjaWFsTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzcGVjaWFsTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHNwZWNpYWxOb2RlLCAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgIGlmICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBFUVVBTFNfQ0hBUkFDVEVSKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgICAgY29udGV4dCA9IHByb29mQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICByaWdodFRlcm1Ob2RlID0gcmlnaHRUZXJtTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgbGVmdFRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0obGVmdFRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCksXG4gICAgICAgICAgICByaWdodFRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0ocmlnaHRUZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGVmdFRlcm1WZXJpZmllZCAmJiByaWdodFRlcm1WZXJpZmllZCkge1xuICAgICAgICBjb25zdCBmaXJzdFR5cGUgPSBmaXJzdCh0eXBlcyksXG4gICAgICAgICAgICAgIHNlY29uZFR5cGUgPSBzZWNvbmQodHlwZXMpLFxuICAgICAgICAgICAgICBsZWZ0VHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgICAgIHJpZ2h0VHlwZSA9IHNlY29uZFR5cGUsIC8vL1xuICAgICAgICAgICAgICBsZWZ0VGVybVN0cmluZyA9IG5vZGVBc1N0cmluZyhsZWZ0VGVybU5vZGUpLFxuICAgICAgICAgICAgICByaWdodFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcocmlnaHRUZXJtTm9kZSk7XG5cbiAgICAgICAgaWYgKChsZWZ0VHlwZSA9PT0gbnVsbCkgJiYgKHJpZ2h0VHlwZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSB0eXBlcyBvZiB0aGUgJyR7bGVmdFRlcm1TdHJpbmd9JyBhbmQgJyR7cmlnaHRUZXJtU3RyaW5nfScgdGVybXMgYXJlIGJvdGggdW5kZWZpbmVkIGFuZCB0aGVyZWZvcmUgdGhlIHRlcm1zIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBsZWZ0VHlwZSwgIC8vL1xuICAgICAgICAgICAgICAgIHRlcm1Ob2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgdmFyaWFibGUgPSBhZGRWYXJpYWJsZSh0eXBlLCB0ZXJtTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbGVmdFR5cGVOYW1lID0gbGVmdFR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICBwcm9vZkNvbnRleHQuaW5mbyhgVGhlICcke3JpZ2h0VGVybVN0cmluZ30nIHZhcmlhYmxlIGhhcyBiZWVuIGdpdmVuIHRoZSAnJHtsZWZ0VHlwZU5hbWV9JyB0eXBlLmApO1xuXG4gICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsZWZ0VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSByaWdodFR5cGUsICAvLy9cbiAgICAgICAgICAgICAgICB0ZXJtTm9kZSA9IGxlZnRUeXBlLCAvLy9cbiAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IGFkZFZhcmlhYmxlKHR5cGUsIHRlcm1Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodFR5cGVOYW1lID0gcmlnaHRUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcHJvb2ZDb250ZXh0LmluZm8oYFRoZSAnJHtyaWdodFRlcm1TdHJpbmd9JyB2YXJpYWJsZSBoYXMgYmVlbiBnaXZlbiB0aGUgJyR7cmlnaHRUeXBlTmFtZX0nIHR5cGUuYCk7XG5cbiAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSA9IGxlZnRUeXBlLm1hdGNoKHJpZ2h0VHlwZSk7XG5cbiAgICAgICAgICBpZiAoIWxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSkge1xuICAgICAgICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgdHlwZXMgb2YgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zIGRvIG5vdCBtYXRjaCBhbmQgdGhlcmVmb3JlIHRoZSB0ZXJtcyBjYW5ub3QgYmUgZXF1YXRlZC5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgICAgICAgaWYgKCFkZXJpdmVkKSB7XG4gICAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21MZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSksXG4gICAgICAgICAgICAgICAgICAgIHByb29mU3RlcHMgPSBwcm9vZkNvbnRleHQuZ2V0UHJvb2ZTdGVwcygpLFxuICAgICAgICAgICAgICAgICAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzKHByb29mU3RlcHMpLFxuICAgICAgICAgICAgICAgICAgICBlcXVhbGl0eUVxdWF0ZXMgPSBlcXVhbGl0eS5lcXVhdGUoZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSBlcXVhbGl0eUVxdWF0ZXM7ICAvLy9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5KSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgfVxuXG4gIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKHN0YXRlbWVudE5vZGUpIDpcbiAgICAgIHByb29mQ29udGV4dC5oYWx0KHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tUHJvb2ZTdGVwcyhwcm9vZlN0ZXBzKSB7XG4gIGNvbnN0IHN0YXJ0ID0gLU1BWElNVU1fSU5ERVhFU19MRU5HVEg7ICAvLy9cblxuICBwcm9vZlN0ZXBzID0gcHJvb2ZTdGVwcy5zbGljZShzdGFydCk7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXRpZXMgPSBwcm9vZlN0ZXBzLnJlZHVjZSgoZXF1YWxpdGllcywgcHJvb2ZTdGVwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVByb29mU3RlcChwcm9vZlN0ZXApO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBlcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG5cbmZ1bmN0aW9uIGFkZFZhcmlhYmxlKHR5cGUsIHRlcm1Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIHByb29mQ29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFzVmFyaWFibGUpIHtcbiAgICBjb25zdCBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKTtcblxuICAgIHZhcmlhYmxlID0gZmlyc3RWYXJpYWJsZTsgIC8vL1xuXG4gICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpOyAgLy8vXG5cbiAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzcGVjaWFsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGVmdFRlcm1Ob2RlUXVlcnkiLCJyaWdodFRlcm1Ob2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlIiwicHJvb2ZDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiYmVnaW4iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwidHlwZXMiLCJjb250ZXh0IiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtIiwicmlnaHRUZXJtVmVyaWZpZWQiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInNlY29uZFR5cGUiLCJzZWNvbmQiLCJsZWZ0VHlwZSIsInJpZ2h0VHlwZSIsImxlZnRUZXJtU3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwiZXJyb3IiLCJ0eXBlIiwidGVybU5vZGUiLCJ2YXJpYWJsZSIsImFkZFZhcmlhYmxlIiwibGVmdFR5cGVOYW1lIiwiZ2V0TmFtZSIsImluZm8iLCJyaWdodFR5cGVOYW1lIiwibGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlIiwibWF0Y2giLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwiZXF1YWxpdHkiLCJFcXVhbGl0eSIsImZyb21MZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlIiwicHJvb2ZTdGVwcyIsImdldFByb29mU3RlcHMiLCJlcXVhbGl0aWVzIiwiZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzIiwiZXF1YWxpdHlFcXVhdGVzIiwiZXF1YXRlIiwiY29tcGxldGUiLCJoYWx0Iiwic3RhcnQiLCJNQVhJTVVNX0lOREVYRVNfTEVOR1RIIiwic2xpY2UiLCJyZWR1Y2UiLCJwcm9vZlN0ZXAiLCJpbmRleCIsImZyb21Qcm9vZlN0ZXAiLCJwdXNoIiwidmFyaWFibGVzIiwidGVybVZlcmlmaWVkQXNWYXJpYWJsZSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwiZmlyc3RWYXJpYWJsZSIsIm5hbWUiLCJWYXJpYWJsZSIsImZyb21UeXBlQW5kTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7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
|
|
@@ -0,0 +1,82 @@
|
|
|
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 verifyStatementTypeAssertion;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
|
|
12
|
+
var _array = require("../utilities/array");
|
|
13
|
+
var _string = require("../utilities/string");
|
|
14
|
+
var _query = require("../utilities/query");
|
|
15
|
+
var _term = require("../verify/term");
|
|
16
|
+
function _interopRequireDefault(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
|
|
22
|
+
function verifyStatementTypeAssertion(statementNode, proofContext) {
|
|
23
|
+
var typeAssertionVerified = false;
|
|
24
|
+
proofContext.begin(statementNode);
|
|
25
|
+
var statementString = (0, _string.nodeAsString)(statementNode);
|
|
26
|
+
proofContext.debug("Verifying the '".concat(statementString, "' statement type assertion..."));
|
|
27
|
+
var typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
28
|
+
if (typeAssertionNode !== null) {
|
|
29
|
+
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
30
|
+
if (!typePresent) {
|
|
31
|
+
proofContext.error("The ".concat(typeName, " type is not present."));
|
|
32
|
+
} else {
|
|
33
|
+
var context = proofContext, termNode = termNodeQuery(typeAssertionNode), variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
34
|
+
if (termVerifiedAsVariable) {
|
|
35
|
+
var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
|
|
36
|
+
typeAssertionVerified = variableTypeAssertionVerified; ///
|
|
37
|
+
} else {
|
|
38
|
+
var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
|
|
39
|
+
typeAssertionVerified = termTypeAssertionVerified; ///
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (typeAssertionVerified) {
|
|
44
|
+
proofContext.info("Verified the '".concat(statementString, "' statement type assertion."));
|
|
45
|
+
}
|
|
46
|
+
typeAssertionVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
|
|
47
|
+
return typeAssertionVerified;
|
|
48
|
+
}
|
|
49
|
+
function verifyTermTypeAssertion(typeAssertionNode, proofContext) {
|
|
50
|
+
var termTypeAssertionVerified = false;
|
|
51
|
+
var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
|
|
52
|
+
if (termVerifiedAgainstConstructors) {
|
|
53
|
+
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, assertedTypeEqualToOrSubTypeOfTermType = assertedType.isEqualToOrSubTypeOf(termType);
|
|
54
|
+
if (!assertedTypeEqualToOrSubTypeOfTermType) {
|
|
55
|
+
var termString = (0, _string.nodeAsString)(termNode);
|
|
56
|
+
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
|
|
57
|
+
} else {
|
|
58
|
+
termTypeAssertionVerified = true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return termTypeAssertionVerified;
|
|
62
|
+
}
|
|
63
|
+
function verifyVariableTypeAssertion(typeAssertionNode, proofContext) {
|
|
64
|
+
var variableTypeAssertionVerified = false;
|
|
65
|
+
var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode);
|
|
66
|
+
(0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
67
|
+
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstVariable = (0, _array.first)(variables), variable = firstVariable, variableName = variable.getName(), variableType = variable.getType();
|
|
68
|
+
var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
|
|
69
|
+
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
70
|
+
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
|
|
71
|
+
} else {
|
|
72
|
+
var derived = proofContext.isDerived();
|
|
73
|
+
if (!derived) {
|
|
74
|
+
var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
|
|
75
|
+
proofContext.addVariable(variable1);
|
|
76
|
+
}
|
|
77
|
+
variableTypeAssertionVerified = true;
|
|
78
|
+
}
|
|
79
|
+
return variableTypeAssertionVerified;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50VHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUsIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZUFzc2VydGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50VHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gcHJvb2ZDb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlICR7dHlwZU5hbWV9IHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgIHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7ICAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZUFzc2VydGlvblZlcmlmaWVkKSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZXMgPSBbXSxcbiAgICAgICAgY29udGV4dCA9IHByb29mQ29udGV4dCwgLy8vXG4gICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSB2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gIGlmICh0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgICBhc3NlcnRlZFR5cGVOYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBhc3NlcnRlZFR5cGUgPSBwcm9vZkNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKGFzc2VydGVkVHlwZU5hbWUpLFxuICAgICAgICAgIGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICB0ZXJtVHlwZSA9IGZpcnN0VHlwZSxcbiAgICAgICAgICBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSA9IGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0ZXJtVHlwZSk7XG5cbiAgICBpZiAoIWFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gbm9kZUFzU3RyaW5nKHRlcm1Ob2RlKTtcblxuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdWItdHlwZSBvZiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgYXNzZXJ0ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgIGZpcnN0VmFyaWFibGUgPSBmaXJzdCh2YXJpYWJsZXMpLFxuICAgICAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGUsIC8vL1xuICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZS5nZXROYW1lKCksXG4gICAgICAgIHZhcmlhYmxlVHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICBjb25zdCBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSAodmFyaWFibGVUeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHZhcmlhYmxlVHlwZSk7XG5cbiAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUpIHtcbiAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1Yi10eXBlIG9mIHRoZSAnJHt2YXJpYWJsZU5hbWV9JyB2YXJpYWJsZSB0eXBlLmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBwcm9vZkNvbnRleHQuaXNEZXJpdmVkKCk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBhc3NlcnRlZFR5cGUsICAvLy9cbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpO1xuXG4gICAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICAgIH1cblxuICAgIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsInByb29mQ29udGV4dCIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsImJlZ2luIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJlcnJvciIsImNvbnRleHQiLCJ0ZXJtTm9kZSIsInZhcmlhYmxlcyIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQXNWYXJpYWJsZSIsInZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsInR5cGVzIiwidGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyIsInZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIiwiYXNzZXJ0ZWRUeXBlTmFtZSIsImFzc2VydGVkVHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwidGVybVN0cmluZyIsImZpcnN0VmFyaWFibGUiLCJ2YXJpYWJsZSIsInZhcmlhYmxlTmFtZSIsImdldE5hbWUiLCJ2YXJpYWJsZVR5cGUiLCJnZXRUeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInR5cGUiLCJuYW1lIiwiVmFyaWFibGUiLCJmcm9tVHlwZUFuZE5hbWUiLCJhZGRWYXJpYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUF3QkE7Ozs2REFYSDtxQkFFQztzQkFDTztxQkFDbUI7b0JBQ29COzs7Ozs7QUFFcEUsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLHdCQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLHdCQUMxQkUseUJBQXlCRixJQUFBQSxnQkFBUyxFQUFDO0FBRTFCLFNBQVNGLDZCQUE2QkssYUFBYSxFQUFFQyxZQUFZLEVBQUU7SUFDaEYsSUFBSUMsd0JBQXdCLEtBQUs7SUFFakNELGFBQWFFLEtBQUssQ0FBQ0g7SUFFbkIsSUFBTUksa0JBQWtCQyxJQUFBQSxvQkFBWSxFQUFDTDtJQUVyQ0MsYUFBYUssS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCRixpQkFBZ0I7SUFFckQsSUFBTUcsb0JBQW9CUix1QkFBdUJDO0lBRWpELElBQUlPLHNCQUFzQixJQUFJLEVBQUU7UUFDOUIsSUFBTUMsV0FBV1YsY0FBY1Msb0JBQ3pCRSxXQUFXQyxJQUFBQSwyQkFBb0IsRUFBQ0YsV0FDaENHLGNBQWNW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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.480",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.21",
|
|
14
14
|
"necessary": "^11.2.1",
|
|
15
|
-
"occam-custom-grammars": "^5.0.
|
|
15
|
+
"occam-custom-grammars": "^5.0.376",
|
|
16
16
|
"occam-dom": "^3.1.1",
|
|
17
|
-
"occam-file-system": "^5.0.
|
|
17
|
+
"occam-file-system": "^5.0.135",
|
|
18
18
|
"occam-grammar-utilities": "^7.0.66"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
package/src/conclusion.js
CHANGED
|
@@ -4,7 +4,7 @@ import { first } from "./utilities/array";
|
|
|
4
4
|
import { nodeAsString } from "./utilities/string";
|
|
5
5
|
import { metavariableNameFromMetavariableNode } from "./utilities/query";
|
|
6
6
|
import { metastatementNodeFromMetastatementString } from "./utilities/string";
|
|
7
|
-
import {
|
|
7
|
+
import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "./ruleNames";
|
|
8
8
|
|
|
9
9
|
export default class Conclusion {
|
|
10
10
|
constructor(metastatementNode) {
|
|
@@ -15,10 +15,19 @@ export default class Conclusion {
|
|
|
15
15
|
return this.metastatementNode;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
matchStatementNode(statementNode, substitutions) {
|
|
19
|
+
const nonTerminalNode = statementNode, ///
|
|
20
|
+
conclusionNonTerminalNode = this.metastatementNode, ///
|
|
21
|
+
conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions),
|
|
22
|
+
statementNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
23
|
+
|
|
24
|
+
return statementNodeMatches;
|
|
25
|
+
}
|
|
26
|
+
|
|
18
27
|
matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
19
28
|
const nonTerminalNode = metastatementNode, ///
|
|
20
29
|
conclusionNonTerminalNode = this.metastatementNode, ///
|
|
21
|
-
conclusionNonTerminalNodeMatches =
|
|
30
|
+
conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
|
|
22
31
|
metastatementNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
23
32
|
|
|
24
33
|
return metastatementNodeMatches;
|
|
@@ -50,7 +59,7 @@ export default class Conclusion {
|
|
|
50
59
|
}
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
function matchConclusionNode(conclusionNode, node,
|
|
62
|
+
function matchConclusionNode(conclusionNode, node, substitutions) {
|
|
54
63
|
let conclusionNodeMatches = false;
|
|
55
64
|
|
|
56
65
|
const nodeTerminalNode = node.isTerminalNode(),
|
|
@@ -60,13 +69,13 @@ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
|
|
|
60
69
|
if (nodeTerminalNode) {
|
|
61
70
|
const terminalNode = node, ///
|
|
62
71
|
conclusionTerminalNode = conclusionNode, ///
|
|
63
|
-
conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode,
|
|
72
|
+
conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions);
|
|
64
73
|
|
|
65
74
|
conclusionNodeMatches = conclusionTerminalNodeMatches; ///
|
|
66
75
|
} else {
|
|
67
76
|
const nonTerminalNode = node, ///
|
|
68
77
|
conclusionNonTerminalNode = conclusionNode, ///
|
|
69
|
-
conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode,
|
|
78
|
+
conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
|
|
70
79
|
|
|
71
80
|
conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
72
81
|
}
|
|
@@ -76,13 +85,13 @@ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
|
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
79
|
-
let
|
|
88
|
+
let conclusionNodesMatch = false;
|
|
80
89
|
|
|
81
90
|
const nodesLength = nodes.length,
|
|
82
91
|
conclusionNodesLength = conclusionNodes.length;
|
|
83
92
|
|
|
84
93
|
if (nodesLength === conclusionNodesLength) {
|
|
85
|
-
|
|
94
|
+
conclusionNodesMatch = nodes.every((node, index) => {
|
|
86
95
|
const conclusionNode = conclusionNodes[index],
|
|
87
96
|
conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
|
|
88
97
|
|
|
@@ -92,51 +101,165 @@ function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
|
92
101
|
});
|
|
93
102
|
}
|
|
94
103
|
|
|
95
|
-
return
|
|
104
|
+
return conclusionNodesMatch;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions) {
|
|
108
|
+
const matches = conclusionTerminalNode.match(terminalNode),
|
|
109
|
+
conclusionTerminalNodeMatches = matches; ///
|
|
110
|
+
|
|
111
|
+
return conclusionTerminalNodeMatches;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions) {
|
|
115
|
+
let conclusionNonTerminalNodeMatches = false;
|
|
116
|
+
|
|
117
|
+
const ruleName = nonTerminalNode.getRuleName(),
|
|
118
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
119
|
+
conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
|
|
120
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
121
|
+
nodes = childNodes, ///
|
|
122
|
+
conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
|
|
123
|
+
ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
|
|
124
|
+
conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
|
|
125
|
+
|
|
126
|
+
if (ruleNameStatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
|
|
127
|
+
const statementNode = nonTerminalNode, ///
|
|
128
|
+
conclusionMetastatementNode = conclusionNonTerminalNode, ///
|
|
129
|
+
conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions);
|
|
130
|
+
|
|
131
|
+
if (conclusionMetastatementNodeMatches) {
|
|
132
|
+
conclusionNonTerminalNodeMatches = true; ///
|
|
133
|
+
} else {
|
|
134
|
+
const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
|
|
135
|
+
|
|
136
|
+
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
137
|
+
}
|
|
138
|
+
} else if (ruleName === conclusionNonTerminalNodeRuleName) {
|
|
139
|
+
const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
|
|
140
|
+
|
|
141
|
+
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return conclusionNonTerminalNodeMatches;
|
|
96
145
|
}
|
|
97
146
|
|
|
98
|
-
function
|
|
99
|
-
let
|
|
147
|
+
function matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions) {
|
|
148
|
+
let conclusionMetavariableNodeMatches = true;
|
|
100
149
|
|
|
101
150
|
const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
|
|
102
|
-
|
|
103
|
-
const metavariableName =
|
|
151
|
+
substitution = substitutions.find((substitution) => {
|
|
152
|
+
const metavariableName = substitution.getMetavariableName();
|
|
104
153
|
|
|
105
154
|
if (metavariableName === conclusionMetavariableName) {
|
|
106
155
|
return true;
|
|
107
156
|
}
|
|
108
157
|
}) || null;
|
|
109
158
|
|
|
110
|
-
if (
|
|
111
|
-
const
|
|
159
|
+
if (substitution !== null) {
|
|
160
|
+
const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
|
|
161
|
+
|
|
162
|
+
conclusionMetavariableNodeMatches = substitutionNodesMatch; ///
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return conclusionMetavariableNodeMatches;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions) {
|
|
169
|
+
let conclusionMetastatementNodeMatches = false;
|
|
170
|
+
|
|
171
|
+
const conclusionNonTerminalNode = conclusionMetastatementNode, ///
|
|
172
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
173
|
+
conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
|
|
174
|
+
|
|
175
|
+
if (conclusionNonTerminalNodeChildNodesLength === 1) {
|
|
176
|
+
const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
|
|
177
|
+
conclusionChildNode = firstConclusionChildNode, ///
|
|
178
|
+
conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
|
|
179
|
+
|
|
180
|
+
if (conclusionChildNodeNonTerminalNode) {
|
|
181
|
+
const conclusionNonTerminalChildNode = conclusionChildNode, ///
|
|
182
|
+
conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
|
|
183
|
+
conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
|
|
184
|
+
|
|
185
|
+
if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
186
|
+
const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
|
|
187
|
+
conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions);
|
|
188
|
+
|
|
189
|
+
conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return conclusionMetastatementNodeMatches;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function metaMatchConclusionNode(conclusionNode, node, metaSubstitutions) {
|
|
198
|
+
let conclusionNodeMatches = false;
|
|
199
|
+
|
|
200
|
+
const nodeTerminalNode = node.isTerminalNode(),
|
|
201
|
+
ruleNodeTerminalNode = conclusionNode.isTerminalNode();
|
|
202
|
+
|
|
203
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
204
|
+
if (nodeTerminalNode) {
|
|
205
|
+
const terminalNode = node, ///
|
|
206
|
+
conclusionTerminalNode = conclusionNode, ///
|
|
207
|
+
conclusionTerminalNodeMatches = metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
|
|
208
|
+
|
|
209
|
+
conclusionNodeMatches = conclusionTerminalNodeMatches; ///
|
|
210
|
+
} else {
|
|
211
|
+
const nonTerminalNode = node, ///
|
|
212
|
+
conclusionNonTerminalNode = conclusionNode, ///
|
|
213
|
+
conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
214
|
+
|
|
215
|
+
conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return conclusionNodeMatches;
|
|
220
|
+
}
|
|
112
221
|
|
|
113
|
-
|
|
222
|
+
function metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
223
|
+
let conclusionNodesMatch = false;
|
|
224
|
+
|
|
225
|
+
const nodesLength = nodes.length,
|
|
226
|
+
conclusionNodesLength = conclusionNodes.length;
|
|
227
|
+
|
|
228
|
+
if (nodesLength === conclusionNodesLength) {
|
|
229
|
+
conclusionNodesMatch = nodes.every((node, index) => {
|
|
230
|
+
const conclusionNode = conclusionNodes[index],
|
|
231
|
+
conclusionNodeMatches = metaMatchConclusionNode(conclusionNode, node, metaSubstitutions);
|
|
232
|
+
|
|
233
|
+
if (conclusionNodeMatches) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
});
|
|
114
237
|
}
|
|
115
238
|
|
|
116
|
-
return
|
|
239
|
+
return conclusionNodesMatch;
|
|
117
240
|
}
|
|
118
241
|
|
|
119
|
-
function
|
|
242
|
+
function metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
|
|
120
243
|
const matches = conclusionTerminalNode.match(terminalNode),
|
|
121
244
|
conclusionTerminalNodeMatches = matches; ///
|
|
122
245
|
|
|
123
246
|
return conclusionTerminalNodeMatches;
|
|
124
247
|
}
|
|
125
248
|
|
|
126
|
-
function
|
|
249
|
+
function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
127
250
|
let conclusionNonTerminalNodeMatches = false;
|
|
128
251
|
|
|
129
252
|
const ruleName = nonTerminalNode.getRuleName(),
|
|
130
|
-
|
|
253
|
+
conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName();
|
|
131
254
|
|
|
132
|
-
if (ruleName ===
|
|
255
|
+
if (ruleName === conclusionNonTerminalNodeRuleName) {
|
|
133
256
|
const childNodes = nonTerminalNode.getChildNodes(),
|
|
134
|
-
|
|
257
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
135
258
|
nodes = childNodes, ///
|
|
136
|
-
conclusionNodes =
|
|
137
|
-
|
|
259
|
+
conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
|
|
260
|
+
conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
|
|
138
261
|
|
|
139
|
-
conclusionNonTerminalNodeMatches =
|
|
262
|
+
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
140
263
|
|
|
141
264
|
if (!conclusionNonTerminalNodeMatches) {
|
|
142
265
|
const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
|
|
@@ -144,7 +267,7 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
|
|
|
144
267
|
if (ruleNameMetastatementRuleName) {
|
|
145
268
|
const metastatementNode = nonTerminalNode, ///
|
|
146
269
|
conclusionMetastatementNode = conclusionNonTerminalNode, ///
|
|
147
|
-
conclusionMetastatementNodeMatches =
|
|
270
|
+
conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions);
|
|
148
271
|
|
|
149
272
|
conclusionNonTerminalNodeMatches = conclusionMetastatementNodeMatches; ///
|
|
150
273
|
}
|
|
@@ -154,15 +277,36 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
|
|
|
154
277
|
return conclusionNonTerminalNodeMatches;
|
|
155
278
|
}
|
|
156
279
|
|
|
157
|
-
function
|
|
280
|
+
function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions) {
|
|
281
|
+
let conclusionMetavariableNodeMatches = true;
|
|
282
|
+
|
|
283
|
+
const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
|
|
284
|
+
metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
|
|
285
|
+
const metavariableName = metaSubstitution.getMetavariableName();
|
|
286
|
+
|
|
287
|
+
if (metavariableName === conclusionMetavariableName) {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
}) || null;
|
|
291
|
+
|
|
292
|
+
if (metaSubstitution !== null) {
|
|
293
|
+
const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
|
|
294
|
+
|
|
295
|
+
conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return conclusionMetavariableNodeMatches;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
158
302
|
let conclusionMetastatementNodeMatches = false;
|
|
159
303
|
|
|
160
304
|
const conclusionNonTerminalNode = conclusionMetastatementNode, ///
|
|
161
|
-
|
|
162
|
-
|
|
305
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
306
|
+
conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
|
|
163
307
|
|
|
164
|
-
if (
|
|
165
|
-
const firstConclusionChildNode = first(
|
|
308
|
+
if (conclusionNonTerminalNodeChildNodesLength === 1) {
|
|
309
|
+
const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
|
|
166
310
|
conclusionChildNode = firstConclusionChildNode, ///
|
|
167
311
|
conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
|
|
168
312
|
|
|
@@ -173,12 +317,9 @@ function matchConclusionMetastatementNode(conclusionMetastatementNode, metastate
|
|
|
173
317
|
|
|
174
318
|
if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
175
319
|
const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
|
|
176
|
-
|
|
177
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
178
|
-
nodes = childNodes, ///
|
|
179
|
-
conclusionMetaVariableMatches = matchConclusionMetavariable(conclusionMetavariableNode, nodes, metaSubstitutions);
|
|
320
|
+
conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions);
|
|
180
321
|
|
|
181
|
-
conclusionMetastatementNodeMatches =
|
|
322
|
+
conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
|
|
182
323
|
}
|
|
183
324
|
}
|
|
184
325
|
}
|
package/src/constants.js
CHANGED
|
@@ -7,6 +7,7 @@ export const BOOLEAN = "boolean";
|
|
|
7
7
|
export const EMPTY_STRING = "";
|
|
8
8
|
export const LEFT_BRACKET = "(";
|
|
9
9
|
export const RIGHT_BRACKET = ")";
|
|
10
|
+
export const EQUALS_CHARACTER = "=";
|
|
10
11
|
export const MAXIMUM_INDEXES_LENGTH = 10;
|
|
11
12
|
export const MAXIMUM_PERMUTATION_LENGTH = 5;
|
|
12
13
|
export const BRACKETED_CHILD_NODES_LENGTH = 3;
|