parser-lr 0.6.0 → 0.7.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.
Files changed (173) hide show
  1. package/README.md +14 -30
  2. package/bin/parser-lr.js +11388 -11409
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/grammar/index.d.ts +1 -1
  5. package/dist/lib/grammar/index.d.ts.map +1 -1
  6. package/dist/lib/grammar/index.js +1 -1
  7. package/dist/lib/grammar/index.js.map +1 -1
  8. package/dist/lib/grammar/meta-grammar-table.d.ts +0 -12
  9. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
  10. package/dist/lib/grammar/meta-grammar-table.js +5 -22
  11. package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
  12. package/dist/lib/grammar-entry.d.ts +42 -0
  13. package/dist/lib/grammar-entry.d.ts.map +1 -0
  14. package/dist/lib/grammar-entry.js +45 -0
  15. package/dist/lib/grammar-entry.js.map +1 -0
  16. package/dist/lib/index.d.ts +7 -5
  17. package/dist/lib/index.d.ts.map +1 -1
  18. package/dist/lib/index.js +0 -3
  19. package/dist/lib/index.js.map +1 -1
  20. package/dist/lib/parse-context.d.ts +4 -15
  21. package/dist/lib/parse-context.d.ts.map +1 -1
  22. package/dist/lib/parse-context.js +4 -23
  23. package/dist/lib/parse-context.js.map +1 -1
  24. package/dist/lib/transform/grammar-fixture.js +3 -3
  25. package/dist/lib/transform/grammar-fixture.js.map +1 -1
  26. package/docs/parser-lr-browser-lib-split.md +174 -0
  27. package/package.json +26 -3
  28. package/dist/lib/grammar/grammar-json-path.d.ts +0 -2
  29. package/dist/lib/grammar/grammar-json-path.d.ts.map +0 -1
  30. package/dist/lib/grammar/grammar-json-path.esm.d.ts +0 -5
  31. package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +0 -1
  32. package/dist/lib/grammar/grammar-json-path.esm.js +0 -9
  33. package/dist/lib/grammar/grammar-json-path.esm.js.map +0 -1
  34. package/dist/lib/grammar/grammar-json-path.js +0 -2
  35. package/dist/lib/grammar/grammar-json-path.js.map +0 -1
  36. package/dist/lib-cjs/ast/ast-node.js +0 -70
  37. package/dist/lib-cjs/ast/ast-node.js.map +0 -1
  38. package/dist/lib-cjs/errors/index.js +0 -9
  39. package/dist/lib-cjs/errors/index.js.map +0 -1
  40. package/dist/lib-cjs/errors/parser-lr-error.js +0 -52
  41. package/dist/lib-cjs/errors/parser-lr-error.js.map +0 -1
  42. package/dist/lib-cjs/grammar/ast-schema.js +0 -43
  43. package/dist/lib-cjs/grammar/ast-schema.js.map +0 -1
  44. package/dist/lib-cjs/grammar/ast-type.js +0 -3
  45. package/dist/lib-cjs/grammar/ast-type.js.map +0 -1
  46. package/dist/lib-cjs/grammar/expression.js +0 -3
  47. package/dist/lib-cjs/grammar/expression.js.map +0 -1
  48. package/dist/lib-cjs/grammar/grammar-from-cst.js +0 -641
  49. package/dist/lib-cjs/grammar/grammar-from-cst.js.map +0 -1
  50. package/dist/lib-cjs/grammar/grammar-json-path.js +0 -13
  51. package/dist/lib-cjs/grammar/grammar-json-path.js.map +0 -1
  52. package/dist/lib-cjs/grammar/grammar-literals.js +0 -71
  53. package/dist/lib-cjs/grammar/grammar-literals.js.map +0 -1
  54. package/dist/lib-cjs/grammar/grammar.js +0 -64
  55. package/dist/lib-cjs/grammar/grammar.js.map +0 -1
  56. package/dist/lib-cjs/grammar/grammar.json +0 -5760
  57. package/dist/lib-cjs/grammar/index.js +0 -21
  58. package/dist/lib-cjs/grammar/index.js.map +0 -1
  59. package/dist/lib-cjs/grammar/meta-grammar-table.js +0 -68
  60. package/dist/lib-cjs/grammar/meta-grammar-table.js.map +0 -1
  61. package/dist/lib-cjs/grammar/production.js +0 -3
  62. package/dist/lib-cjs/grammar/production.js.map +0 -1
  63. package/dist/lib-cjs/grammar/read-grammar-error.js +0 -22
  64. package/dist/lib-cjs/grammar/read-grammar-error.js.map +0 -1
  65. package/dist/lib-cjs/grammar/read-grammar.js +0 -24
  66. package/dist/lib-cjs/grammar/read-grammar.js.map +0 -1
  67. package/dist/lib-cjs/grammar/table-validator.js +0 -262
  68. package/dist/lib-cjs/grammar/table-validator.js.map +0 -1
  69. package/dist/lib-cjs/grammar/token-rule.js +0 -3
  70. package/dist/lib-cjs/grammar/token-rule.js.map +0 -1
  71. package/dist/lib-cjs/grammar/transform-expression.js +0 -3
  72. package/dist/lib-cjs/grammar/transform-expression.js.map +0 -1
  73. package/dist/lib-cjs/grammar/transform-rule.js +0 -3
  74. package/dist/lib-cjs/grammar/transform-rule.js.map +0 -1
  75. package/dist/lib-cjs/grammar/transform-schema.js +0 -43
  76. package/dist/lib-cjs/grammar/transform-schema.js.map +0 -1
  77. package/dist/lib-cjs/index.js +0 -66
  78. package/dist/lib-cjs/index.js.map +0 -1
  79. package/dist/lib-cjs/lexer/index.js +0 -32
  80. package/dist/lib-cjs/lexer/index.js.map +0 -1
  81. package/dist/lib-cjs/lexer/lexer-compile-error.js +0 -22
  82. package/dist/lib-cjs/lexer/lexer-compile-error.js.map +0 -1
  83. package/dist/lib-cjs/lexer/lexer-compile.js +0 -201
  84. package/dist/lib-cjs/lexer/lexer-compile.js.map +0 -1
  85. package/dist/lib-cjs/lexer/lexer-error.js +0 -22
  86. package/dist/lib-cjs/lexer/lexer-error.js.map +0 -1
  87. package/dist/lib-cjs/lexer/lexer-input-error.js +0 -17
  88. package/dist/lib-cjs/lexer/lexer-input-error.js.map +0 -1
  89. package/dist/lib-cjs/lexer/lexer-state-error.js +0 -19
  90. package/dist/lib-cjs/lexer/lexer-state-error.js.map +0 -1
  91. package/dist/lib-cjs/lexer/lexer.js +0 -278
  92. package/dist/lib-cjs/lexer/lexer.js.map +0 -1
  93. package/dist/lib-cjs/lexer/token.js +0 -44
  94. package/dist/lib-cjs/lexer/token.js.map +0 -1
  95. package/dist/lib-cjs/package.json +0 -3
  96. package/dist/lib-cjs/parse-context-error.js +0 -19
  97. package/dist/lib-cjs/parse-context-error.js.map +0 -1
  98. package/dist/lib-cjs/parse-context.js +0 -137
  99. package/dist/lib-cjs/parse-context.js.map +0 -1
  100. package/dist/lib-cjs/parse-output-error.js +0 -19
  101. package/dist/lib-cjs/parse-output-error.js.map +0 -1
  102. package/dist/lib-cjs/parse-output.js +0 -18
  103. package/dist/lib-cjs/parse-output.js.map +0 -1
  104. package/dist/lib-cjs/parse-table/analysis/first-follow.js +0 -294
  105. package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +0 -1
  106. package/dist/lib-cjs/parse-table/analysis/index.js +0 -9
  107. package/dist/lib-cjs/parse-table/analysis/index.js.map +0 -1
  108. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +0 -140
  109. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +0 -1
  110. package/dist/lib-cjs/parse-table/bnf/bnf-production.js +0 -3
  111. package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +0 -1
  112. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +0 -39
  113. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +0 -1
  114. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +0 -224
  115. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +0 -1
  116. package/dist/lib-cjs/parse-table/bnf/index.js +0 -13
  117. package/dist/lib-cjs/parse-table/bnf/index.js.map +0 -1
  118. package/dist/lib-cjs/parse-table/build-lr-table.js +0 -171
  119. package/dist/lib-cjs/parse-table/build-lr-table.js.map +0 -1
  120. package/dist/lib-cjs/parse-table/index.js +0 -49
  121. package/dist/lib-cjs/parse-table/index.js.map +0 -1
  122. package/dist/lib-cjs/parse-table/lr-algorithm-error.js +0 -19
  123. package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +0 -1
  124. package/dist/lib-cjs/parse-table/lr-algorithm.js +0 -31
  125. package/dist/lib-cjs/parse-table/lr-algorithm.js.map +0 -1
  126. package/dist/lib-cjs/parse-table/lr0/index.js +0 -14
  127. package/dist/lib-cjs/parse-table/lr0/index.js.map +0 -1
  128. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +0 -286
  129. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +0 -1
  130. package/dist/lib-cjs/parse-table/lr1/index.js +0 -18
  131. package/dist/lib-cjs/parse-table/lr1/index.js.map +0 -1
  132. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +0 -432
  133. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +0 -1
  134. package/dist/lib-cjs/parse-table/parse-table-build-error.js +0 -24
  135. package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +0 -1
  136. package/dist/lib-cjs/parse-table/parse-table-error.js +0 -19
  137. package/dist/lib-cjs/parse-table/parse-table-error.js.map +0 -1
  138. package/dist/lib-cjs/parse-table/parse-table-json.js +0 -12
  139. package/dist/lib-cjs/parse-table/parse-table-json.js.map +0 -1
  140. package/dist/lib-cjs/parse-table/parse-table.js +0 -345
  141. package/dist/lib-cjs/parse-table/parse-table.js.map +0 -1
  142. package/dist/lib-cjs/parse-table/slr/index.js +0 -13
  143. package/dist/lib-cjs/parse-table/slr/index.js.map +0 -1
  144. package/dist/lib-cjs/parse-table/slr/parse-action.js +0 -8
  145. package/dist/lib-cjs/parse-table/slr/parse-action.js.map +0 -1
  146. package/dist/lib-cjs/parse-table/slr/slr-table.js +0 -18
  147. package/dist/lib-cjs/parse-table/slr/slr-table.js.map +0 -1
  148. package/dist/lib-cjs/parse-table/table/index.js +0 -21
  149. package/dist/lib-cjs/parse-table/table/index.js.map +0 -1
  150. package/dist/lib-cjs/parse-table/table/lr-parse-table.js +0 -192
  151. package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +0 -1
  152. package/dist/lib-cjs/parse-table/table/parse-action.js +0 -54
  153. package/dist/lib-cjs/parse-table/table/parse-action.js.map +0 -1
  154. package/dist/lib-cjs/parse-table/table/table-builder-base.js +0 -153
  155. package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +0 -1
  156. package/dist/lib-cjs/parse-table/token-inventory.js +0 -18
  157. package/dist/lib-cjs/parse-table/token-inventory.js.map +0 -1
  158. package/dist/lib-cjs/parser-lr.js +0 -143
  159. package/dist/lib-cjs/parser-lr.js.map +0 -1
  160. package/dist/lib-cjs/shift-reduce/index.js +0 -11
  161. package/dist/lib-cjs/shift-reduce/index.js.map +0 -1
  162. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +0 -224
  163. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +0 -1
  164. package/dist/lib-cjs/transform/binding-map.js +0 -82
  165. package/dist/lib-cjs/transform/binding-map.js.map +0 -1
  166. package/dist/lib-cjs/transform/cst-transformer.js +0 -480
  167. package/dist/lib-cjs/transform/cst-transformer.js.map +0 -1
  168. package/dist/lib-cjs/transform/grammar-fixture.js +0 -109
  169. package/dist/lib-cjs/transform/grammar-fixture.js.map +0 -1
  170. package/dist/lib-cjs/transform/index.js +0 -12
  171. package/dist/lib-cjs/transform/index.js.map +0 -1
  172. package/docs/parser-lr-enhancement-proposals.md +0 -337
  173. package/grammars/fixtures/table-only-import/table-only-smoke.cjs +0 -38
