parser-lr 0.0.0 → 0.2.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/README.md +112 -1
- package/bin/parser-lr.js +12502 -16
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/ast/ast-node.d.ts +59 -0
- package/dist/lib/ast/ast-node.d.ts.map +1 -0
- package/dist/lib/ast/ast-node.js +66 -0
- package/dist/lib/ast/ast-node.js.map +1 -0
- package/dist/lib/errors/index.d.ts +2 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +2 -0
- package/dist/lib/errors/index.js.map +1 -0
- package/dist/lib/errors/parser-lr-error.d.ts +30 -0
- package/dist/lib/errors/parser-lr-error.d.ts.map +1 -0
- package/dist/lib/errors/parser-lr-error.js +45 -0
- package/dist/lib/errors/parser-lr-error.js.map +1 -0
- package/dist/lib/grammar/ast-schema.d.ts +28 -0
- package/dist/lib/grammar/ast-schema.d.ts.map +1 -0
- package/dist/lib/grammar/ast-schema.js +39 -0
- package/dist/lib/grammar/ast-schema.js.map +1 -0
- package/dist/lib/grammar/ast-type.d.ts +12 -0
- package/dist/lib/grammar/ast-type.d.ts.map +1 -0
- package/dist/lib/grammar/ast-type.js +2 -0
- package/dist/lib/grammar/ast-type.js.map +1 -0
- package/dist/lib/grammar/expression.d.ts +69 -0
- package/dist/lib/grammar/expression.d.ts.map +1 -0
- package/dist/lib/grammar/expression.js +2 -0
- package/dist/lib/grammar/expression.js.map +1 -0
- package/dist/lib/grammar/grammar-from-cst.d.ts +10 -0
- package/dist/lib/grammar/grammar-from-cst.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-from-cst.js +638 -0
- package/dist/lib/grammar/grammar-from-cst.js.map +1 -0
- package/dist/lib/grammar/grammar-literals.d.ts +18 -0
- package/dist/lib/grammar/grammar-literals.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-literals.js +67 -0
- package/dist/lib/grammar/grammar-literals.js.map +1 -0
- package/dist/lib/grammar/grammar.d.ts +45 -0
- package/dist/lib/grammar/grammar.d.ts.map +1 -0
- package/dist/lib/grammar/grammar.js +60 -0
- package/dist/lib/grammar/grammar.js.map +1 -0
- package/dist/lib/grammar/grammar.json +7950 -0
- package/dist/lib/grammar/index.d.ts +13 -0
- package/dist/lib/grammar/index.d.ts.map +1 -0
- package/dist/lib/grammar/index.js +7 -0
- package/dist/lib/grammar/index.js.map +1 -0
- package/dist/lib/grammar/meta-grammar-table.d.ts +19 -0
- package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -0
- package/dist/lib/grammar/meta-grammar-table.js +32 -0
- package/dist/lib/grammar/meta-grammar-table.js.map +1 -0
- package/dist/lib/grammar/production.d.ts +9 -0
- package/dist/lib/grammar/production.d.ts.map +1 -0
- package/dist/lib/grammar/production.js +2 -0
- package/dist/lib/grammar/production.js.map +1 -0
- package/dist/lib/grammar/read-grammar-error.d.ts +15 -0
- package/dist/lib/grammar/read-grammar-error.d.ts.map +1 -0
- package/dist/lib/grammar/read-grammar-error.js +18 -0
- package/dist/lib/grammar/read-grammar-error.js.map +1 -0
- package/dist/lib/grammar/read-grammar.d.ts +9 -0
- package/dist/lib/grammar/read-grammar.d.ts.map +1 -0
- package/dist/lib/grammar/read-grammar.js +21 -0
- package/dist/lib/grammar/read-grammar.js.map +1 -0
- package/dist/lib/grammar/token-rule.d.ts +11 -0
- package/dist/lib/grammar/token-rule.d.ts.map +1 -0
- package/dist/lib/grammar/token-rule.js +2 -0
- package/dist/lib/grammar/token-rule.js.map +1 -0
- package/dist/lib/grammar/transform-expression.d.ts +55 -0
- package/dist/lib/grammar/transform-expression.d.ts.map +1 -0
- package/dist/lib/grammar/transform-expression.js +2 -0
- package/dist/lib/grammar/transform-expression.js.map +1 -0
- package/dist/lib/grammar/transform-rule.d.ts +16 -0
- package/dist/lib/grammar/transform-rule.d.ts.map +1 -0
- package/dist/lib/grammar/transform-rule.js +2 -0
- package/dist/lib/grammar/transform-rule.js.map +1 -0
- package/dist/lib/grammar/transform-schema.d.ts +28 -0
- package/dist/lib/grammar/transform-schema.d.ts.map +1 -0
- package/dist/lib/grammar/transform-schema.js +39 -0
- package/dist/lib/grammar/transform-schema.js.map +1 -0
- package/dist/lib/index.d.ts +19 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +13 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/lexer/index.d.ts +10 -0
- package/dist/lib/lexer/index.d.ts.map +1 -0
- package/dist/lib/lexer/index.js +8 -0
- package/dist/lib/lexer/index.js.map +1 -0
- package/dist/lib/lexer/lexer-compile-error.d.ts +15 -0
- package/dist/lib/lexer/lexer-compile-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-compile-error.js +18 -0
- package/dist/lib/lexer/lexer-compile-error.js.map +1 -0
- package/dist/lib/lexer/lexer-compile.d.ts +94 -0
- package/dist/lib/lexer/lexer-compile.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-compile.js +189 -0
- package/dist/lib/lexer/lexer-compile.js.map +1 -0
- package/dist/lib/lexer/lexer-error.d.ts +15 -0
- package/dist/lib/lexer/lexer-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-error.js +18 -0
- package/dist/lib/lexer/lexer-error.js.map +1 -0
- package/dist/lib/lexer/lexer-input-error.d.ts +11 -0
- package/dist/lib/lexer/lexer-input-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-input-error.js +13 -0
- package/dist/lib/lexer/lexer-input-error.js.map +1 -0
- package/dist/lib/lexer/lexer-state-error.d.ts +13 -0
- package/dist/lib/lexer/lexer-state-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-state-error.js +15 -0
- package/dist/lib/lexer/lexer-state-error.js.map +1 -0
- package/dist/lib/lexer/lexer.d.ts +111 -0
- package/dist/lib/lexer/lexer.d.ts.map +1 -0
- package/dist/lib/lexer/lexer.js +270 -0
- package/dist/lib/lexer/lexer.js.map +1 -0
- package/dist/lib/lexer/token.d.ts +34 -0
- package/dist/lib/lexer/token.d.ts.map +1 -0
- package/dist/lib/lexer/token.js +38 -0
- package/dist/lib/lexer/token.js.map +1 -0
- package/dist/lib/parse-context-error.d.ts +13 -0
- package/dist/lib/parse-context-error.d.ts.map +1 -0
- package/dist/lib/parse-context-error.js +15 -0
- package/dist/lib/parse-context-error.js.map +1 -0
- package/dist/lib/parse-context.d.ts +106 -0
- package/dist/lib/parse-context.d.ts.map +1 -0
- package/dist/lib/parse-context.js +133 -0
- package/dist/lib/parse-context.js.map +1 -0
- package/dist/lib/parse-output-error.d.ts +13 -0
- package/dist/lib/parse-output-error.d.ts.map +1 -0
- package/dist/lib/parse-output-error.js +15 -0
- package/dist/lib/parse-output-error.js.map +1 -0
- package/dist/lib/parse-output.d.ts +10 -0
- package/dist/lib/parse-output.d.ts.map +1 -0
- package/dist/lib/parse-output.js +15 -0
- package/dist/lib/parse-output.js.map +1 -0
- package/dist/lib/parse-table/analysis/first-follow.d.ts +124 -0
- package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -0
- package/dist/lib/parse-table/analysis/first-follow.js +274 -0
- package/dist/lib/parse-table/analysis/first-follow.js.map +1 -0
- package/dist/lib/parse-table/analysis/index.d.ts +2 -0
- package/dist/lib/parse-table/analysis/index.d.ts.map +1 -0
- package/dist/lib/parse-table/analysis/index.js +2 -0
- package/dist/lib/parse-table/analysis/index.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.d.ts +65 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.js +136 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-production.d.ts +12 -0
- package/dist/lib/parse-table/bnf/bnf-production.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-production.js +2 -0
- package/dist/lib/parse-table/bnf/bnf-production.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.d.ts +40 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.js +35 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.js.map +1 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts +104 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.js +217 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -0
- package/dist/lib/parse-table/bnf/index.d.ts +6 -0
- package/dist/lib/parse-table/bnf/index.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/index.js +4 -0
- package/dist/lib/parse-table/bnf/index.js.map +1 -0
- package/dist/lib/parse-table/build-lr-table.d.ts +11 -0
- package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -0
- package/dist/lib/parse-table/build-lr-table.js +158 -0
- package/dist/lib/parse-table/build-lr-table.js.map +1 -0
- package/dist/lib/parse-table/index.d.ts +22 -0
- package/dist/lib/parse-table/index.d.ts.map +1 -0
- package/dist/lib/parse-table/index.js +15 -0
- package/dist/lib/parse-table/index.js.map +1 -0
- package/dist/lib/parse-table/lr-algorithm-error.d.ts +13 -0
- package/dist/lib/parse-table/lr-algorithm-error.d.ts.map +1 -0
- package/dist/lib/parse-table/lr-algorithm-error.js +15 -0
- package/dist/lib/parse-table/lr-algorithm-error.js.map +1 -0
- package/dist/lib/parse-table/lr-algorithm.d.ts +19 -0
- package/dist/lib/parse-table/lr-algorithm.d.ts.map +1 -0
- package/dist/lib/parse-table/lr-algorithm.js +27 -0
- package/dist/lib/parse-table/lr-algorithm.js.map +1 -0
- package/dist/lib/parse-table/lr0/index.d.ts +3 -0
- package/dist/lib/parse-table/lr0/index.d.ts.map +1 -0
- package/dist/lib/parse-table/lr0/index.js +2 -0
- package/dist/lib/parse-table/lr0/index.js.map +1 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +106 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.js +235 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -0
- package/dist/lib/parse-table/lr1/index.d.ts +3 -0
- package/dist/lib/parse-table/lr1/index.d.ts.map +1 -0
- package/dist/lib/parse-table/lr1/index.js +2 -0
- package/dist/lib/parse-table/lr1/index.js.map +1 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +157 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.js +380 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -0
- package/dist/lib/parse-table/parse-table-build-error.d.ts +17 -0
- package/dist/lib/parse-table/parse-table-build-error.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-build-error.js +20 -0
- package/dist/lib/parse-table/parse-table-build-error.js.map +1 -0
- package/dist/lib/parse-table/parse-table-error.d.ts +13 -0
- package/dist/lib/parse-table/parse-table-error.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-error.js +15 -0
- package/dist/lib/parse-table/parse-table-error.js.map +1 -0
- package/dist/lib/parse-table/parse-table-json.d.ts +50 -0
- package/dist/lib/parse-table/parse-table-json.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-json.js +9 -0
- package/dist/lib/parse-table/parse-table-json.js.map +1 -0
- package/dist/lib/parse-table/parse-table.d.ts +154 -0
- package/dist/lib/parse-table/parse-table.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table.js +314 -0
- package/dist/lib/parse-table/parse-table.js.map +1 -0
- package/dist/lib/parse-table/slr/index.d.ts +4 -0
- package/dist/lib/parse-table/slr/index.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/index.js +3 -0
- package/dist/lib/parse-table/slr/index.js.map +1 -0
- package/dist/lib/parse-table/slr/parse-action.d.ts +3 -0
- package/dist/lib/parse-table/slr/parse-action.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/parse-action.js +2 -0
- package/dist/lib/parse-table/slr/parse-action.js.map +1 -0
- package/dist/lib/parse-table/slr/slr-table.d.ts +14 -0
- package/dist/lib/parse-table/slr/slr-table.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/slr-table.js +14 -0
- package/dist/lib/parse-table/slr/slr-table.js.map +1 -0
- package/dist/lib/parse-table/table/index.d.ts +5 -0
- package/dist/lib/parse-table/table/index.d.ts.map +1 -0
- package/dist/lib/parse-table/table/index.js +4 -0
- package/dist/lib/parse-table/table/index.js.map +1 -0
- package/dist/lib/parse-table/table/lr-parse-table.d.ts +92 -0
- package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -0
- package/dist/lib/parse-table/table/lr-parse-table.js +144 -0
- package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -0
- package/dist/lib/parse-table/table/parse-action.d.ts +47 -0
- package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -0
- package/dist/lib/parse-table/table/parse-action.js +49 -0
- package/dist/lib/parse-table/table/parse-action.js.map +1 -0
- package/dist/lib/parse-table/table/table-builder-base.d.ts +63 -0
- package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -0
- package/dist/lib/parse-table/table/table-builder-base.js +129 -0
- package/dist/lib/parse-table/table/table-builder-base.js.map +1 -0
- package/dist/lib/parse-table/token-inventory.d.ts +9 -0
- package/dist/lib/parse-table/token-inventory.d.ts.map +1 -0
- package/dist/lib/parse-table/token-inventory.js +15 -0
- package/dist/lib/parse-table/token-inventory.js.map +1 -0
- package/dist/lib/parser-lr.d.ts +96 -2
- package/dist/lib/parser-lr.d.ts.map +1 -1
- package/dist/lib/parser-lr.js +130 -2
- package/dist/lib/parser-lr.js.map +1 -1
- package/dist/lib/shift-reduce/index.d.ts +3 -0
- package/dist/lib/shift-reduce/index.d.ts.map +1 -0
- package/dist/lib/shift-reduce/index.js +2 -0
- package/dist/lib/shift-reduce/index.js.map +1 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +82 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.js +204 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -0
- package/dist/lib/transform/binding-map.d.ts +32 -0
- package/dist/lib/transform/binding-map.d.ts.map +1 -0
- package/dist/lib/transform/binding-map.js +59 -0
- package/dist/lib/transform/binding-map.js.map +1 -0
- package/dist/lib/transform/cst-transformer.d.ts +158 -0
- package/dist/lib/transform/cst-transformer.d.ts.map +1 -0
- package/dist/lib/transform/cst-transformer.js +381 -0
- package/dist/lib/transform/cst-transformer.js.map +1 -0
- package/dist/lib/transform/index.d.ts +4 -0
- package/dist/lib/transform/index.d.ts.map +1 -0
- package/dist/lib/transform/index.js +3 -0
- package/dist/lib/transform/index.js.map +1 -0
- package/docs/grammar.md +170 -0
- package/package.json +12 -4
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { AstType } from './ast-type.js';
|
|
2
|
+
export { AstSchema } from './ast-schema.js';
|
|
3
|
+
export type { Alternative, BoundReferenceExpression, ChoiceExpression, Expression, GroupExpression, OptionalExpression, ReferenceExpression, RepeatExpression, SequenceExpression, TerminalExpression, } from './expression.js';
|
|
4
|
+
export { Grammar } from './grammar.js';
|
|
5
|
+
export { grammarFromCst } from './grammar-from-cst.js';
|
|
6
|
+
export { readGrammar } from './read-grammar.js';
|
|
7
|
+
export { ReadGrammarError } from './read-grammar-error.js';
|
|
8
|
+
export type { Production } from './production.js';
|
|
9
|
+
export type { TokenRule } from './token-rule.js';
|
|
10
|
+
export type { BuildTransform, DropTransform, FlattenTransform, FoldLeftTransform, FoldRightTransform, PassTransform, TransformExpression, } from './transform-expression.js';
|
|
11
|
+
export type { TransformAlternative, TransformRule } from './transform-rule.js';
|
|
12
|
+
export { TransformSchema } from './transform-schema.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EACR,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { AstSchema } from './ast-schema.js';
|
|
2
|
+
export { Grammar } from './grammar.js';
|
|
3
|
+
export { grammarFromCst } from './grammar-from-cst.js';
|
|
4
|
+
export { readGrammar } from './read-grammar.js';
|
|
5
|
+
export { ReadGrammarError } from './read-grammar-error.js';
|
|
6
|
+
export { TransformSchema } from './transform-schema.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Token } from '../lexer/token.js';
|
|
2
|
+
import { ParseTable } from '../parse-table/parse-table.js';
|
|
3
|
+
import type { Grammar } from './grammar.js';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the bootstrapped meta-grammar table for `.grammar` files.
|
|
6
|
+
*/
|
|
7
|
+
export declare function metaGrammarTable(): ParseTable;
|
|
8
|
+
/**
|
|
9
|
+
* Returns the bootstrapped meta-grammar model used to lex `.grammar` files.
|
|
10
|
+
*/
|
|
11
|
+
export declare function metaGrammar(): Grammar;
|
|
12
|
+
/**
|
|
13
|
+
* Lexes a `.grammar` source file using the bootstrapped meta-grammar table.
|
|
14
|
+
*
|
|
15
|
+
* @param source - Full grammar file text.
|
|
16
|
+
* @returns Matched tokens excluding `$eof`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function lexGrammarSource(source: string): readonly Token[];
|
|
19
|
+
//# sourceMappingURL=meta-grammar-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-grammar-table.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAQrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE,CAKjE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Lexer } from '../lexer/lexer.js';
|
|
2
|
+
import { isEofToken } from '../lexer/token.js';
|
|
3
|
+
import { ParseTable } from '../parse-table/parse-table.js';
|
|
4
|
+
import bootstrapTableJson from './grammar.json' with { type: 'json' };
|
|
5
|
+
const bootstrapTable = bootstrapTableJson;
|
|
6
|
+
let bootstrapMetaGrammar = null;
|
|
7
|
+
/**
|
|
8
|
+
* Returns the bootstrapped meta-grammar table for `.grammar` files.
|
|
9
|
+
*/
|
|
10
|
+
export function metaGrammarTable() {
|
|
11
|
+
return ParseTable.fromJson(bootstrapTable);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns the bootstrapped meta-grammar model used to lex `.grammar` files.
|
|
15
|
+
*/
|
|
16
|
+
export function metaGrammar() {
|
|
17
|
+
if (bootstrapMetaGrammar === null) {
|
|
18
|
+
bootstrapMetaGrammar = metaGrammarTable().toGrammar();
|
|
19
|
+
}
|
|
20
|
+
return bootstrapMetaGrammar;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Lexes a `.grammar` source file using the bootstrapped meta-grammar table.
|
|
24
|
+
*
|
|
25
|
+
* @param source - Full grammar file text.
|
|
26
|
+
* @returns Matched tokens excluding `$eof`.
|
|
27
|
+
*/
|
|
28
|
+
export function lexGrammarSource(source) {
|
|
29
|
+
const tokens = new Lexer(metaGrammar()).lex(source);
|
|
30
|
+
return tokens.filter((token) => !isEofToken(token));
|
|
31
|
+
}
|
|
32
|
+
//# 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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,kBAAkB,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEtE,MAAM,cAAc,GAAG,kBAAoC,CAAC;AAE5D,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAE5B,OAAO,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,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,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/production.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.js","sourceRoot":"","sources":["../../../src/lib/grammar/production.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ParserLrError } from '../errors/parser-lr-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when a `.grammar` file cannot be lexed or parsed.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ReadGrammarError extends ParserLrError {
|
|
6
|
+
readonly offset: number;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a grammar read error at a source offset.
|
|
9
|
+
*
|
|
10
|
+
* @param message - Human-readable failure description.
|
|
11
|
+
* @param offset - Source offset where reading failed.
|
|
12
|
+
*/
|
|
13
|
+
constructor(message: string, offset: number);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=read-grammar-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-grammar-error.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/read-grammar-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;aAU3B,MAAM,EAAE,MAAM;IARlC;;;;;OAKG;gBAEC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM;CAKrC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ParserLrError } from '../errors/parser-lr-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when a `.grammar` file cannot be lexed or parsed.
|
|
4
|
+
*/
|
|
5
|
+
export class ReadGrammarError extends ParserLrError {
|
|
6
|
+
offset;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a grammar read error at a source offset.
|
|
9
|
+
*
|
|
10
|
+
* @param message - Human-readable failure description.
|
|
11
|
+
* @param offset - Source offset where reading failed.
|
|
12
|
+
*/
|
|
13
|
+
constructor(message, offset) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.offset = offset;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAU3B;IARpB;;;;;OAKG;IACH,YACI,OAAe,EACC,MAAc;QAG9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;IAIlC,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Grammar } from './grammar.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a `.grammar` source string into a {@link Grammar} model.
|
|
4
|
+
*
|
|
5
|
+
* @param source - Full grammar file text.
|
|
6
|
+
* @returns Parsed grammar file model.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readGrammar(source: string): Grammar;
|
|
9
|
+
//# sourceMappingURL=read-grammar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-grammar.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/read-grammar.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAenD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Lexer } from '../lexer/lexer.js';
|
|
2
|
+
import { parseWithTableResult } from '../shift-reduce/shift-reduce-engine.js';
|
|
3
|
+
import { grammarFromCst } from './grammar-from-cst.js';
|
|
4
|
+
import { metaGrammar, metaGrammarTable } from './meta-grammar-table.js';
|
|
5
|
+
import { ReadGrammarError } from './read-grammar-error.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parses a `.grammar` source string into a {@link Grammar} model.
|
|
8
|
+
*
|
|
9
|
+
* @param source - Full grammar file text.
|
|
10
|
+
* @returns Parsed grammar file model.
|
|
11
|
+
*/
|
|
12
|
+
export function readGrammar(source) {
|
|
13
|
+
const table = metaGrammarTable();
|
|
14
|
+
const tokens = new Lexer(metaGrammar()).lex(source);
|
|
15
|
+
const result = parseWithTableResult(table, tokens);
|
|
16
|
+
if (result.cst === null) {
|
|
17
|
+
throw new ReadGrammarError(result.errorMessage ?? 'Grammar parse failed', result.errorOffset ?? 0);
|
|
18
|
+
}
|
|
19
|
+
return grammarFromCst(result.cst);
|
|
20
|
+
}
|
|
21
|
+
//# 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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IAEtC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EACvB,CAAC;QACG,MAAM,IAAI,gBAAgB,CACtB,MAAM,CAAC,YAAY,IAAI,sBAAsB,EAC7C,MAAM,CAAC,WAAW,IAAI,CAAC,CAC1B,CAAC;IACN,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexer rule from a `tokens` or `skip` section (`identifier = /…/ ;`).
|
|
3
|
+
*/
|
|
4
|
+
export interface TokenRule {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly pattern: string;
|
|
7
|
+
readonly flags: string;
|
|
8
|
+
/** Lexer states where this rule is active; omitted means all states. */
|
|
9
|
+
readonly states?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=token-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-rule.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/token-rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-rule.js","sourceRoot":"","sources":["../../../src/lib/grammar/token-rule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Omit the CST subtree from the AST.
|
|
3
|
+
*/
|
|
4
|
+
export interface DropTransform {
|
|
5
|
+
readonly kind: 'drop';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Lift a single child binding or subtree unchanged.
|
|
9
|
+
*/
|
|
10
|
+
export interface PassTransform {
|
|
11
|
+
readonly kind: 'pass';
|
|
12
|
+
readonly reference: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Left-associate repeated infix operators into chained AST nodes.
|
|
16
|
+
*/
|
|
17
|
+
export interface FoldLeftTransform {
|
|
18
|
+
readonly kind: 'foldLeft';
|
|
19
|
+
readonly typeName: string;
|
|
20
|
+
readonly variant: string;
|
|
21
|
+
readonly references: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Right-associate repeated infix operators into chained AST nodes.
|
|
25
|
+
*/
|
|
26
|
+
export interface FoldRightTransform {
|
|
27
|
+
readonly kind: 'foldRight';
|
|
28
|
+
readonly typeName: string;
|
|
29
|
+
readonly variant: string;
|
|
30
|
+
readonly references: readonly string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Flatten a `{ head tail }` repetition into a list AST node.
|
|
34
|
+
*/
|
|
35
|
+
export interface FlattenTransform {
|
|
36
|
+
readonly kind: 'flatten';
|
|
37
|
+
readonly typeName: string;
|
|
38
|
+
readonly variant: string;
|
|
39
|
+
readonly head: string;
|
|
40
|
+
readonly tail: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build an AST node (`type.#variant(arg, …)`).
|
|
44
|
+
*/
|
|
45
|
+
export interface BuildTransform {
|
|
46
|
+
readonly kind: 'build';
|
|
47
|
+
readonly typeName: string;
|
|
48
|
+
readonly variant: string;
|
|
49
|
+
readonly arguments: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Root discriminated union for transform expressions.
|
|
53
|
+
*/
|
|
54
|
+
export type TransformExpression = DropTransform | PassTransform | FoldLeftTransform | FoldRightTransform | FlattenTransform | BuildTransform;
|
|
55
|
+
//# sourceMappingURL=transform-expression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-expression.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/transform-expression.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAE9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GACzB,aAAa,GACb,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-expression.js","sourceRoot":"","sources":["../../../src/lib/grammar/transform-expression.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TransformExpression } from './transform-expression.js';
|
|
2
|
+
/**
|
|
3
|
+
* Maps one CST `#` alternative to a transform expression.
|
|
4
|
+
*/
|
|
5
|
+
export interface TransformAlternative {
|
|
6
|
+
readonly label: string;
|
|
7
|
+
readonly expression: TransformExpression;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* CST production transform (`production -> #alt expr | … ;`).
|
|
11
|
+
*/
|
|
12
|
+
export interface TransformRule {
|
|
13
|
+
readonly production: string;
|
|
14
|
+
readonly alternatives: readonly TransformAlternative[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=transform-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-rule.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/transform-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-rule.js","sourceRoot":"","sources":["../../../src/lib/grammar/transform-rule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TransformRule } from './transform-rule.js';
|
|
2
|
+
/**
|
|
3
|
+
* CST-to-AST rules from the `transform` section of a `.grammar` file.
|
|
4
|
+
*/
|
|
5
|
+
export declare class TransformSchema {
|
|
6
|
+
readonly rules: readonly TransformRule[];
|
|
7
|
+
private readonly rulesByProduction;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a transform schema from declared rules.
|
|
10
|
+
*
|
|
11
|
+
* @param rules - Production transform rules from the `transform` section.
|
|
12
|
+
*/
|
|
13
|
+
constructor(rules: readonly TransformRule[]);
|
|
14
|
+
/**
|
|
15
|
+
* Returns transform rules for a CST production.
|
|
16
|
+
*
|
|
17
|
+
* @param production - Production name to look up.
|
|
18
|
+
* @returns The matching rule, or null when the production is undefined.
|
|
19
|
+
*/
|
|
20
|
+
rule(production: string): TransformRule | null;
|
|
21
|
+
/**
|
|
22
|
+
* Whether a CST production has transform rules defined.
|
|
23
|
+
*
|
|
24
|
+
* @param production - Production name to test.
|
|
25
|
+
*/
|
|
26
|
+
hasRule(production: string): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=transform-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-schema.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/transform-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,qBAAa,eAAe;aASW,KAAK,EAAE,SAAS,aAAa,EAAE;IAPlE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IAEvE;;;;OAIG;gBACgC,KAAK,EAAE,SAAS,aAAa,EAAE;IAalE;;;;;OAKG;IACI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAKrD;;;;OAIG;IACI,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAI9C"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST-to-AST rules from the `transform` section of a `.grammar` file.
|
|
3
|
+
*/
|
|
4
|
+
export class TransformSchema {
|
|
5
|
+
rules;
|
|
6
|
+
rulesByProduction;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a transform schema from declared rules.
|
|
9
|
+
*
|
|
10
|
+
* @param rules - Production transform rules from the `transform` section.
|
|
11
|
+
*/
|
|
12
|
+
constructor(rules) {
|
|
13
|
+
this.rules = rules;
|
|
14
|
+
// Index rules by CST production name for lookup.
|
|
15
|
+
const rulesByProduction = new Map();
|
|
16
|
+
for (const rule of rules) {
|
|
17
|
+
rulesByProduction.set(rule.production, rule);
|
|
18
|
+
}
|
|
19
|
+
this.rulesByProduction = rulesByProduction;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns transform rules for a CST production.
|
|
23
|
+
*
|
|
24
|
+
* @param production - Production name to look up.
|
|
25
|
+
* @returns The matching rule, or null when the production is undefined.
|
|
26
|
+
*/
|
|
27
|
+
rule(production) {
|
|
28
|
+
return this.rulesByProduction.get(production) ?? null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether a CST production has transform rules defined.
|
|
32
|
+
*
|
|
33
|
+
* @param production - Production name to test.
|
|
34
|
+
*/
|
|
35
|
+
hasRule(production) {
|
|
36
|
+
return this.rulesByProduction.has(production);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# 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,MAAM,OAAO,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"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public library entry point for parser-lr.
|
|
3
3
|
*/
|
|
4
|
+
export { AstNode } from './ast/ast-node.js';
|
|
5
|
+
export type { SourceLocation } from './ast/ast-node.js';
|
|
6
|
+
export type { Alternative, AstType, BoundReferenceExpression, BuildTransform, ChoiceExpression, DropTransform, Expression, FlattenTransform, FoldLeftTransform, FoldRightTransform, GroupExpression, OptionalExpression, PassTransform, Production, ReferenceExpression, RepeatExpression, SequenceExpression, TerminalExpression, TokenRule, TransformAlternative, TransformExpression, TransformRule, } from './grammar/index.js';
|
|
7
|
+
export { AstSchema, Grammar, TransformSchema } from './grammar/index.js';
|
|
8
|
+
export { ReadGrammarError, readGrammar } from './grammar/index.js';
|
|
9
|
+
export { Lexer, LexerCompileError, LexerInputError, LexerStateError, lexChunkStream, lexChunkStreamAsync, lexChunks, lexChunksAsync } from './lexer/index.js';
|
|
10
|
+
export { DEFAULT_LEXER_STATE, EOF_TOKEN_NAME, LexerError, compileLexerRules, eofToken, isEofToken, token, } from './lexer/index.js';
|
|
11
|
+
export type { CompiledLexerRules, CompiledRule, Token } from './lexer/index.js';
|
|
12
|
+
export { LrAlgorithmError, PARSE_TABLE_VERSION, ParseTable, ParseTableError, isLrAlgorithm, parseLrAlgorithm, tokenInventory } from './parse-table/index.js';
|
|
13
|
+
export type { LrAlgorithm, ParseTableJson } from './parse-table/index.js';
|
|
14
|
+
export { formatUserError, isParserLrError, messageContainsStackTrace, ParserLrError } from './errors/index.js';
|
|
15
|
+
export { ParseContextError } from './parse-context-error.js';
|
|
16
|
+
export { ParseOutputError } from './parse-output-error.js';
|
|
17
|
+
export { ParseContext } from './parse-context.js';
|
|
18
|
+
export type { ParseContextSources } from './parse-context.js';
|
|
19
|
+
export { formatParseOutput } from './parse-output.js';
|
|
4
20
|
export { ParserLr } from './parser-lr.js';
|
|
21
|
+
export { parseWithTable, parseWithTableResult, ShiftReduceEngine } from './shift-reduce/index.js';
|
|
22
|
+
export type { ShiftReduceParseResult } from './shift-reduce/index.js';
|
|
23
|
+
export { transformCst, CstTransformer } from './transform/index.js';
|
|
5
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACR,WAAW,EACX,OAAO,EACP,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9J,OAAO,EACH,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,KAAK,GACR,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7J,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClG,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public library entry point for parser-lr.
|
|
3
3
|
*/
|
|
4
|
+
export { AstNode } from './ast/ast-node.js';
|
|
5
|
+
export { AstSchema, Grammar, TransformSchema } from './grammar/index.js';
|
|
6
|
+
export { ReadGrammarError, readGrammar } from './grammar/index.js';
|
|
7
|
+
export { Lexer, LexerCompileError, LexerInputError, LexerStateError, lexChunkStream, lexChunkStreamAsync, lexChunks, lexChunksAsync } from './lexer/index.js';
|
|
8
|
+
export { DEFAULT_LEXER_STATE, EOF_TOKEN_NAME, LexerError, compileLexerRules, eofToken, isEofToken, token, } from './lexer/index.js';
|
|
9
|
+
export { LrAlgorithmError, PARSE_TABLE_VERSION, ParseTable, ParseTableError, isLrAlgorithm, parseLrAlgorithm, tokenInventory } from './parse-table/index.js';
|
|
10
|
+
export { formatUserError, isParserLrError, messageContainsStackTrace, ParserLrError } from './errors/index.js';
|
|
11
|
+
export { ParseContextError } from './parse-context-error.js';
|
|
12
|
+
export { ParseOutputError } from './parse-output-error.js';
|
|
13
|
+
export { ParseContext } from './parse-context.js';
|
|
14
|
+
export { formatParseOutput } from './parse-output.js';
|
|
4
15
|
export { ParserLr } from './parser-lr.js';
|
|
16
|
+
export { parseWithTable, parseWithTableResult, ShiftReduceEngine } from './shift-reduce/index.js';
|
|
17
|
+
export { transformCst, CstTransformer } from './transform/index.js';
|
|
5
18
|
//# sourceMappingURL=index.js.map
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA0B5C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9J,OAAO,EACH,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,KAAK,GACR,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7J,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAElG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { LexerCompileError } from './lexer-compile-error.js';
|
|
2
|
+
export { LexerInputError } from './lexer-input-error.js';
|
|
3
|
+
export { LexerStateError } from './lexer-state-error.js';
|
|
4
|
+
export { DEFAULT_LEXER_STATE, compileLexerRules, findLongestMatch, hasLongerPossibleMatch, hasLongerPossibleMatchCrossRule, matchRule, resolveLexerStates, rulesForState, } from './lexer-compile.js';
|
|
5
|
+
export type { CompiledLexerRules, CompiledRule } from './lexer-compile.js';
|
|
6
|
+
export { LexerError } from './lexer-error.js';
|
|
7
|
+
export { Lexer, lexChunkStream, lexChunkStreamAsync, lexChunks, lexChunksAsync, } from './lexer.js';
|
|
8
|
+
export { EOF_TOKEN_NAME, eofToken, isEofToken, token } from './token.js';
|
|
9
|
+
export type { Token } from './token.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,+BAA+B,EAC/B,SAAS,EACT,kBAAkB,EAClB,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,KAAK,EACL,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { LexerCompileError } from './lexer-compile-error.js';
|
|
2
|
+
export { LexerInputError } from './lexer-input-error.js';
|
|
3
|
+
export { LexerStateError } from './lexer-state-error.js';
|
|
4
|
+
export { DEFAULT_LEXER_STATE, compileLexerRules, findLongestMatch, hasLongerPossibleMatch, hasLongerPossibleMatchCrossRule, matchRule, resolveLexerStates, rulesForState, } from './lexer-compile.js';
|
|
5
|
+
export { LexerError } from './lexer-error.js';
|
|
6
|
+
export { Lexer, lexChunkStream, lexChunkStreamAsync, lexChunks, lexChunksAsync, } from './lexer.js';
|
|
7
|
+
export { EOF_TOKEN_NAME, eofToken, isEofToken, token } from './token.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/lexer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,+BAA+B,EAC/B,SAAS,EACT,kBAAkB,EAClB,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,KAAK,EACL,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ParserLrError } from '../errors/parser-lr-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when lexer rules cannot be compiled from a grammar.
|
|
4
|
+
*/
|
|
5
|
+
export declare class LexerCompileError extends ParserLrError {
|
|
6
|
+
readonly ruleName: string;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a lexer compile error for one token rule.
|
|
9
|
+
*
|
|
10
|
+
* @param ruleName - Token or skip rule name.
|
|
11
|
+
* @param message - Underlying regular expression error message.
|
|
12
|
+
*/
|
|
13
|
+
constructor(ruleName: string, message: string);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=lexer-compile-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer-compile-error.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;aAS5B,QAAQ,EAAE,MAAM;IAPpC;;;;;OAKG;gBAEiB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM;CAKtB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ParserLrError } from '../errors/parser-lr-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when lexer rules cannot be compiled from a grammar.
|
|
4
|
+
*/
|
|
5
|
+
export class LexerCompileError extends ParserLrError {
|
|
6
|
+
ruleName;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a lexer compile error for one token rule.
|
|
9
|
+
*
|
|
10
|
+
* @param ruleName - Token or skip rule name.
|
|
11
|
+
* @param message - Underlying regular expression error message.
|
|
12
|
+
*/
|
|
13
|
+
constructor(ruleName, message) {
|
|
14
|
+
super(`Invalid lexer rule ${JSON.stringify(ruleName)}: ${message}`);
|
|
15
|
+
this.ruleName = ruleName;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;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"}
|