meta-parser-generator 1.1.2 → 1.2.0
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/metaParserGenerator.d.ts +1 -1
- package/dist/metaParserGenerator.js +51 -62
- package/dist/metaParserGenerator.js.map +1 -1
- package/dist/types.js +1 -2
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -8
- package/dist/utils.js.map +1 -1
- package/package.json +7 -3
|
@@ -1,31 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.generateParser = exports.generate = exports.generateTokenizer = void 0;
|
|
27
|
-
const fs = __importStar(require("fs"));
|
|
28
|
-
const utils_1 = require("./utils");
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { preprocessGrammar, checkGrammarAndTokens } from './utils.js';
|
|
29
3
|
const recordFailure = `
|
|
30
4
|
let best_failure;
|
|
31
5
|
let best_failure_array = [];
|
|
@@ -101,7 +75,7 @@ function memoize_left_recur(name, func) {
|
|
|
101
75
|
* @param tokenDef - Token definitions mapping token names to patterns
|
|
102
76
|
* @returns Array of code lines for the tokenizer
|
|
103
77
|
*/
|
|
104
|
-
function generateTokenizer(tokenDef) {
|
|
78
|
+
export function generateTokenizer(tokenDef) {
|
|
105
79
|
const output = [];
|
|
106
80
|
const keys = Object.keys(tokenDef);
|
|
107
81
|
for (let i = 0; i < keys.length; i++) {
|
|
@@ -207,7 +181,6 @@ function generateTokenizer(tokenDef) {
|
|
|
207
181
|
`);
|
|
208
182
|
return output;
|
|
209
183
|
}
|
|
210
|
-
exports.generateTokenizer = generateTokenizer;
|
|
211
184
|
/**
|
|
212
185
|
* Generates code for a specific grammar rule alternative
|
|
213
186
|
* @param name - Name of the grammar rule
|
|
@@ -217,7 +190,7 @@ exports.generateTokenizer = generateTokenizer;
|
|
|
217
190
|
* @param debug - Whether to include debug logging
|
|
218
191
|
* @returns Array of code lines for this rule function
|
|
219
192
|
*/
|
|
220
|
-
function generatesub_rule_index(name, index, ruleItems, tokensDef, debug) {
|
|
193
|
+
function generatesub_rule_index(name, index, ruleItems, tokensDef, debug, skipMemoize = false) {
|
|
221
194
|
const output = [];
|
|
222
195
|
output.push(`let ${name}_${index} = (stream, index) => {`);
|
|
223
196
|
let i = 0;
|
|
@@ -304,11 +277,13 @@ function generatesub_rule_index(name, index, ruleItems, tokensDef, debug) {
|
|
|
304
277
|
output.push(' node.success = i === stream.length; node.last_index = i;');
|
|
305
278
|
output.push(' return node;');
|
|
306
279
|
output.push('};');
|
|
307
|
-
if (
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
280
|
+
if (!skipMemoize) {
|
|
281
|
+
if (ruleItems[0].leftRecursion) {
|
|
282
|
+
output.push(`${name}_${index} = memoize_left_recur('${name}_${index}', ${name}_${index});`);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
output.push(`${name}_${index} = memoize('${name}_${index}', ${name}_${index});`);
|
|
286
|
+
}
|
|
312
287
|
}
|
|
313
288
|
output.push('\n');
|
|
314
289
|
return output;
|
|
@@ -320,10 +295,10 @@ function generatesub_rule_index(name, index, ruleItems, tokensDef, debug) {
|
|
|
320
295
|
* @param debug - Whether to include debug logging in generated code
|
|
321
296
|
* @returns Array of code lines for the complete parser
|
|
322
297
|
*/
|
|
323
|
-
function generate(grammar, tokensDef, debug) {
|
|
298
|
+
export function generate(grammar, tokensDef, debug) {
|
|
324
299
|
let output = [];
|
|
325
|
-
|
|
326
|
-
const newGrammar =
|
|
300
|
+
checkGrammarAndTokens(grammar, tokensDef);
|
|
301
|
+
const newGrammar = preprocessGrammar(grammar);
|
|
327
302
|
const entries = Object.keys(newGrammar);
|
|
328
303
|
output.push('// This code is automatically generated by the meta parser, do not modify');
|
|
329
304
|
output.push('// produced with metaParserGenerator.js');
|
|
@@ -331,48 +306,62 @@ function generate(grammar, tokensDef, debug) {
|
|
|
331
306
|
entries.forEach((key) => {
|
|
332
307
|
let i = 0;
|
|
333
308
|
const metaSub = [];
|
|
309
|
+
const hasLeftRecursion = newGrammar[key].some(ruleItems => ruleItems[0].leftRecursion);
|
|
334
310
|
newGrammar[key].forEach((ruleItems) => {
|
|
335
|
-
|
|
311
|
+
// When any alternative in this rule is left-recursive, skip individual memoize
|
|
312
|
+
// wrapping so the grow loop in the combined memoize_left_recur sees fresh results
|
|
313
|
+
// on every iteration instead of stale cached values.
|
|
314
|
+
output = output.concat(generatesub_rule_index(key, i, ruleItems, tokensDef, debug, hasLeftRecursion));
|
|
336
315
|
metaSub.push(`${key}_${i}`);
|
|
337
316
|
i++;
|
|
338
317
|
});
|
|
339
|
-
output.push(`function ${key}(stream, index) {`);
|
|
340
318
|
const st = metaSub.map(sub => `${sub}(stream, index)`).join('\n || ');
|
|
341
|
-
|
|
342
|
-
|
|
319
|
+
if (hasLeftRecursion) {
|
|
320
|
+
// Wrap the *combined* function so Guido van Rossum's seed-grow loop runs over
|
|
321
|
+
// every alternative (including the non-LR base cases) on each iteration.
|
|
322
|
+
output.push(`let ${key} = memoize_left_recur('${key}', function ${key}_combined(stream, index) {`);
|
|
323
|
+
output.push(` return ${st};`);
|
|
324
|
+
output.push('});');
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
output.push(`function ${key}(stream, index) {`);
|
|
328
|
+
output.push(` return ${st};`);
|
|
329
|
+
output.push('}');
|
|
330
|
+
}
|
|
343
331
|
});
|
|
344
332
|
output = output.concat(generateTokenizer(tokensDef));
|
|
345
|
-
output.push(`
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
333
|
+
output.push(`
|
|
334
|
+
const parse = (stream) => {
|
|
335
|
+
best_failure = null;
|
|
336
|
+
best_failure_index = 0;
|
|
337
|
+
best_failure_array = [];
|
|
338
|
+
cache = {};
|
|
339
|
+
cacheR = {};
|
|
340
|
+
const result = START(stream, 0);
|
|
341
|
+
if (!result) {
|
|
342
|
+
return {
|
|
343
|
+
success: false,
|
|
344
|
+
primary_failure: best_failure,
|
|
345
|
+
all_failures: best_failure_array,
|
|
359
346
|
}
|
|
360
|
-
|
|
361
|
-
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export default {
|
|
352
|
+
parse,
|
|
362
353
|
tokenize,
|
|
363
354
|
};
|
|
364
355
|
`);
|
|
365
356
|
return output;
|
|
366
357
|
}
|
|
367
|
-
exports.generate = generate;
|
|
368
358
|
/**
|
|
369
359
|
* Generates a parser file from grammar and token definitions
|
|
370
360
|
* @param grammar - Grammar rules defining the language structure
|
|
371
361
|
* @param tokensDefinition - Token definitions mapping token names to patterns
|
|
372
362
|
* @param filename - Output path for the generated parser file
|
|
373
363
|
*/
|
|
374
|
-
function generateParser(grammar, tokensDefinition, filename) {
|
|
364
|
+
export function generateParser(grammar, tokensDefinition, filename) {
|
|
375
365
|
fs.writeFileSync(filename, generate(grammar, tokensDefinition, false).join('\n'));
|
|
376
366
|
}
|
|
377
|
-
exports.generateParser = generateParser;
|
|
378
367
|
//# sourceMappingURL=metaParserGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaParserGenerator.js","sourceRoot":"","sources":["../metaParserGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metaParserGenerator.js","sourceRoot":"","sources":["../metaParserGenerator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ASTNode, Token, TokensDefinition, Grammar, ProcessedGrammar, ParseFailure } from "./types";
|
|
1
|
+
import { ASTNode, Token, TokensDefinition, Grammar, ProcessedGrammar, ParseFailure } from "./types.js";
|
|
2
2
|
declare function streamContext(token: Token, firstToken: Token, stream: Token[]): string;
|
|
3
3
|
/**
|
|
4
4
|
* Displays a formatted error message for parsing failures
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.printTree = exports.displayError = exports.checkGrammarAndTokens = exports.preprocessGrammar = exports.streamContext = void 0;
|
|
4
1
|
const RED = '\x1B[0;31m';
|
|
5
2
|
const YELLOW = '\x1B[1;33m';
|
|
6
3
|
const NC = '\x1B[0m';
|
|
@@ -54,7 +51,6 @@ function streamContext(token, firstToken, stream) {
|
|
|
54
51
|
}
|
|
55
52
|
return str;
|
|
56
53
|
}
|
|
57
|
-
exports.streamContext = streamContext;
|
|
58
54
|
/**
|
|
59
55
|
* Displays a formatted error message for parsing failures
|
|
60
56
|
* @param stream - Token stream
|
|
@@ -91,7 +87,6 @@ function displayError(stream, tokensDefinition, grammar, bestFailure) {
|
|
|
91
87
|
${streamContext(token, firstToken, stream)}
|
|
92
88
|
`);
|
|
93
89
|
}
|
|
94
|
-
exports.displayError = displayError;
|
|
95
90
|
function isRule(node) {
|
|
96
91
|
return typeof node.type === 'string';
|
|
97
92
|
}
|
|
@@ -113,7 +108,6 @@ function printTree(node, sp) {
|
|
|
113
108
|
console.log(`${sp}t ${node.type} ${node.value}`);
|
|
114
109
|
}
|
|
115
110
|
}
|
|
116
|
-
exports.printTree = printTree;
|
|
117
111
|
/**
|
|
118
112
|
* Validates that grammar and token definitions don't have overlapping keys
|
|
119
113
|
* @param grammar - Grammar rules
|
|
@@ -127,7 +121,6 @@ function checkGrammarAndTokens(grammar, tokensDefinition) {
|
|
|
127
121
|
throw new Error(`Grammar and token have keys in common: ${intersection}`);
|
|
128
122
|
}
|
|
129
123
|
}
|
|
130
|
-
exports.checkGrammarAndTokens = checkGrammarAndTokens;
|
|
131
124
|
/**
|
|
132
125
|
* Preprocesses grammar rules to extract modifiers and aliases
|
|
133
126
|
* @param rules - Raw grammar rules
|
|
@@ -165,5 +158,5 @@ function preprocessGrammar(rules) {
|
|
|
165
158
|
return accu;
|
|
166
159
|
}, {});
|
|
167
160
|
}
|
|
168
|
-
|
|
161
|
+
export { streamContext, preprocessGrammar, checkGrammarAndTokens, displayError, printTree, };
|
|
169
162
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meta-parser-generator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "A PEG parser generator with packrat parsing written in JavaScript for JavaScript",
|
|
5
6
|
"main": "dist/metaParserGenerator.js",
|
|
6
7
|
"types": "dist/metaParserGenerator.d.ts",
|
|
@@ -12,8 +13,11 @@
|
|
|
12
13
|
"scripts": {
|
|
13
14
|
"build": "tsc",
|
|
14
15
|
"prepublish": "npm run build",
|
|
15
|
-
"test": "jest --no-cache",
|
|
16
|
-
"gentest": "node ./tests/generateParser.js && jest --no-cache"
|
|
16
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest --no-cache",
|
|
17
|
+
"gentest": "node ./tests/generateParser.js && NODE_OPTIONS=--experimental-vm-modules jest --no-cache"
|
|
18
|
+
},
|
|
19
|
+
"jest": {
|
|
20
|
+
"transform": {}
|
|
17
21
|
},
|
|
18
22
|
"repository": {
|
|
19
23
|
"type": "git",
|