bit2 0.0.1
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/dist/bit2.d.ts +229 -0
- package/dist/bit2.js +1 -0
- package/dist/src/bx/biEval.d.ts +6 -0
- package/dist/src/bx/biEval.js +59 -0
- package/dist/src/bx/biEval.js.map +1 -0
- package/dist/src/common/Exp.d.ts +53 -0
- package/dist/src/common/Exp.js +44 -0
- package/dist/src/common/Exp.js.map +1 -0
- package/dist/src/common/PrettyPrint.d.ts +4 -0
- package/dist/src/common/PrettyPrint.js +32 -0
- package/dist/src/common/PrettyPrint.js.map +1 -0
- package/dist/src/common/Print.d.ts +3 -0
- package/dist/src/common/Print.js +73 -0
- package/dist/src/common/Print.js.map +1 -0
- package/dist/src/core/AST.d.ts +92 -0
- package/dist/src/core/AST.js +47 -0
- package/dist/src/core/AST.js.map +1 -0
- package/dist/src/core/PrettyPrint.d.ts +2 -0
- package/dist/src/core/PrettyPrint.js +64 -0
- package/dist/src/core/PrettyPrint.js.map +1 -0
- package/dist/src/core/Print.d.ts +3 -0
- package/dist/src/core/Print.js +77 -0
- package/dist/src/core/Print.js.map +1 -0
- package/dist/src/fuse/Fuse.d.ts +23 -0
- package/dist/src/fuse/Fuse.js +1436 -0
- package/dist/src/fuse/Fuse.js.map +1 -0
- package/dist/src/fuse/Print.d.ts +2 -0
- package/dist/src/fuse/Print.js +22 -0
- package/dist/src/fuse/Print.js.map +1 -0
- package/dist/src/fuse/Update.d.ts +19 -0
- package/dist/src/fuse/Update.js +3 -0
- package/dist/src/fuse/Update.js.map +1 -0
- package/dist/src/lambda/AST.d.ts +23 -0
- package/dist/src/lambda/AST.js +3 -0
- package/dist/src/lambda/AST.js.map +1 -0
- package/dist/src/lambda/Evaluation.d.ts +4 -0
- package/dist/src/lambda/Evaluation.js +98 -0
- package/dist/src/lambda/Evaluation.js.map +1 -0
- package/dist/src/lambda/Print.d.ts +2 -0
- package/dist/src/lambda/Print.js +31 -0
- package/dist/src/lambda/Print.js.map +1 -0
- package/dist/src/lambdalize/lambdalize.d.ts +3 -0
- package/dist/src/lambdalize/lambdalize.js +94 -0
- package/dist/src/lambdalize/lambdalize.js.map +1 -0
- package/dist/src/lambdalize/unLambdalize.d.ts +3 -0
- package/dist/src/lambdalize/unLambdalize.js +59 -0
- package/dist/src/lambdalize/unLambdalize.js.map +1 -0
- package/dist/src/partial/AST.d.ts +86 -0
- package/dist/src/partial/AST.js +3 -0
- package/dist/src/partial/AST.js.map +1 -0
- package/dist/src/partial/Print.d.ts +6 -0
- package/dist/src/partial/Print.js +93 -0
- package/dist/src/partial/Print.js.map +1 -0
- package/dist/src/partialEval/peval.d.ts +11 -0
- package/dist/src/partialEval/peval.js +322 -0
- package/dist/src/partialEval/peval.js.map +1 -0
- package/dist/src/partialEval/unpeval.d.ts +4 -0
- package/dist/src/partialEval/unpeval.js +360 -0
- package/dist/src/partialEval/unpeval.js.map +1 -0
- package/dist/src/surface/AST.d.ts +57 -0
- package/dist/src/surface/AST.js +3 -0
- package/dist/src/surface/AST.js.map +1 -0
- package/dist/src/surface/Parser.d.ts +4 -0
- package/dist/src/surface/Parser.js +314 -0
- package/dist/src/surface/Parser.js.map +1 -0
- package/dist/src/translate/Translate.d.ts +3 -0
- package/dist/src/translate/Translate.js +91 -0
- package/dist/src/translate/Translate.js.map +1 -0
- package/dist/src/utils/Utils.d.ts +2 -0
- package/dist/src/utils/Utils.js +7 -0
- package/dist/src/utils/Utils.js.map +1 -0
- package/dist/test/bx/biEval.test.d.ts +1 -0
- package/dist/test/bx/biEval.test.js +41 -0
- package/dist/test/bx/biEval.test.js.map +1 -0
- package/dist/test/bx/test.d.ts +1 -0
- package/dist/test/bx/test.js +29 -0
- package/dist/test/bx/test.js.map +1 -0
- package/dist/test/core/0.simple.test.d.ts +4 -0
- package/dist/test/core/0.simple.test.js +68 -0
- package/dist/test/core/0.simple.test.js.map +1 -0
- package/dist/test/core/1.core.test.d.ts +2 -0
- package/dist/test/core/1.core.test.js +30 -0
- package/dist/test/core/1.core.test.js.map +1 -0
- package/dist/test/core/core.test.d.ts +1 -0
- package/dist/test/core/core.test.js +28 -0
- package/dist/test/core/core.test.js.map +1 -0
- package/dist/test/fuse/branchnop.test.d.ts +1 -0
- package/dist/test/fuse/branchnop.test.js +47 -0
- package/dist/test/fuse/branchnop.test.js.map +1 -0
- package/dist/test/fuse/bulk.test.d.ts +1 -0
- package/dist/test/fuse/bulk.test.js +111 -0
- package/dist/test/fuse/bulk.test.js.map +1 -0
- package/dist/test/fuse/const.test.d.ts +1 -0
- package/dist/test/fuse/const.test.js +118 -0
- package/dist/test/fuse/const.test.js.map +1 -0
- package/dist/test/fuse/exp.test.d.ts +1 -0
- package/dist/test/fuse/exp.test.js +225 -0
- package/dist/test/fuse/exp.test.js.map +1 -0
- package/dist/test/fuse/lambda.test.d.ts +1 -0
- package/dist/test/fuse/lambda.test.js +139 -0
- package/dist/test/fuse/lambda.test.js.map +1 -0
- package/dist/test/fuse/loop.test.d.ts +1 -0
- package/dist/test/fuse/loop.test.js +39 -0
- package/dist/test/fuse/loop.test.js.map +1 -0
- package/dist/test/fuse/seq.test.d.ts +1 -0
- package/dist/test/fuse/seq.test.js +64 -0
- package/dist/test/fuse/seq.test.js.map +1 -0
- package/dist/test/fuse/space.test.d.ts +1 -0
- package/dist/test/fuse/space.test.js +136 -0
- package/dist/test/fuse/space.test.js.map +1 -0
- package/dist/test/lambda/evaluation.test.d.ts +1 -0
- package/dist/test/lambda/evaluation.test.js +24 -0
- package/dist/test/lambda/evaluation.test.js.map +1 -0
- package/dist/test/lambda/lambda.test.d.ts +1 -0
- package/dist/test/lambda/lambda.test.js +45 -0
- package/dist/test/lambda/lambda.test.js.map +1 -0
- package/dist/test/lambdalize/lambdalize.test.d.ts +1 -0
- package/dist/test/lambdalize/lambdalize.test.js +23 -0
- package/dist/test/lambdalize/lambdalize.test.js.map +1 -0
- package/dist/test/lambdalize/unLambdalize.test.d.ts +1 -0
- package/dist/test/lambdalize/unLambdalize.test.js +35 -0
- package/dist/test/lambdalize/unLambdalize.test.js.map +1 -0
- package/dist/test/partial/partial.test.d.ts +1 -0
- package/dist/test/partial/partial.test.js +35 -0
- package/dist/test/partial/partial.test.js.map +1 -0
- package/dist/test/partialEval/peval.test.d.ts +1 -0
- package/dist/test/partialEval/peval.test.js +29 -0
- package/dist/test/partialEval/peval.test.js.map +1 -0
- package/dist/test/partialEval/unPeval.test.d.ts +1 -0
- package/dist/test/partialEval/unPeval.test.js +40 -0
- package/dist/test/partialEval/unPeval.test.js.map +1 -0
- package/dist/test/surface/AST.test.d.ts +1 -0
- package/dist/test/surface/AST.test.js +41 -0
- package/dist/test/surface/AST.test.js.map +1 -0
- package/dist/test/translate/translate.test.d.ts +1 -0
- package/dist/test/translate/translate.test.js +45 -0
- package/dist/test/translate/translate.test.js.map +1 -0
- package/package.json +49 -0
@@ -0,0 +1,360 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
3
|
+
if (mod && mod.__esModule) return mod;
|
4
|
+
var result = {};
|
5
|
+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
6
|
+
result["default"] = mod;
|
7
|
+
return result;
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
const CoreAST = __importStar(require("../core/AST"));
|
11
|
+
// Helper function to extract the expression from the binding
|
12
|
+
function getExpr(binding) {
|
13
|
+
return binding[0];
|
14
|
+
}
|
15
|
+
function unPartialEval(node) {
|
16
|
+
switch (node.type) {
|
17
|
+
case 'const':
|
18
|
+
return CoreAST.constNode(node.value);
|
19
|
+
case 'space':
|
20
|
+
return CoreAST.space(node.width);
|
21
|
+
case 'declare':
|
22
|
+
return CoreAST.declare(node.name, getExpr(node.value));
|
23
|
+
case 'assign':
|
24
|
+
return CoreAST.assign(node.name, getExpr(node.value));
|
25
|
+
case 'exp':
|
26
|
+
return CoreAST.exp(getExpr(node.binding));
|
27
|
+
case 'nop':
|
28
|
+
return CoreAST.nop();
|
29
|
+
case 'end':
|
30
|
+
return CoreAST.end();
|
31
|
+
case 'bot':
|
32
|
+
return CoreAST.bot();
|
33
|
+
case 'seq':
|
34
|
+
return unSeq(node);
|
35
|
+
case 'lambda':
|
36
|
+
return unPartialEvalLambdaApp(node);
|
37
|
+
default:
|
38
|
+
throw new Error(`Unknown node type: ${node.type}`);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
exports.unPartialEval = unPartialEval;
|
42
|
+
// 2 branchstart()...
|
43
|
+
// 4 loopstart()
|
44
|
+
function unSeq(node) {
|
45
|
+
const nodes = node.nodes;
|
46
|
+
const newNodes = [];
|
47
|
+
for (let i = 0; i < nodes.length; i++) {
|
48
|
+
const current = nodes[i];
|
49
|
+
if (current.type === 'branchstart') {
|
50
|
+
const condition = current.condition[0];
|
51
|
+
const conditionValue = current.condition[1];
|
52
|
+
const trueBranch = current.trueBranch;
|
53
|
+
const falseBranch = current.falseBranch;
|
54
|
+
const updatedBranchSeq = [];
|
55
|
+
for (let j = i + 1; j < nodes.length; j++) {
|
56
|
+
const next = nodes[j];
|
57
|
+
if (next.type === 'branchend') {
|
58
|
+
break;
|
59
|
+
}
|
60
|
+
else {
|
61
|
+
updatedBranchSeq.push(unPartialEval(nodes[j]));
|
62
|
+
}
|
63
|
+
}
|
64
|
+
if (condition) {
|
65
|
+
newNodes.push(CoreAST.ite(condition, { type: 'seq', nodes: updatedBranchSeq }, falseBranch));
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
newNodes.push(CoreAST.ite(condition, trueBranch, { type: 'seq', nodes: updatedBranchSeq }));
|
69
|
+
}
|
70
|
+
i += updatedBranchSeq.length + 1;
|
71
|
+
}
|
72
|
+
else if (current.type === 'loopfront') {
|
73
|
+
let loopfrontNode = current;
|
74
|
+
let looprearNode = { type: 'looprear', value: '' };
|
75
|
+
const updatedLoopSeq = [];
|
76
|
+
for (let j = i + 1; j < nodes.length; j++) {
|
77
|
+
const next = nodes[j];
|
78
|
+
if (next.type === 'looprear') {
|
79
|
+
looprearNode = next;
|
80
|
+
break;
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
updatedLoopSeq.push(unPartialEval(nodes[j]));
|
84
|
+
}
|
85
|
+
}
|
86
|
+
// case 1: all deleted, including front/rear
|
87
|
+
if (loopfrontNode.value === "" && looprearNode.value === "" && (updatedLoopSeq.length == 0 || isAllBot(updatedLoopSeq))) {
|
88
|
+
newNodes.push(CoreAST.bot());
|
89
|
+
}
|
90
|
+
else if (updatedLoopSeq.length == 0 || isAllBot(updatedLoopSeq)) {
|
91
|
+
// case 2: emtpy list
|
92
|
+
newNodes.push(CoreAST.loop(loopfrontNode.lst, loopfrontNode.separator, { type: 'front', value: current.value }, { type: 'rear', value: looprearNode.value }, loopfrontNode.body));
|
93
|
+
}
|
94
|
+
else if (updatedLoopSeq.length == 1) {
|
95
|
+
// case 3: one in list
|
96
|
+
let body = updatedLoopSeq[0];
|
97
|
+
if (body.type === "lambdawithexpr") {
|
98
|
+
newNodes.push(CoreAST.loop(loopfrontNode.lst, loopfrontNode.separator, { type: 'front', value: current.value }, { type: 'rear', value: looprearNode.value }, constructLambda(body)));
|
99
|
+
}
|
100
|
+
else {
|
101
|
+
throw new Error("Must be lambda in loopitem");
|
102
|
+
}
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
// case 4 and case 5
|
106
|
+
let filteredUpdatedLoopSeq = filterBotNodesFromTermNodes(updatedLoopSeq);
|
107
|
+
if (areAllLambdaWithExprsEqual(filteredUpdatedLoopSeq)) {
|
108
|
+
newNodes.push(CoreAST.loop(loopfrontNode.lst, loopfrontNode.separator, { type: 'front', value: current.value }, { type: 'rear', value: looprearNode.value }, constructLambda(filteredUpdatedLoopSeq[0])));
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
throw new Error("\ x.t in loop seq, ts are not equal");
|
112
|
+
}
|
113
|
+
}
|
114
|
+
i += updatedLoopSeq.length + 1;
|
115
|
+
}
|
116
|
+
else {
|
117
|
+
newNodes.push(unPartialEval(current));
|
118
|
+
}
|
119
|
+
}
|
120
|
+
return CoreAST.seq(...newNodes);
|
121
|
+
}
|
122
|
+
function unPartialEvalLambdaApp(node) {
|
123
|
+
let { variable, body, binding, marker } = node;
|
124
|
+
let newBody = unPartialEval(body);
|
125
|
+
return {
|
126
|
+
type: 'lambdawithexpr',
|
127
|
+
variable: variable,
|
128
|
+
body: newBody,
|
129
|
+
exp: convertToArrayLiteral(binding[1])
|
130
|
+
};
|
131
|
+
}
|
132
|
+
// Function to check if a given node is a BotNode
|
133
|
+
function isBotNode(node) {
|
134
|
+
return node.type === 'bot';
|
135
|
+
}
|
136
|
+
// Function to check whether all elements in a list are BotNode
|
137
|
+
function isAllBot(nodes) {
|
138
|
+
return nodes.every(isBotNode);
|
139
|
+
}
|
140
|
+
// Function to convert a single Value to an Expr
|
141
|
+
function valueToExpr(value) {
|
142
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string' || value === null) {
|
143
|
+
return { type: 'constant', value };
|
144
|
+
}
|
145
|
+
else if (Array.isArray(value)) {
|
146
|
+
return { type: 'array', elements: value.map(valueToExpr) };
|
147
|
+
}
|
148
|
+
else if (value.type === 'object') {
|
149
|
+
const fields = {};
|
150
|
+
for (const key in value.fields) {
|
151
|
+
if (value.fields.hasOwnProperty(key)) {
|
152
|
+
const fieldValue = value.fields[key];
|
153
|
+
fields[key] = { type: 'constant', value: fieldValue };
|
154
|
+
}
|
155
|
+
}
|
156
|
+
return { type: 'object', fields };
|
157
|
+
}
|
158
|
+
else {
|
159
|
+
throw new Error("Unsupported Value type");
|
160
|
+
}
|
161
|
+
}
|
162
|
+
// Function to convert a single Value to an ArrayLiteral
|
163
|
+
function singleValueToArrayLiteral(value) {
|
164
|
+
const element = valueToExpr(value);
|
165
|
+
return { type: 'array', elements: [element] };
|
166
|
+
}
|
167
|
+
// Function to convert a list of Values to an ArrayLiteral
|
168
|
+
function valuesToArrayLiteral(values) {
|
169
|
+
const elements = values.map(valueToExpr);
|
170
|
+
return { type: 'array', elements };
|
171
|
+
}
|
172
|
+
// Function to convert a Value or Value[] to an ArrayLiteral
|
173
|
+
function convertToArrayLiteral(valueOrValues) {
|
174
|
+
if (Array.isArray(valueOrValues)) {
|
175
|
+
return valuesToArrayLiteral(valueOrValues);
|
176
|
+
}
|
177
|
+
else {
|
178
|
+
return singleValueToArrayLiteral(valueOrValues);
|
179
|
+
}
|
180
|
+
}
|
181
|
+
// Function to construct a Lambda from a LambdaWithExpr
|
182
|
+
function constructLambda(lambdaWithExpr) {
|
183
|
+
return {
|
184
|
+
type: 'lambda',
|
185
|
+
variable: lambdaWithExpr.variable,
|
186
|
+
body: lambdaWithExpr.body
|
187
|
+
};
|
188
|
+
}
|
189
|
+
// Type guard to check if a TermNode is a LambdaWithExpr
|
190
|
+
function isLambdaWithExpr(node) {
|
191
|
+
return node.type === 'lambdawithexpr';
|
192
|
+
}
|
193
|
+
// Function to filter TermNodes which are LambdaWithExpr and do not have a BotNode as body
|
194
|
+
function filterBotNodesFromTermNodes(nodes) {
|
195
|
+
return nodes.filter(isLambdaWithExpr).filter(lambda => !isBotNode(lambda.body));
|
196
|
+
}
|
197
|
+
// Function to check if two Variables are equal
|
198
|
+
function areVariablesEqual(var1, var2) {
|
199
|
+
return var1.name === var2.name;
|
200
|
+
}
|
201
|
+
// Function to check if two Expr objects are equal
|
202
|
+
function areExprEqual(expr1, expr2) {
|
203
|
+
if (expr1.type !== expr2.type) {
|
204
|
+
return false;
|
205
|
+
}
|
206
|
+
switch (expr1.type) {
|
207
|
+
case 'constant':
|
208
|
+
const constant1 = expr1;
|
209
|
+
const constant2 = expr2;
|
210
|
+
if (typeof constant1.value === 'object' && typeof constant2.value === 'object') {
|
211
|
+
return areExprEqual(constant1.value, constant2.value);
|
212
|
+
}
|
213
|
+
return constant1.value === constant2.value;
|
214
|
+
case 'variable':
|
215
|
+
return expr1.name === expr2.name;
|
216
|
+
case 'binary':
|
217
|
+
const binary1 = expr1;
|
218
|
+
const binary2 = expr2;
|
219
|
+
return binary1.operator === binary2.operator &&
|
220
|
+
areExprEqual(binary1.left, binary2.left) &&
|
221
|
+
areExprEqual(binary1.right, binary2.right);
|
222
|
+
case 'unary':
|
223
|
+
const unary1 = expr1;
|
224
|
+
const unary2 = expr2;
|
225
|
+
return unary1.operator === unary2.operator &&
|
226
|
+
areExprEqual(unary1.operand, unary2.operand);
|
227
|
+
case 'field':
|
228
|
+
const field1 = expr1;
|
229
|
+
const field2 = expr2;
|
230
|
+
return field1.field === field2.field &&
|
231
|
+
areExprEqual(field1.object, field2.object);
|
232
|
+
case 'array':
|
233
|
+
const array1 = expr1;
|
234
|
+
const array2 = expr2;
|
235
|
+
if (array1.elements.length !== array2.elements.length) {
|
236
|
+
return false;
|
237
|
+
}
|
238
|
+
return array1.elements.every((element, index) => areExprEqual(element, array2.elements[index]));
|
239
|
+
case 'object':
|
240
|
+
const object1 = expr1;
|
241
|
+
const object2 = expr2;
|
242
|
+
const fields1 = Object.keys(object1.fields);
|
243
|
+
const fields2 = Object.keys(object2.fields);
|
244
|
+
if (fields1.length !== fields2.length) {
|
245
|
+
return false;
|
246
|
+
}
|
247
|
+
return fields1.every(field => object2.fields.hasOwnProperty(field) && areExprEqual(object1.fields[field], object2.fields[field]));
|
248
|
+
case 'freeze':
|
249
|
+
return areExprEqual(expr1.expression, expr2.expression);
|
250
|
+
default:
|
251
|
+
return false;
|
252
|
+
}
|
253
|
+
}
|
254
|
+
// Recursive function to check if two TermNodes are equal
|
255
|
+
function areTermNodesEqual(node1, node2) {
|
256
|
+
if (node1.type !== node2.type) {
|
257
|
+
return false;
|
258
|
+
}
|
259
|
+
switch (node1.type) {
|
260
|
+
case 'const':
|
261
|
+
return node1.value === node2.value;
|
262
|
+
case 'space':
|
263
|
+
return node1.width === node2.width;
|
264
|
+
case 'declare':
|
265
|
+
const declare1 = node1;
|
266
|
+
const declare2 = node2;
|
267
|
+
return areVariablesEqual(declare1.name, declare2.name) && areExprEqual(declare1.value, declare2.value);
|
268
|
+
case 'assign':
|
269
|
+
const assign1 = node1;
|
270
|
+
const assign2 = node2;
|
271
|
+
return areVariablesEqual(assign1.name, assign2.name) && areExprEqual(assign1.value, assign2.value);
|
272
|
+
case 'exp':
|
273
|
+
return areExprEqual(node1.expression, node2.expression);
|
274
|
+
case 'seq':
|
275
|
+
const seq1 = node1.nodes;
|
276
|
+
const seq2 = node2.nodes;
|
277
|
+
if (seq1.length !== seq2.length) {
|
278
|
+
return false;
|
279
|
+
}
|
280
|
+
return seq1.every((subNode, index) => areTermNodesEqual(subNode, seq2[index]));
|
281
|
+
case 'ite':
|
282
|
+
const ite1 = node1;
|
283
|
+
const ite2 = node2;
|
284
|
+
return areExprEqual(ite1.condition, ite2.condition) &&
|
285
|
+
areTermNodesEqual(ite1.trueBranch, ite2.trueBranch) &&
|
286
|
+
areTermNodesEqual(ite1.falseBranch, ite2.falseBranch);
|
287
|
+
case 'loop':
|
288
|
+
const loop1 = node1;
|
289
|
+
const loop2 = node2;
|
290
|
+
return areExprEqual(loop1.lst, loop2.lst) &&
|
291
|
+
loop1.separator.value === loop2.separator.value &&
|
292
|
+
loop1.front.value === loop2.front.value &&
|
293
|
+
loop1.rear.value === loop2.rear.value &&
|
294
|
+
areLambdasEqual(loop1.body, loop2.body);
|
295
|
+
case 'nop':
|
296
|
+
return true;
|
297
|
+
case 'bot':
|
298
|
+
return true;
|
299
|
+
case 'end':
|
300
|
+
return true;
|
301
|
+
case 'call':
|
302
|
+
const call1 = node1;
|
303
|
+
const call2 = node2;
|
304
|
+
return areTermNodesEqual(call1.func, call2.func) &&
|
305
|
+
Object.keys(call1.args).length === Object.keys(call2.args).length &&
|
306
|
+
Object.keys(call1.args).every(key => areExprEqual(call1.args[key], call2.args[key]));
|
307
|
+
case 'lambdawithexpr':
|
308
|
+
const lambda1 = node1;
|
309
|
+
const lambda2 = node2;
|
310
|
+
return areVariablesEqual(lambda1.variable, lambda2.variable) &&
|
311
|
+
areTermNodesEqual(lambda1.body, lambda2.body);
|
312
|
+
default:
|
313
|
+
return false;
|
314
|
+
}
|
315
|
+
}
|
316
|
+
// Function to check if two LambdaWithExpr are equal
|
317
|
+
function areLambdasEqual(lambda1, lambda2) {
|
318
|
+
return areVariablesEqual(lambda1.variable, lambda2.variable) &&
|
319
|
+
areTermNodesEqual(lambda1.body, lambda2.body);
|
320
|
+
}
|
321
|
+
// Function to check if two LambdaWithExpr are equal
|
322
|
+
function areLambdaWithExprsEqual(lambda1, lambda2) {
|
323
|
+
return areVariablesEqual(lambda1.variable, lambda2.variable) &&
|
324
|
+
areTermNodesEqual(lambda1.body, lambda2.body);
|
325
|
+
}
|
326
|
+
// Function to check if all elements in a list of LambdaWithExpr are equal
|
327
|
+
function areAllLambdaWithExprsEqual(lambdas) {
|
328
|
+
if (lambdas.length === 0) {
|
329
|
+
return true;
|
330
|
+
}
|
331
|
+
const firstLambda = lambdas[0];
|
332
|
+
return lambdas.every(lambda => areLambdaWithExprsEqual(lambda, firstLambda));
|
333
|
+
}
|
334
|
+
// 定义 flatten 函数
|
335
|
+
function flatten(termNode) {
|
336
|
+
if (termNode.type === 'seq') {
|
337
|
+
// 如果 termNode 是 seq 类型,则递归处理每个元素,并返回新的 seq 节点
|
338
|
+
const flattenedElements = termNode.nodes.map(element => flatten(element));
|
339
|
+
return { type: 'seq', nodes: flattenedElements.flatMap(seqNode => {
|
340
|
+
if (seqNode.type === 'seq') {
|
341
|
+
return seqNode.nodes;
|
342
|
+
}
|
343
|
+
else {
|
344
|
+
return [seqNode];
|
345
|
+
}
|
346
|
+
}) };
|
347
|
+
}
|
348
|
+
else if (termNode.type === "ite") {
|
349
|
+
return Object.assign(Object.assign({}, termNode), { trueBranch: flatten(termNode.trueBranch), falseBranch: flatten(termNode.falseBranch) });
|
350
|
+
}
|
351
|
+
else if (termNode.type === "loop") {
|
352
|
+
return Object.assign(Object.assign({}, termNode), { body: Object.assign(Object.assign({}, termNode.body), { body: flatten(termNode.body.body) }) });
|
353
|
+
}
|
354
|
+
else {
|
355
|
+
// 其他情况下,直接返回
|
356
|
+
return termNode;
|
357
|
+
}
|
358
|
+
}
|
359
|
+
exports.flatten = flatten;
|
360
|
+
//# sourceMappingURL=unpeval.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"unpeval.js","sourceRoot":"","sources":["../../../src/partialEval/unpeval.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { Expr } from "../common/Exp";
|
2
|
+
export type Name = string;
|
3
|
+
export type Literal = string;
|
4
|
+
export type Fragment = Literal | Directive | FragmentList;
|
5
|
+
export interface Directive {
|
6
|
+
type: 'Directive';
|
7
|
+
content: DeclareDirective | AssignDirective | ExprDirective | IfDirective | ForDirective;
|
8
|
+
}
|
9
|
+
export interface DeclareDirective {
|
10
|
+
type: 'declare';
|
11
|
+
name: Name;
|
12
|
+
expr: Expr;
|
13
|
+
}
|
14
|
+
export interface AssignDirective {
|
15
|
+
type: 'assign';
|
16
|
+
name: Name;
|
17
|
+
expr: Expr;
|
18
|
+
}
|
19
|
+
export interface ExprDirective {
|
20
|
+
type: 'exp';
|
21
|
+
expr: Expr;
|
22
|
+
}
|
23
|
+
export interface IfDirective {
|
24
|
+
type: 'if';
|
25
|
+
expr: Expr;
|
26
|
+
thenBranch: Fragment;
|
27
|
+
elseBranch: ElseBranch;
|
28
|
+
}
|
29
|
+
export type ElseBranch = IfDirective | Fragment | Bot;
|
30
|
+
export interface Bot {
|
31
|
+
type: 'bot';
|
32
|
+
}
|
33
|
+
export interface ForDirective {
|
34
|
+
type: 'for';
|
35
|
+
name: Name;
|
36
|
+
expr: Expr;
|
37
|
+
separator: Separator;
|
38
|
+
front: Front;
|
39
|
+
rear: Rear;
|
40
|
+
fragment: Fragment;
|
41
|
+
}
|
42
|
+
export interface Separator {
|
43
|
+
type: 'separator';
|
44
|
+
value: string;
|
45
|
+
}
|
46
|
+
export interface Front {
|
47
|
+
type: 'front';
|
48
|
+
value: string;
|
49
|
+
}
|
50
|
+
export interface Rear {
|
51
|
+
type: 'rear';
|
52
|
+
value: string;
|
53
|
+
}
|
54
|
+
export interface FragmentList {
|
55
|
+
type: 'fragmentList';
|
56
|
+
fragments: Fragment[];
|
57
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AST.js","sourceRoot":"","sources":["../../../src/surface/AST.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import * as Surface from "./AST";
|
2
|
+
export declare function parse(input: string): Surface.Fragment;
|
3
|
+
export declare function tokenize(input: string): (Surface.Literal | string)[];
|
4
|
+
export declare function parseTokens(tokens: (Surface.Literal | string)[]): Surface.Fragment;
|