package/README.md CHANGED
@@ -82,59 +82,43 @@ Output is a JSON object `{ "ast": … }`. On a syntax error, `ast` is `null`.
82
82
 
83
83
  ## Library
84
84
 
85
- The package ships two compiled trees from the same TypeScript sources:
85
+ The package ships an ESM library at `dist/lib/` with TypeScript types in `dist/lib/index.d.ts`. Import with `import { … } from 'parser-lr'`.
86
86
 
87
- | Format | Path | Use |
88
- |--------|------|-----|
89
- | ESM (default) | `dist/lib/` | `import { … } from 'parser-lr'` |
90
- | CommonJS | `dist/lib-cjs/` | `require('parser-lr')` in CJS tools and Jest |
87
+ The main entry is browser-safe for table-only parsing. Grammar-file APIs live on the Node-only subpath `parser-lr/grammar`.
91
88
 
92
- `package.json` `exports` selects the right entry automatically. Types come from `dist/lib/index.d.ts` for both.
89
+ After `npm install parser-lr`, the tarball also includes [`docs/`](docs/grammar.md) and example [`grammars/`](grammars/calc.grammar) for offline reference.
93
90
 
94
- The API is browser-safe; the CLI is Node-only. After `npm install parser-lr`, the tarball also includes [`docs/`](docs/grammar.md) and example [`grammars/`](grammars/calc.grammar) for offline reference.
95
-
96
- ### ESM (Node and bundlers)
91
+ ### Table-only runtime (browser and Node)
97
92
 
