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
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LexerCompileError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Error thrown when lexer rules cannot be compiled from a grammar.
7
- */
8
- class LexerCompileError extends parser_lr_error_js_1.ParserLrError {
9
- ruleName;
10
- /**
11
- * Creates a lexer compile error for one token rule.
12
- *
13
- * @param ruleName - Token or skip rule name.
14
- * @param message - Underlying regular expression error message.
15
- */
16
- constructor(ruleName, message) {
17
- super(`Invalid lexer rule ${JSON.stringify(ruleName)}: ${message}`);
18
- this.ruleName = ruleName;
19
- }
20
- }
21
- exports.LexerCompileError = LexerCompileError;
22
- //# sourceMappingURL=lexer-compile-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer-compile-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,iBAAkB,SAAQ,kCAAa;IAS5B;IAPpB;;;;;OAKG;IACH,YACoB,QAAgB,EAChC,OAAe;QAGf,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAJpD,aAAQ,GAAR,QAAQ,CAAQ;IAKpC,CAAC;CACJ;AAfD,8CAeC"}
@@ -1,201 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_LEXER_STATE = void 0;
4
- exports.compileLexerRules = compileLexerRules;
5
- exports.rulesForState = rulesForState;
6
- exports.resolveLexerStates = resolveLexerStates;
7
- exports.matchRule = matchRule;
8
- exports.hasLongerPossibleMatchCrossRule = hasLongerPossibleMatchCrossRule;
9
- exports.hasLongerPossibleMatch = hasLongerPossibleMatch;
10
- exports.isPrefixOfPotentialMatch = isPrefixOfPotentialMatch;
11
- exports.findLongestMatch = findLongestMatch;
12
- exports.assertLexerState = assertLexerState;
13
- const lexer_compile_error_js_1 = require("./lexer-compile-error.js");
14
- const lexer_state_error_js_1 = require("./lexer-state-error.js");
15
- /** Default lexer state when a grammar omits a `states` section. */
16
- exports.DEFAULT_LEXER_STATE = 'initial';
17
- const REGEX_LITERAL_TOKEN = 'regex_literal';
18
- /**
19
- * Compiles token and skip rules from a grammar for streaming lexing.
20
- *
21
- * @param grammar - Grammar supplying lexer rule definitions.
22
- * @returns Compiled rules and lexer state metadata.
23
- */
24
- function compileLexerRules(grammar) {
25
- const states = resolveLexerStates(grammar.states);
26
- return {
27
- states,
28
- initialState: states[0] ?? exports.DEFAULT_LEXER_STATE,
29
- rules: [
30
- ...grammar.tokenRules.map((rule) => compileRule(rule, false)),
31
- ...grammar.skipRules.map((rule) => compileRule(rule, true)),
32
- ],
33
- };
34
- }
35
- /**
36
- * Returns compiled rules active in a lexer state.
37
- *
38
- * @param compiled - Compiled lexer rules for a grammar.
39
- * @param state - Current lexer state name.
40
- * @returns Rules that apply in the state, preserving declaration order.
41
- */
42
- function rulesForState(compiled, state) {
43
- return compiled.rules.filter((rule) => rule.states === null || rule.states.includes(state));
44
- }
45
- /**
46
- * Resolves declared lexer states, supplying a default when omitted.
47
- *
48
- * @param states - State names from the grammar `states` section.
49
- * @returns Non-empty state name list.
50
- */
51
- function resolveLexerStates(states) {
52
- if (states.length === 0) {
53
- return [exports.DEFAULT_LEXER_STATE];
54
- }
55
- return states;
56
- }
57
- /**
58
- * Compiles one grammar token or skip rule into an anchored regular expression.
59
- *
60
- * @param rule - Token rule from the grammar file.
61
- * @param skip - Whether matches should be discarded instead of emitted.
62
- * @returns A compiled rule for lexing.
63
- */
64
- function compileRule(rule, skip) {
65
- try {
66
- return {
67
- name: rule.name,
68
- skip,
69
- regex: new RegExp(`^(?:${rule.pattern})`, rule.flags),
70
- states: rule.states === undefined ? null : [...rule.states],
71
- };
72
- }
73
- catch (error) {
74
- const message = error instanceof Error ? error.message : String(error);
75
- throw new lexer_compile_error_js_1.LexerCompileError(rule.name, message);
76
- }
77
- }
78
- /**
79
- * Matches a compiled rule at the start of a source slice.
80
- *
81
- * @param rule - Compiled token or skip rule.
82
- * @param slice - Remaining source text from the current offset.
83
- * @returns Matched lexeme text, or null when the rule does not match.
84
- */
85
- function matchRule(rule, slice) {
86
- const match = rule.regex.exec(slice);
87
- if (match === null || match.index !== 0) {
88
- return null;
89
- }
90
- let text = match[0];
91
- // Extend regex literals with optional JS flag letters after the closing slash.
92
- if (rule.name === REGEX_LITERAL_TOKEN) {
93
- const suffix = /^[gimsuy]*/.exec(slice.slice(text.length));
94
- if (suffix !== null) {
95
- text += suffix[0];
96
- }
97
- }
98
- return text;
99
- }
100
- /**
101
- * Returns whether more input could extend the match via a different token rule.
102
- *
103
- * @param buffer - Buffered source not yet consumed.
104
- * @param matchedText - Current best match at the buffer start.
105
- * @param rules - Candidate rules for the active lexer state.
106
- */
107
- function hasLongerPossibleMatchCrossRule(buffer, matchedText, rules) {
108
- const current = findLongestMatch(buffer, rules);
109
- if (current === null || current.text !== matchedText) {
110
- return false;
111
- }
112
- for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
113
- const extendedMatch = findLongestMatch(buffer + suffix, rules);
114
- if (extendedMatch !== null
115
- && extendedMatch.text.length > current.text.length
116
- && extendedMatch.name !== current.name) {
117
- return true;
118
- }
119
- }
120
- return false;
121
- }
122
- /**
123
- * Returns whether a longer match may appear if more input arrives.
124
- *
125
- * @param buffer - Buffered source not yet consumed.
126
- * @param matchedText - Current best match at the buffer start.
127
- * @param rules - Candidate rules for the active lexer state.
128
- * @param finished - Whether the input stream has ended.
129
- */
130
- function hasLongerPossibleMatch(buffer, matchedText, rules, finished) {
131
- if (finished) {
132
- return false;
133
- }
134
- const current = findLongestMatch(buffer, rules);
135
- if (current === null || current.text !== matchedText) {
136
- return false;
137
- }
138
- for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
139
- const extendedMatch = findLongestMatch(buffer + suffix, rules);
140
- if (extendedMatch !== null && extendedMatch.text.length > current.text.length) {
141
- return true;
142
- }
143
- }
144
- return false;
145
- }
146
- /**
147
- * Returns whether buffered input may become a token once more data arrives.
148
- *
149
- * @param buffer - Buffered source not yet consumed.
150
- * @param rules - Candidate rules for the active lexer state.
151
- */
152
- function isPrefixOfPotentialMatch(buffer, rules) {
153
- if (buffer.length === 0) {
154
- return true;
155
- }
156
- for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
157
- const extended = buffer + suffix;
158
- const match = findLongestMatch(extended, rules);
159
- if (match !== null && match.text.startsWith(buffer) && match.text.length > buffer.length) {
160
- return true;
161
- }
162
- }
163
- return false;
164
- }
165
- /**
166
- * Finds the longest winning rule match at the start of a buffer.
167
- *
168
- * @param buffer - Buffered source to match from the start.
169
- * @param rules - Candidate rules for the active lexer state.
170
- * @returns The longest winning match, or null when nothing matches.
171
- */
172
- function findLongestMatch(buffer, rules) {
173
- let bestMatch = null;
174
- // Try every rule and keep the longest match, breaking ties by rule order.
175
- for (const rule of rules) {
176
- const matchedText = matchRule(rule, buffer);
177
- if (matchedText === null || matchedText.length === 0) {
178
- continue;
179
- }
180
- if (bestMatch === null || matchedText.length > bestMatch.text.length) {
181
- bestMatch = {
182
- name: rule.name,
183
- text: matchedText,
184
- skip: rule.skip,
185
- };
186
- }
187
- }
188
- return bestMatch;
189
- }
190
- /**
191
- * Validates that a lexer state name is declared in the grammar.
192
- *
193
- * @param compiled - Compiled lexer rules for a grammar.
194
- * @param state - Candidate lexer state name.
195
- */
196
- function assertLexerState(compiled, state) {
197
- if (!compiled.states.includes(state)) {
198
- throw new lexer_state_error_js_1.LexerStateError(state);
199
- }
200
- }
201
- //# sourceMappingURL=lexer-compile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer-compile.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile.ts"],"names":[],"mappings":";;;AAsCA,8CAYC;AASD,sCAMC;AAQD,gDAQC;AAkCD,8BAuBC;AASD,0EA4BC;AAUD,wDA8BC;AAQD,4DAsBC;AASD,4CA4BC;AAQD,4CAMC;AArSD,qEAA6D;AAC7D,iEAAyD;AAEzD,mEAAmE;AACtD,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAE7C,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAuB5C;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,OAAgB;IAE9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO;QACH,MAAM;QACN,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,2BAAmB;QAC9C,KAAK,EAAE;YACH,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7D,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9D;KACJ,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CACzB,QAA4B,EAC5B,KAAa;IAGb,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,MAAyB;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB,CAAC;QACG,OAAO,CAAC,2BAAmB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,IAAe,EAAE,IAAa;IAE/C,IACA,CAAC;QACG,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;YACJ,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;YACrD,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;SAC9D,CAAC;IACN,CAAC;IACD,OAAO,KAAK,EACZ,CAAC;QACG,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,0CAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAkB,EAAE,KAAa;IAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EACvC,CAAC;QACG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpB,+EAA+E;IAC/E,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EACrC,CAAC;QACG,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3D,IAAI,MAAM,KAAK,IAAI,EACnB,CAAC;YACG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,+BAA+B,CAC3C,MAAc,EACd,WAAmB,EACnB,KAA8B;IAG9B,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EACpD,CAAC;QACG,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClE,CAAC;QACG,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;QAE/D,IACI,aAAa,KAAK,IAAI;eACnB,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;eAC/C,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAE1C,CAAC;YACG,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CAClC,MAAc,EACd,WAAmB,EACnB,KAA8B,EAC9B,QAAiB;IAGjB,IAAI,QAAQ,EACZ,CAAC;QACG,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EACpD,CAAC;QACG,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClE,CAAC;QACG,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAC7E,CAAC;YACG,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CACpC,MAAc,EACd,KAA8B;IAG9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB,CAAC;QACG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClE,CAAC;QACG,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QACjC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EACxF,CAAC;YACG,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC5B,MAAc,EACd,KAA8B;IAG9B,IAAI,SAAS,GAAyD,IAAI,CAAC;IAE3E,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EACxB,CAAC;QACG,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EACpD,CAAC;YACG,SAAS;QACb,CAAC;QAED,IAAI,SAAS,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EACpE,CAAC;YACG,SAAS,GAAG;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,QAA4B,EAAE,KAAa;IAExE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpC,CAAC;QACG,MAAM,IAAI,sCAAe,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACL,CAAC"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LexerError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Error thrown when the lexer cannot match input at the current offset.
7
- */
8
- class LexerError extends parser_lr_error_js_1.ParserLrError {
9
- offset;
10
- /**
11
- * Creates a lexer error at a source offset.
12
- *
13
- * @param message - Human-readable failure description.
14
- * @param offset - Source offset where lexing stopped.
15
- */
16
- constructor(message, offset) {
17
- super(message);
18
- this.offset = offset;
19
- }
20
- }
21
- exports.LexerError = LexerError;
22
- //# sourceMappingURL=lexer-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,UAAW,SAAQ,kCAAa;IAUrB;IARpB;;;;;OAKG;IACH,YACI,OAAe,EACC,MAAc;QAG9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;IAIlC,CAAC;CACJ;AAfD,gCAeC"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LexerInputError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Thrown when source input is pushed after the lexer has finished.
7
- */
8
- class LexerInputError extends parser_lr_error_js_1.ParserLrError {
9
- /**
10
- * Creates a lexer input sequencing error.
11
- */
12
- constructor() {
13
- super('Cannot push input after finish()');
14
- }
15
- }
16
- exports.LexerInputError = LexerInputError;
17
- //# sourceMappingURL=lexer-input-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer-input-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-input-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,eAAgB,SAAQ,kCAAa;IAE9C;;OAEG;IACH;QAEI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9C,CAAC;CACJ;AATD,0CASC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LexerStateError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Thrown when a lexer state name is not declared in the grammar.
7
- */
8
- class LexerStateError extends parser_lr_error_js_1.ParserLrError {
9
- /**
10
- * Creates an unknown lexer state error.
11
- *
12
- * @param state - Requested lexer state name.
13
- */
14
- constructor(state) {
15
- super(`Unknown lexer state ${JSON.stringify(state)}`);
16
- }
17
- }
18
- exports.LexerStateError = LexerStateError;
19
- //# sourceMappingURL=lexer-state-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer-state-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-state-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,eAAgB,SAAQ,kCAAa;IAE9C;;;;OAIG;IACH,YAAmB,KAAa;QAE5B,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;CACJ;AAXD,0CAWC"}
@@ -1,278 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Lexer = void 0;
4
- exports.lexChunks = lexChunks;
5
- exports.lexChunksAsync = lexChunksAsync;
6
- exports.lexChunkStream = lexChunkStream;
7
- exports.lexChunkStreamAsync = lexChunkStreamAsync;
8
- const lexer_compile_js_1 = require("./lexer-compile.js");
9
- const lexer_error_js_1 = require("./lexer-error.js");
10
- const lexer_input_error_js_1 = require("./lexer-input-error.js");
11
- const token_js_1 = require("./token.js");
12
- /**
13
- * Stream-based lexer driven by a grammar's `tokens`, `skip`, and `states` sections.
14
- *
15
- * Push source chunks with {@link push}, signal end-of-input with {@link finish},
16
- * then read tokens via {@link next} or iteration. The final token is always `$eof`.
17
- */
18
- class Lexer {
19
- compiled;
20
- queue = [];
21
- buffer = '';
22
- offset = 0;
23
- finished = false;
24
- eofEmitted = false;
25
- currentState;
26
- /**
27
- * Creates a lexer from a parsed grammar.
28
- *
29
- * @param grammar - Grammar supplying token and skip rule definitions.
30
- */
31
- constructor(grammar) {
32
- this.compiled = (0, lexer_compile_js_1.compileLexerRules)(grammar);
33
- this.currentState = this.compiled.initialState;
34
- }
35
- /**
36
- * Returns the active lexer state name.
37
- */
38
- get state() {
39
- return this.currentState;
40
- }
41
- /**
42
- * Enters a declared lexer state.
43
- *
44
- * @param stateName - Lexer state to activate.
45
- */
46
- enterState(stateName) {
47
- (0, lexer_compile_js_1.assertLexerState)(this.compiled, stateName);
48
- this.currentState = stateName;
49
- }
50
- /**
51
- * Appends the next chunk of source text to the scan buffer.
52
- *
53
- * @param chunk - Source text fragment.
54
- */
55
- push(chunk) {
56
- if (this.finished) {
57
- throw new lexer_input_error_js_1.LexerInputError();
58
- }
59
- this.buffer += chunk;
60
- this.drain(false);
61
- }
62
- /**
63
- * Signals that no further source chunks will arrive.
64
- */
65
- finish() {
66
- this.finished = true;
67
- this.drain(true);
68
- }
69
- /**
70
- * Returns the next token, or null when waiting for more input.
71
- *
72
- * @returns The next token, null while blocked, or `$eof` after input ends.
73
- */
74
- next() {
75
- if (this.eofEmitted) {
76
- return null;
77
- }
78
- if (this.queue.length > 0) {
79
- return this.queue.shift() ?? null;
80
- }
81
- if (!this.finished) {
82
- return null;
83
- }
84
- if (this.buffer.length > 0) {
85
- throw new lexer_error_js_1.LexerError(`Unexpected character ${JSON.stringify(this.buffer[0])} at offset ${this.offset}`, this.offset);
86
- }
87
- this.eofEmitted = true;
88
- return (0, token_js_1.eofToken)(this.offset);
89
- }
90
- /**
91
- * Lexes an entire source string, including a trailing `$eof` token.
92
- *
93
- * @param source - Input text to tokenize.
94
- * @returns Matched tokens in source order.
95
- */
96
- lex(source) {
97
- this.reset();
98
- this.push(source);
99
- this.finish();
100
- const tokens = [];
101
- let nextToken = this.next();
102
- while (nextToken !== null) {
103
- tokens.push(nextToken);
104
- nextToken = this.next();
105
- }
106
- return tokens;
107
- }
108
- /**
109
- * Iterates all tokens until `$eof` after {@link finish} has been called.
110
- */
111
- [Symbol.iterator]() {
112
- return {
113
- next: () => {
114
- const value = this.next();
115
- if (value === null) {
116
- return {
117
- done: true,
118
- value: undefined,
119
- };
120
- }
121
- return {
122
- done: false,
123
- value,
124
- };
125
- },
126
- };
127
- }
128
- /**
129
- * Scans the buffer and enqueues any tokens ready to emit.
130
- *
131
- * @param inputFinished - Whether the full input stream has ended.
132
- * @param allowChunkBoundary - Whether to commit tokens at a chunk boundary.
133
- */
134
- drain(inputFinished) {
135
- // Scan until the buffer needs more input or input ends with an error.
136
- while (true) {
137
- const match = this.matchAtBufferStart(inputFinished);
138
- if (match === 'need-more') {
139
- return;
140
- }
141
- if (match === null) {
142
- if (inputFinished && this.buffer.length > 0) {
143
- throw new lexer_error_js_1.LexerError(`Unexpected character ${JSON.stringify(this.buffer[0])} at offset ${this.offset}`, this.offset);
144
- }
145
- return;
146
- }
147
- this.buffer = this.buffer.slice(match.text.length);
148
- this.offset += match.text.length;
149
- if (!match.skip) {
150
- this.queue.push((0, token_js_1.token)(match.name, match.text, match.offset));
151
- }
152
- }
153
- }
154
- /**
155
- * Finds the winning rule match at the start of the scan buffer.
156
- *
157
- * @param inputFinished - Whether the full input stream has ended.
158
- * @param allowChunkBoundary - Whether to commit tokens at a chunk boundary.
159
- */
160
- matchAtBufferStart(inputFinished) {
161
- if (this.buffer.length === 0) {
162
- return null;
163
- }
164
- const activeRules = (0, lexer_compile_js_1.rulesForState)(this.compiled, this.currentState);
165
- const bestMatch = (0, lexer_compile_js_1.findLongestMatch)(this.buffer, activeRules);
166
- if (bestMatch === null) {
167
- if (!inputFinished && (0, lexer_compile_js_1.isPrefixOfPotentialMatch)(this.buffer, activeRules)) {
168
- return 'need-more';
169
- }
170
- return null;
171
- }
172
- if (bestMatch.text.length === this.buffer.length && !inputFinished) {
173
- if ((0, lexer_compile_js_1.hasLongerPossibleMatch)(this.buffer, bestMatch.text, activeRules, false)) {
174
- return 'need-more';
175
- }
176
- }
177
- return {
178
- name: bestMatch.name,
179
- text: bestMatch.text,
180
- offset: this.offset,
181
- skip: bestMatch.skip,
182
- };
183
- }
184
- /**
185
- * Resets stream state for a fresh lex run.
186
- */
187
- reset() {
188
- this.queue.length = 0;
189
- this.buffer = '';
190
- this.offset = 0;
191
- this.finished = false;
192
- this.eofEmitted = false;
193
- }
194
- }
195
- exports.Lexer = Lexer;
196
- /**
197
- * Lexes synchronous source chunks into a token stream ending with `$eof`.
198
- *
199
- * @param grammar - Grammar supplying lexer rules.
200
- * @param chunks - Source text fragments in order.
201
- * @returns Token iterator including `$eof`.
202
- */
203
- function lexChunks(grammar, chunks) {
204
- const lexer = new Lexer(grammar);
205
- return lexChunksFromLexer(lexer, chunks);
206
- }
207
- /**
208
- * Lexes asynchronous source chunks into a token stream ending with `$eof`.
209
- *
210
- * @param grammar - Grammar supplying lexer rules.
211
- * @param chunks - Source text fragments in order.
212
- * @returns Async token iterator including `$eof`.
213
- */
214
- async function* lexChunksAsync(grammar, chunks) {
215
- const lexer = new Lexer(grammar);
216
- for await (const chunk of chunks) {
217
- lexer.push(chunk);
218
- let nextToken = lexer.next();
219
- while (nextToken !== null) {
220
- yield nextToken;
221
- nextToken = lexer.next();
222
- }
223
- }
224
- lexer.finish();
225
- let nextToken = lexer.next();
226
- while (nextToken !== null) {
227
- yield nextToken;
228
- nextToken = lexer.next();
229
- }
230
- }
231
- /**
232
- * Drains tokens from a lexer fed by synchronous chunks.
233
- *
234
- * @param lexer - Configured lexer instance.
235
- * @param chunks - Source text fragments in order.
236
- * @returns Token iterator including `$eof`.
237
- */
238
- function* lexChunksFromLexer(lexer, chunks) {
239
- for (const chunk of chunks) {
240
- lexer.push(chunk);
241
- let nextToken = lexer.next();
242
- while (nextToken !== null) {
243
- yield nextToken;
244
- nextToken = lexer.next();
245
- }
246
- }
247
- lexer.finish();
248
- let nextToken = lexer.next();
249
- while (nextToken !== null) {
250
- yield nextToken;
251
- nextToken = lexer.next();
252
- }
253
- }
254
- /**
255
- * Collects all tokens from a synchronous chunk stream.
256
- *
257
- * @param grammar - Grammar supplying lexer rules.
258
- * @param chunks - Source text fragments in order.
259
- * @returns Matched tokens including `$eof`.
260
- */
261
- function lexChunkStream(grammar, chunks) {
262
- return [...lexChunks(grammar, chunks)];
263
- }
264
- /**
265
- * Collects all tokens from an asynchronous chunk stream.
266
- *
267
- * @param grammar - Grammar supplying lexer rules.
268
- * @param chunks - Source text fragments in order.
269
- * @returns Matched tokens including `$eof`.
270
- */
271
- async function lexChunkStreamAsync(grammar, chunks) {
272
- const tokens = [];
273
- for await (const value of lexChunksAsync(grammar, chunks)) {
274
- tokens.push(value);
275
- }
276
- return tokens;
277
- }
278
- //# sourceMappingURL=lexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EOF_TOKEN_NAME = void 0;
4
- exports.token = token;
5
- exports.eofToken = eofToken;
6
- exports.isEofToken = isEofToken;
7
- /** Token name emitted once at end of input. */
8
- exports.EOF_TOKEN_NAME = '$eof';
9
- /**
10
- * Builds a token value from a rule name, matched text, and source offset.
11
- *
12
- * @param name - Token rule name from the grammar `tokens` section.
13
- * @param text - Matched lexeme text.
14
- * @param offset - Start offset of the lexeme in the source.
15
- * @returns A token record with a source span.
16
- */
17
- function token(name, text, offset) {
18
- return {
19
- name,
20
- text,
21
- location: {
22
- offset,
23
- length: text.length,
24
- },
25
- };
26
- }
27
- /**
28
- * Builds the end-of-input token at a source offset.
29
- *
30
- * @param offset - Source offset where input ended.
31
- * @returns An empty `$eof` token.
32
- */
33
- function eofToken(offset) {
34
- return token(exports.EOF_TOKEN_NAME, '', offset);
35
- }
36
- /**
37
- * Returns whether a token is the end-of-input marker.
38
- *
39
- * @param value - Token to test.
40
- */
41
- function isEofToken(value) {
42
- return value.name === exports.EOF_TOKEN_NAME;
43
- }
44
- //# sourceMappingURL=token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/lib/lexer/token.ts"],"names":[],"mappings":";;;AAuBA,sBAcC;AAQD,4BAGC;AAOD,gCAGC;AAxDD,+CAA+C;AAClC,QAAA,cAAc,GAAG,MAAM,CAAC;AAYrC;;;;;;;GAOG;AACH,SAAgB,KAAK,CACjB,IAAY,EACZ,IAAY,EACZ,MAAc;IAGd,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAE;YACN,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB;KACJ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,MAAc;IAEnC,OAAO,KAAK,CAAC,sBAAc,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,KAAY;IAEnC,OAAO,KAAK,CAAC,IAAI,KAAK,sBAAc,CAAC;AACzC,CAAC"}
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParseContextError = void 0;
4
- const parser_lr_error_js_1 = require("./errors/parser-lr-error.js");
5
- /**
6
- * Thrown when a parse context cannot be constructed from supplied sources.
7
- */
8
- class ParseContextError extends parser_lr_error_js_1.ParserLrError {
9
- /**
10
- * Creates a parse context configuration error.
11
- *
12
- * @param message - Human-readable failure description.
13
- */
14
- constructor(message) {
15
- super(message);
16
- }
17
- }
18
- exports.ParseContextError = ParseContextError;
19
- //# sourceMappingURL=parse-context-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-context-error.js","sourceRoot":"","sources":["../../src/lib/parse-context-error.ts"],"names":[],"mappings":";;;AAAA,oEAA4D;AAE5D;;GAEG;AACH,MAAa,iBAAkB,SAAQ,kCAAa;IAEhD;;;;OAIG;IACH,YAAmB,OAAe;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;CACJ;AAXD,8CAWC"}