parser-lr 0.4.1 → 0.5.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/README.md +35 -1
- package/bin/parser-lr.js +340 -5802
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/grammar/grammar-json-path.d.ts +2 -0
- package/dist/lib/grammar/grammar-json-path.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-json-path.esm.d.ts +5 -0
- package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-json-path.esm.js +9 -0
- package/dist/lib/grammar/grammar-json-path.esm.js.map +1 -0
- package/dist/lib/grammar/grammar-json-path.js +2 -0
- package/dist/lib/grammar/grammar-json-path.js.map +1 -0
- package/dist/lib/grammar/index.d.ts +2 -0
- package/dist/lib/grammar/index.d.ts.map +1 -1
- package/dist/lib/grammar/index.js +1 -0
- package/dist/lib/grammar/index.js.map +1 -1
- package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
- package/dist/lib/grammar/meta-grammar-table.js +4 -2
- package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
- package/dist/lib/grammar/table-validator.d.ts +26 -0
- package/dist/lib/grammar/table-validator.d.ts.map +1 -0
- package/dist/lib/grammar/table-validator.js +211 -0
- package/dist/lib/grammar/table-validator.js.map +1 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/transform/cst-transformer.d.ts +14 -0
- package/dist/lib/transform/cst-transformer.d.ts.map +1 -1
- package/dist/lib/transform/cst-transformer.js +82 -11
- package/dist/lib/transform/cst-transformer.js.map +1 -1
- package/dist/lib/transform/grammar-fixture.d.ts +56 -0
- package/dist/lib/transform/grammar-fixture.d.ts.map +1 -0
- package/dist/lib/transform/grammar-fixture.js +101 -0
- package/dist/lib/transform/grammar-fixture.js.map +1 -0
- package/dist/lib-cjs/ast/ast-node.js +70 -0
- package/dist/lib-cjs/ast/ast-node.js.map +1 -0
- package/dist/lib-cjs/errors/index.js +9 -0
- package/dist/lib-cjs/errors/index.js.map +1 -0
- package/dist/lib-cjs/errors/parser-lr-error.js +52 -0
- package/dist/lib-cjs/errors/parser-lr-error.js.map +1 -0
- package/dist/lib-cjs/grammar/ast-schema.js +43 -0
- package/dist/lib-cjs/grammar/ast-schema.js.map +1 -0
- package/dist/lib-cjs/grammar/ast-type.js +3 -0
- package/dist/lib-cjs/grammar/ast-type.js.map +1 -0
- package/dist/lib-cjs/grammar/expression.js +3 -0
- package/dist/lib-cjs/grammar/expression.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-from-cst.js +641 -0
- package/dist/lib-cjs/grammar/grammar-from-cst.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-json-path.js +13 -0
- package/dist/lib-cjs/grammar/grammar-json-path.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-literals.js +71 -0
- package/dist/lib-cjs/grammar/grammar-literals.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar.js +64 -0
- package/dist/lib-cjs/grammar/grammar.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar.json +5760 -0
- package/dist/lib-cjs/grammar/index.js +19 -0
- package/dist/lib-cjs/grammar/index.js.map +1 -0
- package/dist/lib-cjs/grammar/meta-grammar-table.js +39 -0
- package/dist/lib-cjs/grammar/meta-grammar-table.js.map +1 -0
- package/dist/lib-cjs/grammar/production.js +3 -0
- package/dist/lib-cjs/grammar/production.js.map +1 -0
- package/dist/lib-cjs/grammar/read-grammar-error.js +22 -0
- package/dist/lib-cjs/grammar/read-grammar-error.js.map +1 -0
- package/dist/lib-cjs/grammar/read-grammar.js +24 -0
- package/dist/lib-cjs/grammar/read-grammar.js.map +1 -0
- package/dist/lib-cjs/grammar/table-validator.js +215 -0
- package/dist/lib-cjs/grammar/table-validator.js.map +1 -0
- package/dist/lib-cjs/grammar/token-rule.js +3 -0
- package/dist/lib-cjs/grammar/token-rule.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-expression.js +3 -0
- package/dist/lib-cjs/grammar/transform-expression.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-rule.js +3 -0
- package/dist/lib-cjs/grammar/transform-rule.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-schema.js +43 -0
- package/dist/lib-cjs/grammar/transform-schema.js.map +1 -0
- package/dist/lib-cjs/index.js +66 -0
- package/dist/lib-cjs/index.js.map +1 -0
- package/dist/lib-cjs/lexer/index.js +32 -0
- package/dist/lib-cjs/lexer/index.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-compile-error.js +22 -0
- package/dist/lib-cjs/lexer/lexer-compile-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-compile.js +201 -0
- package/dist/lib-cjs/lexer/lexer-compile.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-error.js +22 -0
- package/dist/lib-cjs/lexer/lexer-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-input-error.js +17 -0
- package/dist/lib-cjs/lexer/lexer-input-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-state-error.js +19 -0
- package/dist/lib-cjs/lexer/lexer-state-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer.js +278 -0
- package/dist/lib-cjs/lexer/lexer.js.map +1 -0
- package/dist/lib-cjs/lexer/token.js +44 -0
- package/dist/lib-cjs/lexer/token.js.map +1 -0
- package/dist/lib-cjs/package.json +3 -0
- package/dist/lib-cjs/parse-context-error.js +19 -0
- package/dist/lib-cjs/parse-context-error.js.map +1 -0
- package/dist/lib-cjs/parse-context.js +137 -0
- package/dist/lib-cjs/parse-context.js.map +1 -0
- package/dist/lib-cjs/parse-output-error.js +19 -0
- package/dist/lib-cjs/parse-output-error.js.map +1 -0
- package/dist/lib-cjs/parse-output.js +18 -0
- package/dist/lib-cjs/parse-output.js.map +1 -0
- package/dist/lib-cjs/parse-table/analysis/first-follow.js +294 -0
- package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +1 -0
- package/dist/lib-cjs/parse-table/analysis/index.js +9 -0
- package/dist/lib-cjs/parse-table/analysis/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +140 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-production.js +3 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +39 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +224 -0
- package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/index.js +13 -0
- package/dist/lib-cjs/parse-table/bnf/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/build-lr-table.js +171 -0
- package/dist/lib-cjs/parse-table/build-lr-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/index.js +49 -0
- package/dist/lib-cjs/parse-table/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr-algorithm-error.js +19 -0
- package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr-algorithm.js +31 -0
- package/dist/lib-cjs/parse-table/lr-algorithm.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr0/index.js +14 -0
- package/dist/lib-cjs/parse-table/lr0/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +286 -0
- package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr1/index.js +18 -0
- package/dist/lib-cjs/parse-table/lr1/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +432 -0
- package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-build-error.js +24 -0
- package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-error.js +19 -0
- package/dist/lib-cjs/parse-table/parse-table-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-json.js +12 -0
- package/dist/lib-cjs/parse-table/parse-table-json.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table.js +345 -0
- package/dist/lib-cjs/parse-table/parse-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/index.js +13 -0
- package/dist/lib-cjs/parse-table/slr/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/parse-action.js +8 -0
- package/dist/lib-cjs/parse-table/slr/parse-action.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/slr-table.js +18 -0
- package/dist/lib-cjs/parse-table/slr/slr-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/index.js +21 -0
- package/dist/lib-cjs/parse-table/table/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/lr-parse-table.js +192 -0
- package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/parse-action.js +54 -0
- package/dist/lib-cjs/parse-table/table/parse-action.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/table-builder-base.js +153 -0
- package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +1 -0
- package/dist/lib-cjs/parse-table/token-inventory.js +18 -0
- package/dist/lib-cjs/parse-table/token-inventory.js.map +1 -0
- package/dist/lib-cjs/parser-lr.js +143 -0
- package/dist/lib-cjs/parser-lr.js.map +1 -0
- package/dist/lib-cjs/shift-reduce/index.js +11 -0
- package/dist/lib-cjs/shift-reduce/index.js.map +1 -0
- package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +224 -0
- package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +1 -0
- package/dist/lib-cjs/transform/binding-map.js +82 -0
- package/dist/lib-cjs/transform/binding-map.js.map +1 -0
- package/dist/lib-cjs/transform/cst-transformer.js +480 -0
- package/dist/lib-cjs/transform/cst-transformer.js.map +1 -0
- package/dist/lib-cjs/transform/grammar-fixture.js +109 -0
- package/dist/lib-cjs/transform/grammar-fixture.js.map +1 -0
- package/dist/lib-cjs/transform/index.js +12 -0
- package/dist/lib-cjs/transform/index.js.map +1 -0
- package/docs/grammar.md +80 -0
- package/docs/parser-lr-enhancement-proposals.md +548 -0
- package/grammars/6502.grammar +233 -0
- package/grammars/calc.grammar +30 -0
- package/grammars/ferrite.grammar +991 -0
- package/grammars/fixtures/build-optional/build-optional.grammar +32 -0
- package/grammars/fixtures/build-optional/input.txt +1 -0
- package/grammars/fixtures/comparison-op/comparison-op.grammar +28 -0
- package/grammars/fixtures/comparison-op/input.txt +1 -0
- package/grammars/fixtures/flatten-repeat/flatten-repeat.grammar +28 -0
- package/grammars/fixtures/flatten-repeat/input.txt +1 -0
- package/grammars/fixtures/help-topic/help-topic.grammar +28 -0
- package/grammars/fixtures/help-topic/input.txt +1 -0
- package/grammars/fixtures/let-target/input.txt +1 -0
- package/grammars/fixtures/let-target/let-target.grammar +33 -0
- package/grammars/fixtures/pass-preserves-production/bare-terminal/bare-terminal.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/bare-terminal/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end-if.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/labeled-variant.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/optional-absent/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/optional-absent/optional-absent.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/optional-present/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/optional-present/optional-present.grammar +24 -0
- package/grammars/grammar.grammar +428 -0
- package/grammars/lisp.grammar +95 -0
- package/package.json +9 -4
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateGrammarTable = exports.formatTableValidationIssues = exports.TransformSchema = exports.ReadGrammarError = exports.readGrammar = exports.grammarFromCst = exports.Grammar = exports.AstSchema = void 0;
|
|
4
|
+
var ast_schema_js_1 = require("./ast-schema.js");
|
|
5
|
+
Object.defineProperty(exports, "AstSchema", { enumerable: true, get: function () { return ast_schema_js_1.AstSchema; } });
|
|
6
|
+
var grammar_js_1 = require("./grammar.js");
|
|
7
|
+
Object.defineProperty(exports, "Grammar", { enumerable: true, get: function () { return grammar_js_1.Grammar; } });
|
|
8
|
+
var grammar_from_cst_js_1 = require("./grammar-from-cst.js");
|
|
9
|
+
Object.defineProperty(exports, "grammarFromCst", { enumerable: true, get: function () { return grammar_from_cst_js_1.grammarFromCst; } });
|
|
10
|
+
var read_grammar_js_1 = require("./read-grammar.js");
|
|
11
|
+
Object.defineProperty(exports, "readGrammar", { enumerable: true, get: function () { return read_grammar_js_1.readGrammar; } });
|
|
12
|
+
var read_grammar_error_js_1 = require("./read-grammar-error.js");
|
|
13
|
+
Object.defineProperty(exports, "ReadGrammarError", { enumerable: true, get: function () { return read_grammar_error_js_1.ReadGrammarError; } });
|
|
14
|
+
var transform_schema_js_1 = require("./transform-schema.js");
|
|
15
|
+
Object.defineProperty(exports, "TransformSchema", { enumerable: true, get: function () { return transform_schema_js_1.TransformSchema; } });
|
|
16
|
+
var table_validator_js_1 = require("./table-validator.js");
|
|
17
|
+
Object.defineProperty(exports, "formatTableValidationIssues", { enumerable: true, get: function () { return table_validator_js_1.formatTableValidationIssues; } });
|
|
18
|
+
Object.defineProperty(exports, "validateGrammarTable", { enumerable: true, get: function () { return table_validator_js_1.validateGrammarTable; } });
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":";;;AACA,iDAA4C;AAAnC,0GAAA,SAAS,OAAA;AAalB,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AACvB,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AACpB,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AAazB,6DAAwD;AAA/C,sHAAA,eAAe,OAAA;AACxB,2DAG8B;AAF1B,iIAAA,2BAA2B,OAAA;AAC3B,0HAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.metaGrammarTable = metaGrammarTable;
|
|
4
|
+
exports.metaGrammar = metaGrammar;
|
|
5
|
+
exports.lexGrammarSource = lexGrammarSource;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const lexer_js_1 = require("../lexer/lexer.js");
|
|
9
|
+
const token_js_1 = require("../lexer/token.js");
|
|
10
|
+
const parse_table_js_1 = require("../parse-table/parse-table.js");
|
|
11
|
+
const grammar_json_path_js_1 = require("./grammar-json-path.js");
|
|
12
|
+
const bootstrapTable = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)((0, grammar_json_path_js_1.grammarJsonDirectory)(), 'grammar.json'), 'utf8'));
|
|
13
|
+
let bootstrapMetaGrammar = null;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the bootstrapped meta-grammar table for `.grammar` files.
|
|
16
|
+
*/
|
|
17
|
+
function metaGrammarTable() {
|
|
18
|
+
return parse_table_js_1.ParseTable.fromJson(bootstrapTable);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns the bootstrapped meta-grammar model used to lex `.grammar` files.
|
|
22
|
+
*/
|
|
23
|
+
function metaGrammar() {
|
|
24
|
+
if (bootstrapMetaGrammar === null) {
|
|
25
|
+
bootstrapMetaGrammar = metaGrammarTable().toGrammar();
|
|
26
|
+
}
|
|
27
|
+
return bootstrapMetaGrammar;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Lexes a `.grammar` source file using the bootstrapped meta-grammar table.
|
|
31
|
+
*
|
|
32
|
+
* @param source - Full grammar file text.
|
|
33
|
+
* @returns Matched tokens excluding `$eof`.
|
|
34
|
+
*/
|
|
35
|
+
function lexGrammarSource(source) {
|
|
36
|
+
const tokens = new lexer_js_1.Lexer(metaGrammar()).lex(source);
|
|
37
|
+
return tokens.filter((token) => !(0, token_js_1.isEofToken)(token));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=meta-grammar-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-grammar-table.js","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":";;AAqBA,4CAGC;AAKD,kCAQC;AAQD,4CAKC;AAlDD,qCAAuC;AACvC,yCAAiC;AAEjC,gDAA0C;AAC1C,gDAA+C;AAE/C,kEAA2D;AAI3D,iEAA8D;AAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC7B,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,IAAA,2CAAoB,GAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;AAEpB,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;GAEG;AACH,SAAgB,gBAAgB;IAE5B,OAAO,2BAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IAEvB,IAAI,oBAAoB,KAAK,IAAI,EACjC,CAAC;QACG,oBAAoB,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,gBAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.js","sourceRoot":"","sources":["../../../src/lib/grammar/production.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReadGrammarError = void 0;
|
|
4
|
+
const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
|
|
5
|
+
/**
|
|
6
|
+
* Error thrown when a `.grammar` file cannot be lexed or parsed.
|
|
7
|
+
*/
|
|
8
|
+
class ReadGrammarError extends parser_lr_error_js_1.ParserLrError {
|
|
9
|
+
offset;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a grammar read error at a source offset.
|
|
12
|
+
*
|
|
13
|
+
* @param message - Human-readable failure description.
|
|
14
|
+
* @param offset - Source offset where reading failed.
|
|
15
|
+
*/
|
|
16
|
+
constructor(message, offset) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.offset = offset;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ReadGrammarError = ReadGrammarError;
|
|
22
|
+
//# sourceMappingURL=read-grammar-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-grammar-error.js","sourceRoot":"","sources":["../../../src/lib/grammar/read-grammar-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,gBAAiB,SAAQ,kCAAa;IAU3B;IARpB;;;;;OAKG;IACH,YACI,OAAe,EACC,MAAc;QAG9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;IAIlC,CAAC;CACJ;AAfD,4CAeC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readGrammar = readGrammar;
|
|
4
|
+
const lexer_js_1 = require("../lexer/lexer.js");
|
|
5
|
+
const shift_reduce_engine_js_1 = require("../shift-reduce/shift-reduce-engine.js");
|
|
6
|
+
const grammar_from_cst_js_1 = require("./grammar-from-cst.js");
|
|
7
|
+
const meta_grammar_table_js_1 = require("./meta-grammar-table.js");
|
|
8
|
+
const read_grammar_error_js_1 = require("./read-grammar-error.js");
|
|
9
|
+
/**
|
|
10
|
+
* Parses a `.grammar` source string into a {@link Grammar} model.
|
|
11
|
+
*
|
|
12
|
+
* @param source - Full grammar file text.
|
|
13
|
+
* @returns Parsed grammar file model.
|
|
14
|
+
*/
|
|
15
|
+
function readGrammar(source) {
|
|
16
|
+
const table = (0, meta_grammar_table_js_1.metaGrammarTable)();
|
|
17
|
+
const tokens = new lexer_js_1.Lexer((0, meta_grammar_table_js_1.metaGrammar)()).lex(source);
|
|
18
|
+
const result = (0, shift_reduce_engine_js_1.parseWithTableResult)(table, tokens);
|
|
19
|
+
if (result.cst === null) {
|
|
20
|
+
throw new read_grammar_error_js_1.ReadGrammarError(result.errorMessage ?? 'Grammar parse failed', result.errorOffset ?? 0);
|
|
21
|
+
}
|
|
22
|
+
return (0, grammar_from_cst_js_1.grammarFromCst)(result.cst);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=read-grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-grammar.js","sourceRoot":"","sources":["../../../src/lib/grammar/read-grammar.ts"],"names":[],"mappings":";;AAcA,kCAeC;AA7BD,gDAA0C;AAC1C,mFAA8E;AAE9E,+DAAuD;AAEvD,mEAAwE;AACxE,mEAA2D;AAE3D;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,MAAc;IAEtC,MAAM,KAAK,GAAG,IAAA,wCAAgB,GAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,gBAAK,CAAC,IAAA,mCAAW,GAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAA,6CAAoB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EACvB,CAAC;QACG,MAAM,IAAI,wCAAgB,CACtB,MAAM,CAAC,YAAY,IAAI,sBAAsB,EAC7C,MAAM,CAAC,WAAW,IAAI,CAAC,CAC1B,CAAC;IACN,CAAC;IAED,OAAO,IAAA,oCAAc,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateGrammarTable = validateGrammarTable;
|
|
4
|
+
exports.formatTableValidationIssues = formatTableValidationIssues;
|
|
5
|
+
const desugar_ebnf_js_1 = require("../parse-table/bnf/desugar-ebnf.js");
|
|
6
|
+
/**
|
|
7
|
+
* Validates transform and AST consistency for a parsed grammar.
|
|
8
|
+
*
|
|
9
|
+
* @param grammar - Parsed `.grammar` file model.
|
|
10
|
+
* @returns Validation errors and warnings.
|
|
11
|
+
*/
|
|
12
|
+
function validateGrammarTable(grammar) {
|
|
13
|
+
const issues = [];
|
|
14
|
+
const bnf = new desugar_ebnf_js_1.EbnfDesugarer(grammar).desugar();
|
|
15
|
+
const bnfProductionNames = new Set(bnf.productions.map((production) => production.name));
|
|
16
|
+
if (grammar.transformSchema !== null) {
|
|
17
|
+
for (const rule of grammar.transformSchema.rules) {
|
|
18
|
+
validateTransformProductionExists(rule, bnfProductionNames, issues);
|
|
19
|
+
for (const alternative of rule.alternatives) {
|
|
20
|
+
validateTransformExpression(grammar, alternative.expression, issues);
|
|
21
|
+
collectPassCollapseWarnings(grammar, rule, alternative.expression, bnf.productions, issues);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return issues;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Records an error when a transform rule names an unknown production.
|
|
29
|
+
*
|
|
30
|
+
* @param rule - Transform rule to validate.
|
|
31
|
+
* @param bnfProductionNames - Desugared production names.
|
|
32
|
+
* @param issues - Issue list to append to.
|
|
33
|
+
*/
|
|
34
|
+
function validateTransformProductionExists(rule, bnfProductionNames, issues) {
|
|
35
|
+
if (!bnfProductionNames.has(rule.production)) {
|
|
36
|
+
issues.push({
|
|
37
|
+
severity: 'error',
|
|
38
|
+
message: `transform rule for unknown production ${JSON.stringify(rule.production)}`,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validates one transform expression against the grammar AST schema.
|
|
44
|
+
*
|
|
45
|
+
* @param grammar - Parsed grammar model.
|
|
46
|
+
* @param expression - Transform expression to validate.
|
|
47
|
+
* @param issues - Issue list to append to.
|
|
48
|
+
*/
|
|
49
|
+
function validateTransformExpression(grammar, expression, issues) {
|
|
50
|
+
switch (expression.kind) {
|
|
51
|
+
case 'build':
|
|
52
|
+
validateAstTarget(grammar, expression.typeName, expression.variant, issues);
|
|
53
|
+
break;
|
|
54
|
+
case 'foldLeft':
|
|
55
|
+
case 'foldRight':
|
|
56
|
+
case 'flatten':
|
|
57
|
+
validateAstTarget(grammar, expression.typeName, expression.variant, issues);
|
|
58
|
+
break;
|
|
59
|
+
case 'drop':
|
|
60
|
+
case 'pass':
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Records an error when a transform references an undefined AST type or variant.
|
|
66
|
+
*
|
|
67
|
+
* @param grammar - Parsed grammar model.
|
|
68
|
+
* @param typeName - AST type name from a transform expression.
|
|
69
|
+
* @param variant - AST variant label from a transform expression.
|
|
70
|
+
* @param issues - Issue list to append to.
|
|
71
|
+
*/
|
|
72
|
+
function validateAstTarget(grammar, typeName, variant, issues) {
|
|
73
|
+
if (grammar.astSchema === null) {
|
|
74
|
+
issues.push({
|
|
75
|
+
severity: 'error',
|
|
76
|
+
message: `transform references ${typeName}.${variant} but the grammar has no ast section`,
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const astType = grammar.astSchema.type(typeName);
|
|
81
|
+
if (astType === null) {
|
|
82
|
+
issues.push({
|
|
83
|
+
severity: 'error',
|
|
84
|
+
message: `transform references undefined ast type ${JSON.stringify(typeName)}`,
|
|
85
|
+
});
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const variants = collectAstVariants(astType.expression);
|
|
89
|
+
if (!variants.includes(variant)) {
|
|
90
|
+
issues.push({
|
|
91
|
+
severity: 'error',
|
|
92
|
+
message: `transform references ${typeName}.${variant} which is not declared in ast`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Collects variant labels declared on one AST type expression.
|
|
98
|
+
*
|
|
99
|
+
* @param expression - AST type right-hand side expression.
|
|
100
|
+
*/
|
|
101
|
+
function collectAstVariants(expression) {
|
|
102
|
+
if (expression.kind === 'choice') {
|
|
103
|
+
return expression.alternatives
|
|
104
|
+
.map((alternative) => alternative.label)
|
|
105
|
+
.filter((label) => label !== null);
|
|
106
|
+
}
|
|
107
|
+
if (expression.kind === 'sequence' || expression.kind === 'group') {
|
|
108
|
+
const inner = expression.kind === 'sequence'
|
|
109
|
+
? expression.elements[0]
|
|
110
|
+
: expression.element;
|
|
111
|
+
if (inner === undefined) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
return collectAstVariants(inner);
|
|
115
|
+
}
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Warns when pass(boundSlot) may collapse a single-terminal child production.
|
|
120
|
+
*
|
|
121
|
+
* @param grammar - Parsed grammar model.
|
|
122
|
+
* @param rule - Parent production transform rule.
|
|
123
|
+
* @param expression - Transform expression for one alternative.
|
|
124
|
+
* @param bnfProductions - Desugared BNF productions.
|
|
125
|
+
* @param issues - Issue list to append to.
|
|
126
|
+
*/
|
|
127
|
+
function collectPassCollapseWarnings(grammar, rule, expression, bnfProductions, issues) {
|
|
128
|
+
if (expression.kind !== 'pass') {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const parentProduction = grammar.production(rule.production);
|
|
132
|
+
if (parentProduction === null) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const boundSymbol = resolveBindingSymbol(parentProduction.expression, expression.reference);
|
|
136
|
+
if (boundSymbol === null || !grammar.hasProduction(boundSymbol)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (grammar.transformSchema?.hasRule(boundSymbol) === true) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!hasSingleTerminalAlternative(boundSymbol, bnfProductions)) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
issues.push({
|
|
146
|
+
severity: 'warning',
|
|
147
|
+
message: `pass(${expression.reference}) on ${rule.production} binds ${boundSymbol} `
|
|
148
|
+
+ `which has no transform rule and can match a single terminal; `
|
|
149
|
+
+ `add a transform for ${boundSymbol} or use build`,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Returns the symbol bound to a slot name on one production expression.
|
|
154
|
+
*
|
|
155
|
+
* @param expression - Production right-hand side expression.
|
|
156
|
+
* @param binding - Binding name from a pass transform.
|
|
157
|
+
*/
|
|
158
|
+
function resolveBindingSymbol(expression, binding) {
|
|
159
|
+
if (expression.kind === 'boundReference' && expression.binding === binding) {
|
|
160
|
+
return expression.name;
|
|
161
|
+
}
|
|
162
|
+
if (expression.kind === 'sequence') {
|
|
163
|
+
for (const element of expression.elements) {
|
|
164
|
+
const resolved = resolveBindingSymbol(element, binding);
|
|
165
|
+
if (resolved !== null) {
|
|
166
|
+
return resolved;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (expression.kind === 'choice') {
|
|
171
|
+
for (const alternative of expression.alternatives) {
|
|
172
|
+
const resolved = resolveBindingSymbol(alternative.expression, binding);
|
|
173
|
+
if (resolved !== null) {
|
|
174
|
+
return resolved;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (expression.kind === 'optional' || expression.kind === 'group') {
|
|
179
|
+
return resolveBindingSymbol(expression.element, binding);
|
|
180
|
+
}
|
|
181
|
+
if (expression.kind === 'repeat') {
|
|
182
|
+
return resolveBindingSymbol(expression.element, binding);
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Returns whether a production has a desugared alternative of one terminal symbol.
|
|
188
|
+
*
|
|
189
|
+
* @param productionName - Non-terminal production name.
|
|
190
|
+
* @param bnfProductions - Desugared BNF productions.
|
|
191
|
+
*/
|
|
192
|
+
function hasSingleTerminalAlternative(productionName, bnfProductions) {
|
|
193
|
+
return bnfProductions.some((production) => production.name === productionName
|
|
194
|
+
&& production.rhs.length === 1
|
|
195
|
+
&& isTerminalSymbol(production.rhs[0]));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Returns whether a BNF symbol is a terminal token or literal.
|
|
199
|
+
*
|
|
200
|
+
* @param symbol - Desugared right-hand side symbol.
|
|
201
|
+
*/
|
|
202
|
+
function isTerminalSymbol(symbol) {
|
|
203
|
+
return symbol?.kind === 'terminal' || symbol?.kind === 'token';
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Formats validation issues as stderr warning or error lines.
|
|
207
|
+
*
|
|
208
|
+
* @param issues - Validation issues to format.
|
|
209
|
+
*/
|
|
210
|
+
function formatTableValidationIssues(issues) {
|
|
211
|
+
return issues.map((issue) => issue.severity === 'error'
|
|
212
|
+
? `error: ${issue.message}`
|
|
213
|
+
: `warning: ${issue.message}`);
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=table-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-rule.js","sourceRoot":"","sources":["../../../src/lib/grammar/token-rule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-expression.js","sourceRoot":"","sources":["../../../src/lib/grammar/transform-expression.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-rule.js","sourceRoot":"","sources":["../../../src/lib/grammar/transform-rule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransformSchema = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* CST-to-AST rules from the `transform` section of a `.grammar` file.
|
|
6
|
+
*/
|
|
7
|
+
class TransformSchema {
|
|
8
|
+
rules;
|
|
9
|
+
rulesByProduction;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a transform schema from declared rules.
|
|
12
|
+
*
|
|
13
|
+
* @param rules - Production transform rules from the `transform` section.
|
|
14
|
+
*/
|
|
15
|
+
constructor(rules) {
|
|
16
|
+
this.rules = rules;
|
|
17
|
+
// Index rules by CST production name for lookup.
|
|
18
|
+
const rulesByProduction = new Map();
|
|
19
|
+
for (const rule of rules) {
|
|
20
|
+
rulesByProduction.set(rule.production, rule);
|
|
21
|
+
}
|
|
22
|
+
this.rulesByProduction = rulesByProduction;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns transform rules for a CST production.
|
|
26
|
+
*
|
|
27
|
+
* @param production - Production name to look up.
|
|
28
|
+
* @returns The matching rule, or null when the production is undefined.
|
|
29
|
+
*/
|
|
30
|
+
rule(production) {
|
|
31
|
+
return this.rulesByProduction.get(production) ?? null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether a CST production has transform rules defined.
|
|
35
|
+
*
|
|
36
|
+
* @param production - Production name to test.
|
|
37
|
+
*/
|
|
38
|
+
hasRule(production) {
|
|
39
|
+
return this.rulesByProduction.has(production);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.TransformSchema = TransformSchema;
|
|
43
|
+
//# sourceMappingURL=transform-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-schema.js","sourceRoot":"","sources":["../../../src/lib/grammar/transform-schema.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,eAAe;IASW;IAPlB,iBAAiB,CAAqC;IAEvE;;;;OAIG;IACH,YAAmC,KAA+B;QAA/B,UAAK,GAAL,KAAK,CAA0B;QAE9D,iDAAiD;QACjD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EACxB,CAAC;YACG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,UAAkB;QAE1B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,UAAkB;QAE7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;CACJ;AA1CD,0CA0CC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Public library entry point for parser-lr.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CstTransformer = exports.transformCst = exports.ShiftReduceEngine = exports.parseWithTableResult = exports.parseWithTable = exports.ParserLr = exports.formatParseOutput = exports.ParseContext = exports.ParseOutputError = exports.ParseContextError = exports.ParserLrError = exports.messageContainsStackTrace = exports.isParserLrError = exports.formatUserError = exports.tokenInventory = exports.parseLrAlgorithm = exports.isLrAlgorithm = exports.ParseTableError = exports.ParseTable = exports.PARSE_TABLE_VERSION = exports.LrAlgorithmError = exports.token = exports.isEofToken = exports.eofToken = exports.compileLexerRules = exports.LexerError = exports.EOF_TOKEN_NAME = exports.DEFAULT_LEXER_STATE = exports.lexChunksAsync = exports.lexChunks = exports.lexChunkStreamAsync = exports.lexChunkStream = exports.LexerStateError = exports.LexerInputError = exports.LexerCompileError = exports.Lexer = exports.readGrammar = exports.ReadGrammarError = exports.validateGrammarTable = exports.formatTableValidationIssues = exports.TransformSchema = exports.Grammar = exports.AstSchema = exports.AstNode = void 0;
|
|
7
|
+
var ast_node_js_1 = require("./ast/ast-node.js");
|
|
8
|
+
Object.defineProperty(exports, "AstNode", { enumerable: true, get: function () { return ast_node_js_1.AstNode; } });
|
|
9
|
+
var index_js_1 = require("./grammar/index.js");
|
|
10
|
+
Object.defineProperty(exports, "AstSchema", { enumerable: true, get: function () { return index_js_1.AstSchema; } });
|
|
11
|
+
Object.defineProperty(exports, "Grammar", { enumerable: true, get: function () { return index_js_1.Grammar; } });
|
|
12
|
+
Object.defineProperty(exports, "TransformSchema", { enumerable: true, get: function () { return index_js_1.TransformSchema; } });
|
|
13
|
+
var index_js_2 = require("./grammar/index.js");
|
|
14
|
+
Object.defineProperty(exports, "formatTableValidationIssues", { enumerable: true, get: function () { return index_js_2.formatTableValidationIssues; } });
|
|
15
|
+
Object.defineProperty(exports, "validateGrammarTable", { enumerable: true, get: function () { return index_js_2.validateGrammarTable; } });
|
|
16
|
+
var index_js_3 = require("./grammar/index.js");
|
|
17
|
+
Object.defineProperty(exports, "ReadGrammarError", { enumerable: true, get: function () { return index_js_3.ReadGrammarError; } });
|
|
18
|
+
Object.defineProperty(exports, "readGrammar", { enumerable: true, get: function () { return index_js_3.readGrammar; } });
|
|
19
|
+
var index_js_4 = require("./lexer/index.js");
|
|
20
|
+
Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return index_js_4.Lexer; } });
|
|
21
|
+
Object.defineProperty(exports, "LexerCompileError", { enumerable: true, get: function () { return index_js_4.LexerCompileError; } });
|
|
22
|
+
Object.defineProperty(exports, "LexerInputError", { enumerable: true, get: function () { return index_js_4.LexerInputError; } });
|
|
23
|
+
Object.defineProperty(exports, "LexerStateError", { enumerable: true, get: function () { return index_js_4.LexerStateError; } });
|
|
24
|
+
Object.defineProperty(exports, "lexChunkStream", { enumerable: true, get: function () { return index_js_4.lexChunkStream; } });
|
|
25
|
+
Object.defineProperty(exports, "lexChunkStreamAsync", { enumerable: true, get: function () { return index_js_4.lexChunkStreamAsync; } });
|
|
26
|
+
Object.defineProperty(exports, "lexChunks", { enumerable: true, get: function () { return index_js_4.lexChunks; } });
|
|
27
|
+
Object.defineProperty(exports, "lexChunksAsync", { enumerable: true, get: function () { return index_js_4.lexChunksAsync; } });
|
|
28
|
+
var index_js_5 = require("./lexer/index.js");
|
|
29
|
+
Object.defineProperty(exports, "DEFAULT_LEXER_STATE", { enumerable: true, get: function () { return index_js_5.DEFAULT_LEXER_STATE; } });
|
|
30
|
+
Object.defineProperty(exports, "EOF_TOKEN_NAME", { enumerable: true, get: function () { return index_js_5.EOF_TOKEN_NAME; } });
|
|
31
|
+
Object.defineProperty(exports, "LexerError", { enumerable: true, get: function () { return index_js_5.LexerError; } });
|
|
32
|
+
Object.defineProperty(exports, "compileLexerRules", { enumerable: true, get: function () { return index_js_5.compileLexerRules; } });
|
|
33
|
+
Object.defineProperty(exports, "eofToken", { enumerable: true, get: function () { return index_js_5.eofToken; } });
|
|
34
|
+
Object.defineProperty(exports, "isEofToken", { enumerable: true, get: function () { return index_js_5.isEofToken; } });
|
|
35
|
+
Object.defineProperty(exports, "token", { enumerable: true, get: function () { return index_js_5.token; } });
|
|
36
|
+
var index_js_6 = require("./parse-table/index.js");
|
|
37
|
+
Object.defineProperty(exports, "LrAlgorithmError", { enumerable: true, get: function () { return index_js_6.LrAlgorithmError; } });
|
|
38
|
+
Object.defineProperty(exports, "PARSE_TABLE_VERSION", { enumerable: true, get: function () { return index_js_6.PARSE_TABLE_VERSION; } });
|
|
39
|
+
Object.defineProperty(exports, "ParseTable", { enumerable: true, get: function () { return index_js_6.ParseTable; } });
|
|
40
|
+
Object.defineProperty(exports, "ParseTableError", { enumerable: true, get: function () { return index_js_6.ParseTableError; } });
|
|
41
|
+
Object.defineProperty(exports, "isLrAlgorithm", { enumerable: true, get: function () { return index_js_6.isLrAlgorithm; } });
|
|
42
|
+
Object.defineProperty(exports, "parseLrAlgorithm", { enumerable: true, get: function () { return index_js_6.parseLrAlgorithm; } });
|
|
43
|
+
Object.defineProperty(exports, "tokenInventory", { enumerable: true, get: function () { return index_js_6.tokenInventory; } });
|
|
44
|
+
var index_js_7 = require("./errors/index.js");
|
|
45
|
+
Object.defineProperty(exports, "formatUserError", { enumerable: true, get: function () { return index_js_7.formatUserError; } });
|
|
46
|
+
Object.defineProperty(exports, "isParserLrError", { enumerable: true, get: function () { return index_js_7.isParserLrError; } });
|
|
47
|
+
Object.defineProperty(exports, "messageContainsStackTrace", { enumerable: true, get: function () { return index_js_7.messageContainsStackTrace; } });
|
|
48
|
+
Object.defineProperty(exports, "ParserLrError", { enumerable: true, get: function () { return index_js_7.ParserLrError; } });
|
|
49
|
+
var parse_context_error_js_1 = require("./parse-context-error.js");
|
|
50
|
+
Object.defineProperty(exports, "ParseContextError", { enumerable: true, get: function () { return parse_context_error_js_1.ParseContextError; } });
|
|
51
|
+
var parse_output_error_js_1 = require("./parse-output-error.js");
|
|
52
|
+
Object.defineProperty(exports, "ParseOutputError", { enumerable: true, get: function () { return parse_output_error_js_1.ParseOutputError; } });
|
|
53
|
+
var parse_context_js_1 = require("./parse-context.js");
|
|
54
|
+
Object.defineProperty(exports, "ParseContext", { enumerable: true, get: function () { return parse_context_js_1.ParseContext; } });
|
|
55
|
+
var parse_output_js_1 = require("./parse-output.js");
|
|
56
|
+
Object.defineProperty(exports, "formatParseOutput", { enumerable: true, get: function () { return parse_output_js_1.formatParseOutput; } });
|
|
57
|
+
var parser_lr_js_1 = require("./parser-lr.js");
|
|
58
|
+
Object.defineProperty(exports, "ParserLr", { enumerable: true, get: function () { return parser_lr_js_1.ParserLr; } });
|
|
59
|
+
var index_js_8 = require("./shift-reduce/index.js");
|
|
60
|
+
Object.defineProperty(exports, "parseWithTable", { enumerable: true, get: function () { return index_js_8.parseWithTable; } });
|
|
61
|
+
Object.defineProperty(exports, "parseWithTableResult", { enumerable: true, get: function () { return index_js_8.parseWithTableResult; } });
|
|
62
|
+
Object.defineProperty(exports, "ShiftReduceEngine", { enumerable: true, get: function () { return index_js_8.ShiftReduceEngine; } });
|
|
63
|
+
var index_js_9 = require("./transform/index.js");
|
|
64
|
+
Object.defineProperty(exports, "transformCst", { enumerable: true, get: function () { return index_js_9.transformCst; } });
|
|
65
|
+
Object.defineProperty(exports, "CstTransformer", { enumerable: true, get: function () { return index_js_9.CstTransformer; } });
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAA4C;AAAnC,sGAAA,OAAO,OAAA;AA0BhB,+CAAyE;AAAhE,qGAAA,SAAS,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,2GAAA,eAAe,OAAA;AAC5C,+CAG4B;AAFxB,uHAAA,2BAA2B,OAAA;AAC3B,gHAAA,oBAAoB,OAAA;AAGxB,+CAAmE;AAA1D,4GAAA,gBAAgB,OAAA;AAAE,uGAAA,WAAW,OAAA;AACtC,6CAA8J;AAArJ,iGAAA,KAAK,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,0GAAA,cAAc,OAAA;AACnI,6CAQ0B;AAPtB,+GAAA,mBAAmB,OAAA;AACnB,0GAAA,cAAc,OAAA;AACd,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AACjB,oGAAA,QAAQ,OAAA;AACR,sGAAA,UAAU,OAAA;AACV,iGAAA,KAAK,OAAA;AAGT,mDAA6J;AAApJ,4GAAA,gBAAgB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAE5H,8CAA+G;AAAtG,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,qHAAA,yBAAyB,OAAA;AAAE,yGAAA,aAAa,OAAA;AACnF,mEAA6D;AAApD,2HAAA,iBAAiB,OAAA;AAC1B,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AAErB,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AACjB,oDAAkG;AAAzF,0GAAA,cAAc,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAEhE,iDAAoE;AAA3D,wGAAA,YAAY,OAAA;AAAE,0GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.token = exports.isEofToken = exports.eofToken = exports.EOF_TOKEN_NAME = exports.lexChunksAsync = exports.lexChunks = exports.lexChunkStreamAsync = exports.lexChunkStream = exports.Lexer = exports.LexerError = exports.rulesForState = exports.resolveLexerStates = exports.matchRule = exports.hasLongerPossibleMatchCrossRule = exports.hasLongerPossibleMatch = exports.findLongestMatch = exports.compileLexerRules = exports.DEFAULT_LEXER_STATE = exports.LexerStateError = exports.LexerInputError = exports.LexerCompileError = void 0;
|
|
4
|
+
var lexer_compile_error_js_1 = require("./lexer-compile-error.js");
|
|
5
|
+
Object.defineProperty(exports, "LexerCompileError", { enumerable: true, get: function () { return lexer_compile_error_js_1.LexerCompileError; } });
|
|
6
|
+
var lexer_input_error_js_1 = require("./lexer-input-error.js");
|
|
7
|
+
Object.defineProperty(exports, "LexerInputError", { enumerable: true, get: function () { return lexer_input_error_js_1.LexerInputError; } });
|
|
8
|
+
var lexer_state_error_js_1 = require("./lexer-state-error.js");
|
|
9
|
+
Object.defineProperty(exports, "LexerStateError", { enumerable: true, get: function () { return lexer_state_error_js_1.LexerStateError; } });
|
|
10
|
+
var lexer_compile_js_1 = require("./lexer-compile.js");
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_LEXER_STATE", { enumerable: true, get: function () { return lexer_compile_js_1.DEFAULT_LEXER_STATE; } });
|
|
12
|
+
Object.defineProperty(exports, "compileLexerRules", { enumerable: true, get: function () { return lexer_compile_js_1.compileLexerRules; } });
|
|
13
|
+
Object.defineProperty(exports, "findLongestMatch", { enumerable: true, get: function () { return lexer_compile_js_1.findLongestMatch; } });
|
|
14
|
+
Object.defineProperty(exports, "hasLongerPossibleMatch", { enumerable: true, get: function () { return lexer_compile_js_1.hasLongerPossibleMatch; } });
|
|
15
|
+
Object.defineProperty(exports, "hasLongerPossibleMatchCrossRule", { enumerable: true, get: function () { return lexer_compile_js_1.hasLongerPossibleMatchCrossRule; } });
|
|
16
|
+
Object.defineProperty(exports, "matchRule", { enumerable: true, get: function () { return lexer_compile_js_1.matchRule; } });
|
|
17
|
+
Object.defineProperty(exports, "resolveLexerStates", { enumerable: true, get: function () { return lexer_compile_js_1.resolveLexerStates; } });
|
|
18
|
+
Object.defineProperty(exports, "rulesForState", { enumerable: true, get: function () { return lexer_compile_js_1.rulesForState; } });
|
|
19
|
+
var lexer_error_js_1 = require("./lexer-error.js");
|
|
20
|
+
Object.defineProperty(exports, "LexerError", { enumerable: true, get: function () { return lexer_error_js_1.LexerError; } });
|
|
21
|
+
var lexer_js_1 = require("./lexer.js");
|
|
22
|
+
Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return lexer_js_1.Lexer; } });
|
|
23
|
+
Object.defineProperty(exports, "lexChunkStream", { enumerable: true, get: function () { return lexer_js_1.lexChunkStream; } });
|
|
24
|
+
Object.defineProperty(exports, "lexChunkStreamAsync", { enumerable: true, get: function () { return lexer_js_1.lexChunkStreamAsync; } });
|
|
25
|
+
Object.defineProperty(exports, "lexChunks", { enumerable: true, get: function () { return lexer_js_1.lexChunks; } });
|
|
26
|
+
Object.defineProperty(exports, "lexChunksAsync", { enumerable: true, get: function () { return lexer_js_1.lexChunksAsync; } });
|
|
27
|
+
var token_js_1 = require("./token.js");
|
|
28
|
+
Object.defineProperty(exports, "EOF_TOKEN_NAME", { enumerable: true, get: function () { return token_js_1.EOF_TOKEN_NAME; } });
|
|
29
|
+
Object.defineProperty(exports, "eofToken", { enumerable: true, get: function () { return token_js_1.eofToken; } });
|
|
30
|
+
Object.defineProperty(exports, "isEofToken", { enumerable: true, get: function () { return token_js_1.isEofToken; } });
|
|
31
|
+
Object.defineProperty(exports, "token", { enumerable: true, get: function () { return token_js_1.token; } });
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/lexer/index.ts"],"names":[],"mappings":";;;AAAA,mEAA6D;AAApD,2HAAA,iBAAiB,OAAA;AAC1B,+DAAyD;AAAhD,uHAAA,eAAe,OAAA;AACxB,+DAAyD;AAAhD,uHAAA,eAAe,OAAA;AACxB,uDAS4B;AARxB,uHAAA,mBAAmB,OAAA;AACnB,qHAAA,iBAAiB,OAAA;AACjB,oHAAA,gBAAgB,OAAA;AAChB,0HAAA,sBAAsB,OAAA;AACtB,mIAAA,+BAA+B,OAAA;AAC/B,6GAAA,SAAS,OAAA;AACT,sHAAA,kBAAkB,OAAA;AAClB,iHAAA,aAAa,OAAA;AAGjB,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AACnB,uCAMoB;AALhB,iGAAA,KAAK,OAAA;AACL,0GAAA,cAAc,OAAA;AACd,+GAAA,mBAAmB,OAAA;AACnB,qGAAA,SAAS,OAAA;AACT,0GAAA,cAAc,OAAA;AAElB,uCAAyE;AAAhE,0GAAA,cAAc,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,iGAAA,KAAK,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LexerCompileError = void 0;
|
|
4
|
+
const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
|
|
5
|
+
/**
|
|
6
|
+
* Error thrown when lexer rules cannot be compiled from a grammar.
|
|
7
|
+
*/
|
|
8
|
+
class LexerCompileError extends parser_lr_error_js_1.ParserLrError {
|
|
9
|
+
ruleName;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a lexer compile error for one token rule.
|
|
12
|
+
*
|
|
13
|
+
* @param ruleName - Token or skip rule name.
|
|
14
|
+
* @param message - Underlying regular expression error message.
|
|
15
|
+
*/
|
|
16
|
+
constructor(ruleName, message) {
|
|
17
|
+
super(`Invalid lexer rule ${JSON.stringify(ruleName)}: ${message}`);
|
|
18
|
+
this.ruleName = ruleName;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.LexerCompileError = LexerCompileError;
|
|
22
|
+
//# sourceMappingURL=lexer-compile-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer-compile-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,iBAAkB,SAAQ,kCAAa;IAS5B;IAPpB;;;;;OAKG;IACH,YACoB,QAAgB,EAChC,OAAe;QAGf,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAJpD,aAAQ,GAAR,QAAQ,CAAQ;IAKpC,CAAC;CACJ;AAfD,8CAeC"}
|