parser-lr 0.6.1 → 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 +7 -2
  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
@@ -1,345 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParseTable = exports.PARSE_TABLE_VERSION_FULL = exports.PARSE_TABLE_VERSION = void 0;
4
- const ast_schema_js_1 = require("../grammar/ast-schema.js");
5
- const grammar_js_1 = require("../grammar/grammar.js");
6
- const transform_schema_js_1 = require("../grammar/transform-schema.js");
7
- const desugar_ebnf_js_1 = require("./bnf/desugar-ebnf.js");
8
- const build_lr_table_js_1 = require("./build-lr-table.js");
9
- const parse_table_error_js_1 = require("./parse-table-error.js");
10
- const parse_table_json_js_1 = require("./parse-table-json.js");
11
- const lr_parse_table_js_1 = require("./table/lr-parse-table.js");
12
- const token_inventory_js_1 = require("./token-inventory.js");
13
- /** Current on-disk JSON schema version for lexer-only parse tables. */
14
- exports.PARSE_TABLE_VERSION = 1;
15
- /** JSON schema version for full LR parse tables. */
16
- exports.PARSE_TABLE_VERSION_FULL = 2;
17
- /**
18
- * LR parse table metadata, including lexer inventory and parser table entries.
19
- */
20
- class ParseTable {
21
- grammarName;
22
- startSymbol;
23
- tokens;
24
- tokenRules;
25
- skipRules;
26
- states;
27
- algorithm;
28
- parserStateCount;
29
- conflicts;
30
- astSchema;
31
- transformSchema;
32
- actionByState;
33
- gotoByState;
34
- productionById;
35
- /**
36
- * Creates a parse table from its serialized fields.
37
- *
38
- * @param grammarName - Grammar name from the `name` declaration.
39
- * @param startSymbol - Entry production from the `start` declaration.
40
- * @param tokens - Ordered token rule names from the grammar `tokens` section.
41
- * @param tokenRules - Lexer token definitions.
42
- * @param skipRules - Lexer skip definitions.
43
- * @param states - Lexer state names from the `states` section.
44
- * @param algorithm - LR algorithm used to build the table.
45
- * @param parserStateCount - Number of parser states, or zero when absent.
46
- * @param productions - Flat BNF production metadata for reduce actions.
47
- * @param actions - ACTION entries keyed by state and terminal symbol.
48
- * @param gotos - GOTO entries keyed by state and non-terminal name.
49
- * @param conflicts - Shift/reduce and reduce/reduce conflicts resolved during construction.
50
- * @param astSchema - AST types from the `ast` section, or null when absent.
51
- * @param transformSchema - CST-to-AST rules from the `transform` section, or null when absent.
52
- */
53
- constructor(grammarName, startSymbol, tokens, tokenRules, skipRules, states, algorithm, parserStateCount = 0, productions = [], actions = new Map(), gotos = new Map(), conflicts = [], astSchema = null, transformSchema = null) {
54
- this.grammarName = grammarName;
55
- this.startSymbol = startSymbol;
56
- this.tokens = tokens;
57
- this.tokenRules = tokenRules;
58
- this.skipRules = skipRules;
59
- this.states = states;
60
- this.algorithm = algorithm;
61
- this.parserStateCount = parserStateCount;
62
- this.conflicts = conflicts;
63
- this.astSchema = astSchema;
64
- this.transformSchema = transformSchema;
65
- this.actionByState = actions;
66
- this.gotoByState = gotos;
67
- const productionById = new Map();
68
- for (const production of productions) {
69
- productionById.set(production.id, production);
70
- }
71
- this.productionById = productionById;
72
- }
73
- /**
74
- * Whether the table includes parser ACTION/GOTO entries.
75
- */
76
- get hasParserTable() {
77
- return this.parserStateCount > 0 || this.actionByState.size > 0;
78
- }
79
- /**
80
- * Whether the table was built without conflicts.
81
- */
82
- get isConflictFree() {
83
- return this.conflicts.length === 0;
84
- }
85
- /**
86
- * Returns conflict warning lines for this table.
87
- */
88
- formatConflictWarnings() {
89
- return this.conflicts.map((conflict) => (0, lr_parse_table_js_1.formatParseConflictWarning)(conflict));
90
- }
91
- /**
92
- * Builds a parse table from a parsed grammar.
93
- *
94
- * @param grammar - Parsed `.grammar` file model.
95
- * @param algorithm - LR algorithm used to build the table.
96
- * @returns A parse table ready for serialization or parsing.
97
- */
98
- static fromGrammar(grammar, algorithm = 'lr1') {
99
- const bnf = (0, desugar_ebnf_js_1.desugarEbnf)(grammar);
100
- const lrTable = (0, build_lr_table_js_1.buildLrTable)(bnf, algorithm);
101
- return ParseTable.fromLrParseTable(grammar, lrTable);
102
- }
103
- /**
104
- * Restores a parse table from serialized JSON.
105
- *
106
- * @param json - Parsed table JSON object.
107
- * @returns A parse table instance.
108
- */
109
- static fromJson(json) {
110
- if (json.version !== exports.PARSE_TABLE_VERSION && json.version !== exports.PARSE_TABLE_VERSION_FULL) {
111
- throw new parse_table_error_js_1.ParseTableError(`Unsupported parse table version ${String(json.version)}; `
112
- + `expected ${exports.PARSE_TABLE_VERSION} or ${exports.PARSE_TABLE_VERSION_FULL}`);
113
- }
114
- if (!(0, parse_table_json_js_1.isParseTableJsonV2)(json)) {
115
- return new ParseTable(json.grammarName, json.startSymbol, [...json.tokens], [...json.tokenRules], [...json.skipRules], [...json.states], json.algorithm);
116
- }
117
- const astSchema = json.ast === undefined
118
- ? null
119
- : new ast_schema_js_1.AstSchema([...json.ast]);
120
- const transformSchema = json.transform === undefined
121
- ? null
122
- : new transform_schema_js_1.TransformSchema([...json.transform]);
123
- return new ParseTable(json.grammarName, json.startSymbol, [...json.tokens], [...json.tokenRules], [...json.skipRules], [...json.states], json.algorithm, json.parserStateCount, [...json.productions], ParseTable.actionsFromJson(json.actions), ParseTable.gotosFromJson(json.gotos), [], astSchema, transformSchema);
124
- }
125
- /**
126
- * Parses a parse table from a JSON string.
127
- *
128
- * @param json - Serialized table JSON.
129
- * @returns A parse table instance.
130
- */
131
- static fromJsonString(json) {
132
- let parsed;
133
- try {
134
- parsed = JSON.parse(json);
135
- }
136
- catch (error) {
137
- const message = error instanceof Error ? error.message : 'Invalid JSON';
138
- throw new parse_table_error_js_1.ParseTableError(`Invalid parse table JSON: ${message}`);
139
- }
140
- return ParseTable.fromJson(parsed);
141
- }
142
- /**
143
- * Serializes the parse table to a JSON string.
144
- *
145
- * @returns Pretty-printed JSON including lexer and parser table data.
146
- */
147
- toJsonString() {
148
- return JSON.stringify(this.toJson(), null, 4);
149
- }
150
- /**
151
- * Converts the parse table to a plain JSON-serializable object.
152
- *
153
- * @returns Table metadata, token inventory, and parser table entries when present.
154
- */
155
- toJson() {
156
- if (!this.hasParserTable) {
157
- return {
158
- version: exports.PARSE_TABLE_VERSION,
159
- algorithm: this.algorithm,
160
- grammarName: this.grammarName,
161
- startSymbol: this.startSymbol,
162
- tokens: [...this.tokens],
163
- tokenRules: [...this.tokenRules],
164
- skipRules: [...this.skipRules],
165
- states: [...this.states],
166
- };
167
- }
168
- const json = {
169
- version: exports.PARSE_TABLE_VERSION_FULL,
170
- algorithm: this.algorithm,
171
- grammarName: this.grammarName,
172
- startSymbol: this.startSymbol,
173
- tokens: [...this.tokens],
174
- tokenRules: [...this.tokenRules],
175
- skipRules: [...this.skipRules],
176
- states: [...this.states],
177
- parserStateCount: this.parserStateCount,
178
- productions: [...this.productionById.values()].sort((left, right) => left.id - right.id),
179
- actions: ParseTable.actionsToJson(this.actionByState),
180
- gotos: ParseTable.gotosToJson(this.gotoByState),
181
- ...(this.astSchema === null ? {} : { ast: [...this.astSchema.types] }),
182
- ...(this.transformSchema === null ? {} : { transform: [...this.transformSchema.rules] }),
183
- };
184
- return json;
185
- }
186
- /**
187
- * Builds a grammar from this table, including AST and transform schemas when present.
188
- *
189
- * @returns A grammar suitable for lexing and CST-to-AST transforms.
190
- */
191
- toGrammar() {
192
- return new grammar_js_1.Grammar(this.grammarName, this.tokenRules, this.skipRules, this.states, this.startSymbol, [], this.astSchema, this.transformSchema);
193
- }
194
- /**
195
- * Returns the ACTION entry for a parser state and terminal symbol key.
196
- *
197
- * @param state - Parser state index.
198
- * @param symbol - Encoded terminal or `$eof` key.
199
- */
200
- action(state, symbol) {
201
- return this.actionByState.get(state)?.get(symbol) ?? null;
202
- }
203
- /**
204
- * Returns the GOTO state for a parser state and non-terminal name.
205
- *
206
- * @param state - Parser state index.
207
- * @param nonTerminal - Non-terminal symbol name.
208
- */
209
- goto(state, nonTerminal) {
210
- return this.gotoByState.get(state)?.get(nonTerminal) ?? null;
211
- }
212
- /**
213
- * Returns production metadata referenced by a reduce action.
214
- *
215
- * @param productionId - Production id from a reduce action.
216
- */
217
- production(productionId) {
218
- return this.productionById.get(productionId) ?? null;
219
- }
220
- /**
221
- * Creates a {@link ParseTable} from a built LR table and source grammar.
222
- *
223
- * @param grammar - Parsed `.grammar` file model.
224
- * @param lrTable - Built LR parse table, including any resolved conflict warnings.
225
- */
226
- static fromLrParseTable(grammar, lrTable) {
227
- const productions = lrTable.productions.map((production) => ({
228
- id: production.id,
229
- name: production.name,
230
- rhs: (0, lr_parse_table_js_1.encodeProductionRhs)(production),
231
- variant: production.variant,
232
- origin: production.origin,
233
- }));
234
- return new ParseTable(grammar.name, grammar.startSymbol, (0, token_inventory_js_1.tokenInventory)(grammar), [...grammar.tokenRules], [...grammar.skipRules], [...grammar.states], lrTable.algorithm, lrTable.stateCount, productions, lrTable.actions, lrTable.gotos, [...lrTable.conflicts], grammar.astSchema, grammar.transformSchema);
235
- }
236
- /**
237
- * Converts ACTION maps into JSON rows.
238
- *
239
- * @param actions - ACTION entries keyed by state and terminal symbol.
240
- */
241
- static actionsToJson(actions) {
242
- const rows = [];
243
- for (const [state, stateActions] of actions.entries()) {
244
- for (const [symbol, action] of stateActions.entries()) {
245
- switch (action.kind) {
246
- case 'shift':
247
- rows.push({
248
- state,
249
- symbol,
250
- kind: 'shift',
251
- target: action.state,
252
- });
253
- break;
254
- case 'reduce':
255
- rows.push({
256
- state,
257
- symbol,
258
- kind: 'reduce',
259
- productionId: action.productionId,
260
- });
261
- break;
262
- case 'accept':
263
- rows.push({
264
- state,
265
- symbol,
266
- kind: 'accept',
267
- });
268
- break;
269
- }
270
- }
271
- }
272
- return rows.sort((left, right) => {
273
- if (left.state !== right.state) {
274
- return left.state - right.state;
275
- }
276
- return left.symbol.localeCompare(right.symbol);
277
- });
278
- }
279
- /**
280
- * Converts GOTO maps into JSON rows.
281
- *
282
- * @param gotos - GOTO entries keyed by state and non-terminal name.
283
- */
284
- static gotosToJson(gotos) {
285
- const rows = [];
286
- for (const [state, stateGotos] of gotos.entries()) {
287
- for (const [symbol, target] of stateGotos.entries()) {
288
- rows.push({ state, symbol, target });
289
- }
290
- }
291
- return rows.sort((left, right) => {
292
- if (left.state !== right.state) {
293
- return left.state - right.state;
294
- }
295
- return left.symbol.localeCompare(right.symbol);
296
- });
297
- }
298
- /**
299
- * Restores ACTION maps from JSON rows.
300
- *
301
- * @param rows - Serialized ACTION rows.
302
- */
303
- static actionsFromJson(rows) {
304
- const actions = new Map();
305
- for (const row of rows) {
306
- const stateActions = actions.get(row.state) ?? new Map();
307
- switch (row.kind) {
308
- case 'shift':
309
- if (row.target !== undefined) {
310
- stateActions.set(row.symbol, { kind: 'shift', state: row.target });
311
- }
312
- break;
313
- case 'reduce':
314
- if (row.productionId !== undefined) {
315
- stateActions.set(row.symbol, {
316
- kind: 'reduce',
317
- productionId: row.productionId,
318
- });
319
- }
320
- break;
321
- case 'accept':
322
- stateActions.set(row.symbol, { kind: 'accept' });
323
- break;
324
- }
325
- actions.set(row.state, stateActions);
326
- }
327
- return actions;
328
- }
329
- /**
330
- * Restores GOTO maps from JSON rows.
331
- *
332
- * @param rows - Serialized GOTO rows.
333
- */
334
- static gotosFromJson(rows) {
335
- const gotos = new Map();
336
- for (const row of rows) {
337
- const stateGotos = gotos.get(row.state) ?? new Map();
338
- stateGotos.set(row.symbol, row.target);
339
- gotos.set(row.state, stateGotos);
340
- }
341
- return gotos;
342
- }
343
- }
344
- exports.ParseTable = ParseTable;
345
- //# sourceMappingURL=parse-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-table.js","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatSlrGotos = exports.formatSlrConflicts = exports.formatSlrActions = exports.buildSlrTable = exports.parseActionsEqual = exports.formatParseAction = exports.classifyParseConflict = void 0;
4
- var parse_action_js_1 = require("./parse-action.js");
5
- Object.defineProperty(exports, "classifyParseConflict", { enumerable: true, get: function () { return parse_action_js_1.classifyParseConflict; } });
6
- Object.defineProperty(exports, "formatParseAction", { enumerable: true, get: function () { return parse_action_js_1.formatParseAction; } });
7
- Object.defineProperty(exports, "parseActionsEqual", { enumerable: true, get: function () { return parse_action_js_1.parseActionsEqual; } });
8
- var slr_table_js_1 = require("./slr-table.js");
9
- Object.defineProperty(exports, "buildSlrTable", { enumerable: true, get: function () { return slr_table_js_1.buildSlrTable; } });
10
- Object.defineProperty(exports, "formatSlrActions", { enumerable: true, get: function () { return slr_table_js_1.formatSlrActions; } });
11
- Object.defineProperty(exports, "formatSlrConflicts", { enumerable: true, get: function () { return slr_table_js_1.formatSlrConflicts; } });
12
- Object.defineProperty(exports, "formatSlrGotos", { enumerable: true, get: function () { return slr_table_js_1.formatSlrGotos; } });
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/index.ts"],"names":[],"mappings":";;;AAAA,qDAI2B;AAHvB,wHAAA,qBAAqB,OAAA;AACrB,oHAAA,iBAAiB,OAAA;AACjB,oHAAA,iBAAiB,OAAA;AAGrB,+CAMwB;AALpB,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,kHAAA,kBAAkB,OAAA;AAClB,8GAAA,cAAc,OAAA"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseActionsEqual = exports.formatParseAction = exports.classifyParseConflict = void 0;
4
- var parse_action_js_1 = require("../table/parse-action.js");
5
- Object.defineProperty(exports, "classifyParseConflict", { enumerable: true, get: function () { return parse_action_js_1.classifyParseConflict; } });
6
- Object.defineProperty(exports, "formatParseAction", { enumerable: true, get: function () { return parse_action_js_1.formatParseAction; } });
7
- Object.defineProperty(exports, "parseActionsEqual", { enumerable: true, get: function () { return parse_action_js_1.parseActionsEqual; } });
8
- //# sourceMappingURL=parse-action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-action.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/parse-action.ts"],"names":[],"mappings":";;;AAAA,4DAIkC;AAH9B,wHAAA,qBAAqB,OAAA;AACrB,oHAAA,iBAAiB,OAAA;AACjB,oHAAA,iBAAiB,OAAA"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatSlrGotos = exports.formatSlrConflicts = exports.formatSlrActions = void 0;
4
- exports.buildSlrTable = buildSlrTable;
5
- const build_lr_table_js_1 = require("../build-lr-table.js");
6
- const lr_parse_table_js_1 = require("../table/lr-parse-table.js");
7
- Object.defineProperty(exports, "formatSlrActions", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrActions; } });
8
- Object.defineProperty(exports, "formatSlrConflicts", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrConflicts; } });
9
- Object.defineProperty(exports, "formatSlrGotos", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrGotos; } });
10
- /**
11
- * Builds an SLR table from a plain BNF grammar, augmenting it automatically.
12
- *
13
- * @param grammar - Plain BNF grammar to analyze.
14
- */
15
- function buildSlrTable(grammar) {
16
- return (0, build_lr_table_js_1.buildLrTable)(grammar, 'slr');
17
- }
18
- //# sourceMappingURL=slr-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slr-table.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/slr-table.ts"],"names":[],"mappings":";;;AAiBA,sCAGC;AAnBD,4DAAoD;AACpD,kEAKoC;AAeR,iGAnBxB,mCAAe,OAmByB;AACd,mGAnB1B,qCAAiB,OAmB2B;AACtB,+FAnBtB,iCAAa,OAmBuB;AAZxC;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAmB;IAE7C,OAAO,IAAA,gCAAY,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableBuilderBase = exports.LrParseTable = exports.lrProduction = exports.lrGotoNonTerminalNames = exports.lrActionTerminalKeys = exports.formatParseConflictWarning = exports.formatLrGotos = exports.formatLrConflicts = exports.formatLrConflictWarnings = exports.formatLrActions = exports.encodeProductionRhs = exports.parseActionsEqual = exports.formatParseAction = exports.classifyParseConflict = void 0;
4
- var parse_action_js_1 = require("./parse-action.js");
5
- Object.defineProperty(exports, "classifyParseConflict", { enumerable: true, get: function () { return parse_action_js_1.classifyParseConflict; } });
6
- Object.defineProperty(exports, "formatParseAction", { enumerable: true, get: function () { return parse_action_js_1.formatParseAction; } });
7
- Object.defineProperty(exports, "parseActionsEqual", { enumerable: true, get: function () { return parse_action_js_1.parseActionsEqual; } });
8
- var lr_parse_table_js_1 = require("./lr-parse-table.js");
9
- Object.defineProperty(exports, "encodeProductionRhs", { enumerable: true, get: function () { return lr_parse_table_js_1.encodeProductionRhs; } });
10
- Object.defineProperty(exports, "formatLrActions", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrActions; } });
11
- Object.defineProperty(exports, "formatLrConflictWarnings", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrConflictWarnings; } });
12
- Object.defineProperty(exports, "formatLrConflicts", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrConflicts; } });
13
- Object.defineProperty(exports, "formatLrGotos", { enumerable: true, get: function () { return lr_parse_table_js_1.formatLrGotos; } });
14
- Object.defineProperty(exports, "formatParseConflictWarning", { enumerable: true, get: function () { return lr_parse_table_js_1.formatParseConflictWarning; } });
15
- Object.defineProperty(exports, "lrActionTerminalKeys", { enumerable: true, get: function () { return lr_parse_table_js_1.lrActionTerminalKeys; } });
16
- Object.defineProperty(exports, "lrGotoNonTerminalNames", { enumerable: true, get: function () { return lr_parse_table_js_1.lrGotoNonTerminalNames; } });
17
- Object.defineProperty(exports, "lrProduction", { enumerable: true, get: function () { return lr_parse_table_js_1.lrProduction; } });
18
- Object.defineProperty(exports, "LrParseTable", { enumerable: true, get: function () { return lr_parse_table_js_1.LrParseTable; } });
19
- var table_builder_base_js_1 = require("./table-builder-base.js");
20
- Object.defineProperty(exports, "TableBuilderBase", { enumerable: true, get: function () { return table_builder_base_js_1.TableBuilderBase; } });
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/index.ts"],"names":[],"mappings":";;;AAAA,qDAI2B;AAHvB,wHAAA,qBAAqB,OAAA;AACrB,oHAAA,iBAAiB,OAAA;AACjB,oHAAA,iBAAiB,OAAA;AAGrB,yDAW6B;AAVzB,wHAAA,mBAAmB,OAAA;AACnB,oHAAA,eAAe,OAAA;AACf,6HAAA,wBAAwB,OAAA;AACxB,sHAAA,iBAAiB,OAAA;AACjB,kHAAA,aAAa,OAAA;AACb,+HAAA,0BAA0B,OAAA;AAC1B,yHAAA,oBAAoB,OAAA;AACpB,2HAAA,sBAAsB,OAAA;AACtB,iHAAA,YAAY,OAAA;AACZ,iHAAA,YAAY,OAAA;AAEhB,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA"}
@@ -1,192 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LrParseTable = void 0;
4
- exports.formatLrActions = formatLrActions;
5
- exports.formatLrGotos = formatLrGotos;
6
- exports.formatLrConflicts = formatLrConflicts;
7
- exports.formatLrConflictWarnings = formatLrConflictWarnings;
8
- exports.formatParseConflictWarning = formatParseConflictWarning;
9
- exports.lrActionTerminalKeys = lrActionTerminalKeys;
10
- exports.lrGotoNonTerminalNames = lrGotoNonTerminalNames;
11
- exports.lrProduction = lrProduction;
12
- exports.encodeProductionRhs = encodeProductionRhs;
13
- const bnf_symbol_js_1 = require("../bnf/bnf-symbol.js");
14
- const parse_action_js_1 = require("./parse-action.js");
15
- /**
16
- * LR parse table with ACTION and GOTO entries plus any detected conflicts.
17
- */
18
- class LrParseTable {
19
- algorithm;
20
- grammar;
21
- productions;
22
- stateCount;
23
- actions;
24
- gotos;
25
- conflicts;
26
- /**
27
- * Creates an LR parse table from precomputed table entries.
28
- *
29
- * @param algorithm - LR algorithm used to build the table.
30
- * @param grammar - Augmented BNF grammar the table was built from.
31
- * @param productions - Flat BNF productions referenced by reduce actions.
32
- * @param stateCount - Number of parser states in the item set collection.
33
- * @param actions - ACTION entries keyed by state and terminal symbol.
34
- * @param gotos - GOTO entries keyed by state and non-terminal name.
35
- * @param conflicts - Shift/reduce and reduce/reduce conflicts resolved during construction.
36
- */
37
- constructor(algorithm, grammar, productions, stateCount, actions, gotos, conflicts) {
38
- this.algorithm = algorithm;
39
- this.grammar = grammar;
40
- this.productions = productions;
41
- this.stateCount = stateCount;
42
- this.actions = actions;
43
- this.gotos = gotos;
44
- this.conflicts = conflicts;
45
- }
46
- /**
47
- * Whether the table was built without conflicts.
48
- */
49
- get isConflictFree() {
50
- return this.conflicts.length === 0;
51
- }
52
- /**
53
- * Returns the ACTION entry for a state and terminal symbol key.
54
- *
55
- * @param state - Parser state index.
56
- * @param symbol - Encoded terminal or `$eof` key.
57
- */
58
- action(state, symbol) {
59
- return this.actions.get(state)?.get(symbol) ?? null;
60
- }
61
- /**
62
- * Returns the GOTO state for a parser state and non-terminal name.
63
- *
64
- * @param state - Parser state index.
65
- * @param nonTerminal - Non-terminal symbol name.
66
- */
67
- goto(state, nonTerminal) {
68
- return this.gotos.get(state)?.get(nonTerminal) ?? null;
69
- }
70
- }
71
- exports.LrParseTable = LrParseTable;
72
- /**
73
- * Returns readable ACTION rows for a parser state.
74
- *
75
- * @param table - LR parse table to format.
76
- * @param state - Parser state index.
77
- */
78
- function formatLrActions(table, state) {
79
- const stateActions = table.actions.get(state);
80
- if (stateActions === undefined) {
81
- return [];
82
- }
83
- return [...stateActions.entries()]
84
- .sort(([leftSymbol], [rightSymbol]) => leftSymbol.localeCompare(rightSymbol))
85
- .map(([symbol, action]) => `${symbol}=${(0, parse_action_js_1.formatParseAction)(action)}`);
86
- }
87
- /**
88
- * Returns readable GOTO rows for a parser state.
89
- *
90
- * @param table - LR parse table to format.
91
- * @param state - Parser state index.
92
- */
93
- function formatLrGotos(table, state) {
94
- const stateGotos = table.gotos.get(state);
95
- if (stateGotos === undefined) {
96
- return [];
97
- }
98
- return [...stateGotos.entries()]
99
- .sort(([leftSymbol], [rightSymbol]) => leftSymbol.localeCompare(rightSymbol))
100
- .map(([symbol, targetState]) => `${symbol}=${String(targetState)}`);
101
- }
102
- /**
103
- * Returns readable conflict labels for tests and diagnostics.
104
- *
105
- * @param table - LR parse table to format.
106
- */
107
- function formatLrConflicts(table) {
108
- return table.conflicts.map((conflict) => `${String(conflict.state)}/${conflict.symbol} `
109
- + `${(0, parse_action_js_1.formatParseAction)(conflict.existing)} vs ${(0, parse_action_js_1.formatParseAction)(conflict.incoming)} `
110
- + `(${conflict.kind}, resolved as ${conflict.resolution})`);
111
- }
112
- /**
113
- * Returns conflict warning lines for a built parse table.
114
- *
115
- * @param table - LR parse table to format.
116
- */
117
- function formatLrConflictWarnings(table) {
118
- return table.conflicts.map((conflict) => formatParseConflictWarning(conflict));
119
- }
120
- /**
121
- * Formats one resolved conflict as a warning line.
122
- *
123
- * @param conflict - Resolved shift/reduce or reduce/reduce conflict.
124
- */
125
- function formatParseConflictWarning(conflict) {
126
- const tokenLabel = formatConflictTokenLabel(conflict.symbol);
127
- if (conflict.kind === 'shift-reduce') {
128
- return `state ${String(conflict.state)}: shift/reduce conflict on ${tokenLabel} resolved as shift`;
129
- }
130
- const keptProduction = conflict.existing.kind === 'reduce'
131
- ? conflict.existing.productionId
132
- : conflict.incoming.productionId;
133
- return `state ${String(conflict.state)}: reduce/reduce conflict on ${tokenLabel} `
134
- + `resolved using rule ${String(keptProduction)}`;
135
- }
136
- /**
137
- * Returns a readable terminal label for conflict warning text.
138
- *
139
- * @param symbol - Encoded terminal or `$eof` key from the ACTION table.
140
- */
141
- function formatConflictTokenLabel(symbol) {
142
- if (symbol === '$eof') {
143
- return 'token $eof';
144
- }
145
- return `token ${symbol}`;
146
- }
147
- /**
148
- * Returns encoded terminal keys used in ACTION rows, including `$eof`.
149
- *
150
- * @param table - LR parse table to inspect.
151
- */
152
- function lrActionTerminalKeys(table) {
153
- const keys = new Set();
154
- for (const stateActions of table.actions.values()) {
155
- for (const symbol of stateActions.keys()) {
156
- keys.add(symbol);
157
- }
158
- }
159
- return [...keys].sort();
160
- }
161
- /**
162
- * Returns non-terminal names used in GOTO rows.
163
- *
164
- * @param table - LR parse table to inspect.
165
- */
166
- function lrGotoNonTerminalNames(table) {
167
- const names = new Set();
168
- for (const stateGotos of table.gotos.values()) {
169
- for (const name of stateGotos.keys()) {
170
- names.add(name);
171
- }
172
- }
173
- return [...names].sort();
174
- }
175
- /**
176
- * Returns a production by its stable id.
177
- *
178
- * @param table - LR parse table to inspect.
179
- * @param productionId - Production id referenced by reduce actions.
180
- */
181
- function lrProduction(table, productionId) {
182
- return table.productions.find((production) => production.id === productionId) ?? null;
183
- }
184
- /**
185
- * Returns encoded right-hand side symbols for one production.
186
- *
187
- * @param production - BNF production to encode.
188
- */
189
- function encodeProductionRhs(production) {
190
- return production.rhs.map((symbol) => (0, bnf_symbol_js_1.bnfSymbolKey)(symbol));
191
- }
192
- //# sourceMappingURL=lr-parse-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lr-parse-table.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/lr-parse-table.ts"],"names":[],"mappings":"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"}