98
93
  ```typescript
99
94
  import { readFile } from 'node:fs/promises';
100
95
  import { ParseContext } from 'parser-lr';
101
96
 
102
- const grammarSource = await readFile('mylang.grammar', 'utf8');
103
- const context = ParseContext.fromGrammar(grammarSource, 'lr1');
97
+ const tableJson = await readFile('mylang.json', 'utf8');
98
+ const context = ParseContext.fromTableJson(tableJson);
104
99
 
105
100
  const source = await readFile('program.txt', 'utf8');
106
101
  const ast = context.parseSource(source);
107
102
  ```
108
103
 
109
- ### CommonJS (Jest and legacy `require`)
110
-
111
- ```javascript
112
- const { ParseContext } = require('parser-lr');
113
-
114
- const context = ParseContext.fromGrammar(grammarSource, 'lr1');
115
- const ast = context.parseSource(source);
116
- ```
117
-
118
- When testing this package from a clone, run `npm run build` first so `dist/lib-cjs/` exists. Published installs include both trees via `prepack`.
119
-
120
- ### Serialized parse tables
121
-
122
- Load a pre-built table instead of a grammar file:
104
+ ### Grammar-file path (Node only)
123
105
 
124
106
  ```typescript
125
107
  import { readFile } from 'node:fs/promises';
126
- import { ParseContext } from 'parser-lr';
108
+ import { parseContextFromGrammar } from 'parser-lr/grammar';
127
109
 
128
- const tableJson = await readFile('mylang.json', 'utf8');
129
- const context = ParseContext.fromTableJson(tableJson);
110
+ const grammarSource = await readFile('mylang.grammar', 'utf8');
111
+ const context = parseContextFromGrammar(grammarSource, 'lr1');
130
112
 
131
113
  const source = await readFile('program.txt', 'utf8');
132
114
  const ast = context.parseSource(source);
133
115
  ```
134
116
 
135
- Table-only consumers pay nothing for the grammar-file parser: importing `ParseContext` and calling `fromTableJson` never reads the bundled meta-grammar (`grammar.json`) and never evaluates `import.meta`. The meta-grammar loads lazily only when you call `readGrammar`, `fromGrammar`, or `validateGrammarTable`. This keeps ESM and CommonJS Jest suites that parse pre-built tables free of `import.meta` errors.
117
+ When testing this package from a clone, run `npm run build` first so `dist/lib/` exists. Published installs build automatically via `prepack`.
118
+
119
+ Table-only consumers never load the meta-grammar module graph: `ParseContext.fromTableJson` does not import `grammar.json` or any Node built-ins.
136
120
 
137
- The published CLI (`bin/parser-lr.js`) inlines its meta-grammar at build time, so `parser-lr` runs from a clean install without a `grammar.json` on disk.
121
+ The published CLI (`bin/parser-lr.js`) bundles grammar reading and the meta-grammar table for offline table generation and validation.
138
122
 
139
123
  `ParseContext` exposes `lex`, `parse`, and `createLexer` for finer control. See the [library API overview](https://github.com/adamrmoss/parser-lr/blob/main/src/lib/README.md).
140
124