parser-lr 0.0.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +112 -1
  2. package/bin/parser-lr.js +12502 -16
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/ast/ast-node.d.ts +59 -0
  5. package/dist/lib/ast/ast-node.d.ts.map +1 -0
  6. package/dist/lib/ast/ast-node.js +66 -0
  7. package/dist/lib/ast/ast-node.js.map +1 -0
  8. package/dist/lib/errors/index.d.ts +2 -0
  9. package/dist/lib/errors/index.d.ts.map +1 -0
  10. package/dist/lib/errors/index.js +2 -0
  11. package/dist/lib/errors/index.js.map +1 -0
  12. package/dist/lib/errors/parser-lr-error.d.ts +30 -0
  13. package/dist/lib/errors/parser-lr-error.d.ts.map +1 -0
  14. package/dist/lib/errors/parser-lr-error.js +45 -0
  15. package/dist/lib/errors/parser-lr-error.js.map +1 -0
  16. package/dist/lib/grammar/ast-schema.d.ts +28 -0
  17. package/dist/lib/grammar/ast-schema.d.ts.map +1 -0
  18. package/dist/lib/grammar/ast-schema.js +39 -0
  19. package/dist/lib/grammar/ast-schema.js.map +1 -0
  20. package/dist/lib/grammar/ast-type.d.ts +12 -0
  21. package/dist/lib/grammar/ast-type.d.ts.map +1 -0
  22. package/dist/lib/grammar/ast-type.js +2 -0
  23. package/dist/lib/grammar/ast-type.js.map +1 -0
  24. package/dist/lib/grammar/expression.d.ts +69 -0
  25. package/dist/lib/grammar/expression.d.ts.map +1 -0
  26. package/dist/lib/grammar/expression.js +2 -0
  27. package/dist/lib/grammar/expression.js.map +1 -0
  28. package/dist/lib/grammar/grammar-from-cst.d.ts +10 -0
  29. package/dist/lib/grammar/grammar-from-cst.d.ts.map +1 -0
  30. package/dist/lib/grammar/grammar-from-cst.js +638 -0
  31. package/dist/lib/grammar/grammar-from-cst.js.map +1 -0
  32. package/dist/lib/grammar/grammar-literals.d.ts +18 -0
  33. package/dist/lib/grammar/grammar-literals.d.ts.map +1 -0
  34. package/dist/lib/grammar/grammar-literals.js +67 -0
  35. package/dist/lib/grammar/grammar-literals.js.map +1 -0
  36. package/dist/lib/grammar/grammar.d.ts +45 -0
  37. package/dist/lib/grammar/grammar.d.ts.map +1 -0
  38. package/dist/lib/grammar/grammar.js +60 -0
  39. package/dist/lib/grammar/grammar.js.map +1 -0
  40. package/dist/lib/grammar/grammar.json +7950 -0
  41. package/dist/lib/grammar/index.d.ts +13 -0
  42. package/dist/lib/grammar/index.d.ts.map +1 -0
  43. package/dist/lib/grammar/index.js +7 -0
  44. package/dist/lib/grammar/index.js.map +1 -0
  45. package/dist/lib/grammar/meta-grammar-table.d.ts +19 -0
  46. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -0
  47. package/dist/lib/grammar/meta-grammar-table.js +32 -0
  48. package/dist/lib/grammar/meta-grammar-table.js.map +1 -0
  49. package/dist/lib/grammar/production.d.ts +9 -0
  50. package/dist/lib/grammar/production.d.ts.map +1 -0
  51. package/dist/lib/grammar/production.js +2 -0
  52. package/dist/lib/grammar/production.js.map +1 -0
  53. package/dist/lib/grammar/read-grammar-error.d.ts +15 -0
  54. package/dist/lib/grammar/read-grammar-error.d.ts.map +1 -0
  55. package/dist/lib/grammar/read-grammar-error.js +18 -0
  56. package/dist/lib/grammar/read-grammar-error.js.map +1 -0
  57. package/dist/lib/grammar/read-grammar.d.ts +9 -0
  58. package/dist/lib/grammar/read-grammar.d.ts.map +1 -0
  59. package/dist/lib/grammar/read-grammar.js +21 -0
  60. package/dist/lib/grammar/read-grammar.js.map +1 -0
  61. package/dist/lib/grammar/token-rule.d.ts +11 -0
  62. package/dist/lib/grammar/token-rule.d.ts.map +1 -0
  63. package/dist/lib/grammar/token-rule.js +2 -0
  64. package/dist/lib/grammar/token-rule.js.map +1 -0
  65. package/dist/lib/grammar/transform-expression.d.ts +55 -0
  66. package/dist/lib/grammar/transform-expression.d.ts.map +1 -0
  67. package/dist/lib/grammar/transform-expression.js +2 -0
  68. package/dist/lib/grammar/transform-expression.js.map +1 -0
  69. package/dist/lib/grammar/transform-rule.d.ts +16 -0
  70. package/dist/lib/grammar/transform-rule.d.ts.map +1 -0
  71. package/dist/lib/grammar/transform-rule.js +2 -0
  72. package/dist/lib/grammar/transform-rule.js.map +1 -0
  73. package/dist/lib/grammar/transform-schema.d.ts +28 -0
  74. package/dist/lib/grammar/transform-schema.d.ts.map +1 -0
  75. package/dist/lib/grammar/transform-schema.js +39 -0
  76. package/dist/lib/grammar/transform-schema.js.map +1 -0
  77. package/dist/lib/index.d.ts +19 -0
  78. package/dist/lib/index.d.ts.map +1 -1
  79. package/dist/lib/index.js +13 -0
  80. package/dist/lib/index.js.map +1 -1
  81. package/dist/lib/lexer/index.d.ts +10 -0
  82. package/dist/lib/lexer/index.d.ts.map +1 -0
  83. package/dist/lib/lexer/index.js +8 -0
  84. package/dist/lib/lexer/index.js.map +1 -0
  85. package/dist/lib/lexer/lexer-compile-error.d.ts +15 -0
  86. package/dist/lib/lexer/lexer-compile-error.d.ts.map +1 -0
  87. package/dist/lib/lexer/lexer-compile-error.js +18 -0
  88. package/dist/lib/lexer/lexer-compile-error.js.map +1 -0
  89. package/dist/lib/lexer/lexer-compile.d.ts +94 -0
  90. package/dist/lib/lexer/lexer-compile.d.ts.map +1 -0
  91. package/dist/lib/lexer/lexer-compile.js +189 -0
  92. package/dist/lib/lexer/lexer-compile.js.map +1 -0
  93. package/dist/lib/lexer/lexer-error.d.ts +15 -0
  94. package/dist/lib/lexer/lexer-error.d.ts.map +1 -0
  95. package/dist/lib/lexer/lexer-error.js +18 -0
  96. package/dist/lib/lexer/lexer-error.js.map +1 -0
  97. package/dist/lib/lexer/lexer-input-error.d.ts +11 -0
  98. package/dist/lib/lexer/lexer-input-error.d.ts.map +1 -0
  99. package/dist/lib/lexer/lexer-input-error.js +13 -0
  100. package/dist/lib/lexer/lexer-input-error.js.map +1 -0
  101. package/dist/lib/lexer/lexer-state-error.d.ts +13 -0
  102. package/dist/lib/lexer/lexer-state-error.d.ts.map +1 -0
  103. package/dist/lib/lexer/lexer-state-error.js +15 -0
  104. package/dist/lib/lexer/lexer-state-error.js.map +1 -0
  105. package/dist/lib/lexer/lexer.d.ts +111 -0
  106. package/dist/lib/lexer/lexer.d.ts.map +1 -0
  107. package/dist/lib/lexer/lexer.js +270 -0
  108. package/dist/lib/lexer/lexer.js.map +1 -0
  109. package/dist/lib/lexer/token.d.ts +34 -0
  110. package/dist/lib/lexer/token.d.ts.map +1 -0
  111. package/dist/lib/lexer/token.js +38 -0
  112. package/dist/lib/lexer/token.js.map +1 -0
  113. package/dist/lib/parse-context-error.d.ts +13 -0
  114. package/dist/lib/parse-context-error.d.ts.map +1 -0
  115. package/dist/lib/parse-context-error.js +15 -0
  116. package/dist/lib/parse-context-error.js.map +1 -0
  117. package/dist/lib/parse-context.d.ts +106 -0
  118. package/dist/lib/parse-context.d.ts.map +1 -0
  119. package/dist/lib/parse-context.js +133 -0
  120. package/dist/lib/parse-context.js.map +1 -0
  121. package/dist/lib/parse-output-error.d.ts +13 -0
  122. package/dist/lib/parse-output-error.d.ts.map +1 -0
  123. package/dist/lib/parse-output-error.js +15 -0
  124. package/dist/lib/parse-output-error.js.map +1 -0
  125. package/dist/lib/parse-output.d.ts +10 -0
  126. package/dist/lib/parse-output.d.ts.map +1 -0
  127. package/dist/lib/parse-output.js +15 -0
  128. package/dist/lib/parse-output.js.map +1 -0
  129. package/dist/lib/parse-table/analysis/first-follow.d.ts +124 -0
  130. package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -0
  131. package/dist/lib/parse-table/analysis/first-follow.js +274 -0
  132. package/dist/lib/parse-table/analysis/first-follow.js.map +1 -0
  133. package/dist/lib/parse-table/analysis/index.d.ts +2 -0
  134. package/dist/lib/parse-table/analysis/index.d.ts.map +1 -0
  135. package/dist/lib/parse-table/analysis/index.js +2 -0
  136. package/dist/lib/parse-table/analysis/index.js.map +1 -0
  137. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts +65 -0
  138. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts.map +1 -0
  139. package/dist/lib/parse-table/bnf/bnf-grammar.js +136 -0
  140. package/dist/lib/parse-table/bnf/bnf-grammar.js.map +1 -0
  141. package/dist/lib/parse-table/bnf/bnf-production.d.ts +12 -0
  142. package/dist/lib/parse-table/bnf/bnf-production.d.ts.map +1 -0
  143. package/dist/lib/parse-table/bnf/bnf-production.js +2 -0
  144. package/dist/lib/parse-table/bnf/bnf-production.js.map +1 -0
  145. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts +40 -0
  146. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts.map +1 -0
  147. package/dist/lib/parse-table/bnf/bnf-symbol.js +35 -0
  148. package/dist/lib/parse-table/bnf/bnf-symbol.js.map +1 -0
  149. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts +104 -0
  150. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -0
  151. package/dist/lib/parse-table/bnf/desugar-ebnf.js +217 -0
  152. package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -0
  153. package/dist/lib/parse-table/bnf/index.d.ts +6 -0
  154. package/dist/lib/parse-table/bnf/index.d.ts.map +1 -0
  155. package/dist/lib/parse-table/bnf/index.js +4 -0
  156. package/dist/lib/parse-table/bnf/index.js.map +1 -0
  157. package/dist/lib/parse-table/build-lr-table.d.ts +11 -0
  158. package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -0
  159. package/dist/lib/parse-table/build-lr-table.js +158 -0
  160. package/dist/lib/parse-table/build-lr-table.js.map +1 -0
  161. package/dist/lib/parse-table/index.d.ts +22 -0
  162. package/dist/lib/parse-table/index.d.ts.map +1 -0
  163. package/dist/lib/parse-table/index.js +15 -0
  164. package/dist/lib/parse-table/index.js.map +1 -0
  165. package/dist/lib/parse-table/lr-algorithm-error.d.ts +13 -0
  166. package/dist/lib/parse-table/lr-algorithm-error.d.ts.map +1 -0
  167. package/dist/lib/parse-table/lr-algorithm-error.js +15 -0
  168. package/dist/lib/parse-table/lr-algorithm-error.js.map +1 -0
  169. package/dist/lib/parse-table/lr-algorithm.d.ts +19 -0
  170. package/dist/lib/parse-table/lr-algorithm.d.ts.map +1 -0
  171. package/dist/lib/parse-table/lr-algorithm.js +27 -0
  172. package/dist/lib/parse-table/lr-algorithm.js.map +1 -0
  173. package/dist/lib/parse-table/lr0/index.d.ts +3 -0
  174. package/dist/lib/parse-table/lr0/index.d.ts.map +1 -0
  175. package/dist/lib/parse-table/lr0/index.js +2 -0
  176. package/dist/lib/parse-table/lr0/index.js.map +1 -0
  177. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +106 -0
  178. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -0
  179. package/dist/lib/parse-table/lr0/lr0-item-set.js +235 -0
  180. package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -0
  181. package/dist/lib/parse-table/lr1/index.d.ts +3 -0
  182. package/dist/lib/parse-table/lr1/index.d.ts.map +1 -0
  183. package/dist/lib/parse-table/lr1/index.js +2 -0
  184. package/dist/lib/parse-table/lr1/index.js.map +1 -0
  185. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +157 -0
  186. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -0
  187. package/dist/lib/parse-table/lr1/lr1-item-set.js +380 -0
  188. package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -0
  189. package/dist/lib/parse-table/parse-table-build-error.d.ts +17 -0
  190. package/dist/lib/parse-table/parse-table-build-error.d.ts.map +1 -0
  191. package/dist/lib/parse-table/parse-table-build-error.js +20 -0
  192. package/dist/lib/parse-table/parse-table-build-error.js.map +1 -0
  193. package/dist/lib/parse-table/parse-table-error.d.ts +13 -0
  194. package/dist/lib/parse-table/parse-table-error.d.ts.map +1 -0
  195. package/dist/lib/parse-table/parse-table-error.js +15 -0
  196. package/dist/lib/parse-table/parse-table-error.js.map +1 -0
  197. package/dist/lib/parse-table/parse-table-json.d.ts +50 -0
  198. package/dist/lib/parse-table/parse-table-json.d.ts.map +1 -0
  199. package/dist/lib/parse-table/parse-table-json.js +9 -0
  200. package/dist/lib/parse-table/parse-table-json.js.map +1 -0
  201. package/dist/lib/parse-table/parse-table.d.ts +154 -0
  202. package/dist/lib/parse-table/parse-table.d.ts.map +1 -0
  203. package/dist/lib/parse-table/parse-table.js +314 -0
  204. package/dist/lib/parse-table/parse-table.js.map +1 -0
  205. package/dist/lib/parse-table/slr/index.d.ts +4 -0
  206. package/dist/lib/parse-table/slr/index.d.ts.map +1 -0
  207. package/dist/lib/parse-table/slr/index.js +3 -0
  208. package/dist/lib/parse-table/slr/index.js.map +1 -0
  209. package/dist/lib/parse-table/slr/parse-action.d.ts +3 -0
  210. package/dist/lib/parse-table/slr/parse-action.d.ts.map +1 -0
  211. package/dist/lib/parse-table/slr/parse-action.js +2 -0
  212. package/dist/lib/parse-table/slr/parse-action.js.map +1 -0
  213. package/dist/lib/parse-table/slr/slr-table.d.ts +14 -0
  214. package/dist/lib/parse-table/slr/slr-table.d.ts.map +1 -0
  215. package/dist/lib/parse-table/slr/slr-table.js +14 -0
  216. package/dist/lib/parse-table/slr/slr-table.js.map +1 -0
  217. package/dist/lib/parse-table/table/index.d.ts +5 -0
  218. package/dist/lib/parse-table/table/index.d.ts.map +1 -0
  219. package/dist/lib/parse-table/table/index.js +4 -0
  220. package/dist/lib/parse-table/table/index.js.map +1 -0
  221. package/dist/lib/parse-table/table/lr-parse-table.d.ts +92 -0
  222. package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -0
  223. package/dist/lib/parse-table/table/lr-parse-table.js +144 -0
  224. package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -0
  225. package/dist/lib/parse-table/table/parse-action.d.ts +47 -0
  226. package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -0
  227. package/dist/lib/parse-table/table/parse-action.js +49 -0
  228. package/dist/lib/parse-table/table/parse-action.js.map +1 -0
  229. package/dist/lib/parse-table/table/table-builder-base.d.ts +63 -0
  230. package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -0
  231. package/dist/lib/parse-table/table/table-builder-base.js +129 -0
  232. package/dist/lib/parse-table/table/table-builder-base.js.map +1 -0
  233. package/dist/lib/parse-table/token-inventory.d.ts +9 -0
  234. package/dist/lib/parse-table/token-inventory.d.ts.map +1 -0
  235. package/dist/lib/parse-table/token-inventory.js +15 -0
  236. package/dist/lib/parse-table/token-inventory.js.map +1 -0
  237. package/dist/lib/parser-lr.d.ts +96 -2
  238. package/dist/lib/parser-lr.d.ts.map +1 -1
  239. package/dist/lib/parser-lr.js +130 -2
  240. package/dist/lib/parser-lr.js.map +1 -1
  241. package/dist/lib/shift-reduce/index.d.ts +3 -0
  242. package/dist/lib/shift-reduce/index.d.ts.map +1 -0
  243. package/dist/lib/shift-reduce/index.js +2 -0
  244. package/dist/lib/shift-reduce/index.js.map +1 -0
  245. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +82 -0
  246. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -0
  247. package/dist/lib/shift-reduce/shift-reduce-engine.js +204 -0
  248. package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -0
  249. package/dist/lib/transform/binding-map.d.ts +32 -0
  250. package/dist/lib/transform/binding-map.d.ts.map +1 -0
  251. package/dist/lib/transform/binding-map.js +59 -0
  252. package/dist/lib/transform/binding-map.js.map +1 -0
  253. package/dist/lib/transform/cst-transformer.d.ts +158 -0
  254. package/dist/lib/transform/cst-transformer.d.ts.map +1 -0
  255. package/dist/lib/transform/cst-transformer.js +381 -0
  256. package/dist/lib/transform/cst-transformer.js.map +1 -0
  257. package/dist/lib/transform/index.d.ts +4 -0
  258. package/dist/lib/transform/index.d.ts.map +1 -0
  259. package/dist/lib/transform/index.js +3 -0
  260. package/dist/lib/transform/index.js.map +1 -0
  261. package/docs/grammar.md +170 -0
  262. package/package.json +12 -4
@@ -0,0 +1,94 @@
1
+ import type { Grammar } from '../grammar/grammar.js';
2
+ /** Default lexer state when a grammar omits a `states` section. */
3
+ export declare const DEFAULT_LEXER_STATE = "initial";
4
+ /**
5
+ * Compiled token or skip rule ready for anchored matching.
6
+ */
7
+ export interface CompiledRule {
8
+ readonly name: string;
9
+ readonly skip: boolean;
10
+ readonly regex: RegExp;
11
+ readonly states: readonly string[] | null;
12
+ }
13
+ /**
14
+ * Compiled lexer rules and declared state names for one grammar.
15
+ */
16
+ export interface CompiledLexerRules {
17
+ readonly states: readonly string[];
18
+ readonly initialState: string;
19
+ readonly rules: readonly CompiledRule[];
20
+ }
21
+ /**
22
+ * Compiles token and skip rules from a grammar for streaming lexing.
23
+ *
24
+ * @param grammar - Grammar supplying lexer rule definitions.
25
+ * @returns Compiled rules and lexer state metadata.
26
+ */
27
+ export declare function compileLexerRules(grammar: Grammar): CompiledLexerRules;
28
+ /**
29
+ * Returns compiled rules active in a lexer state.
30
+ *
31
+ * @param compiled - Compiled lexer rules for a grammar.
32
+ * @param state - Current lexer state name.
33
+ * @returns Rules that apply in the state, preserving declaration order.
34
+ */
35
+ export declare function rulesForState(compiled: CompiledLexerRules, state: string): readonly CompiledRule[];
36
+ /**
37
+ * Resolves declared lexer states, supplying a default when omitted.
38
+ *
39
+ * @param states - State names from the grammar `states` section.
40
+ * @returns Non-empty state name list.
41
+ */
42
+ export declare function resolveLexerStates(states: readonly string[]): readonly string[];
43
+ /**
44
+ * Matches a compiled rule at the start of a source slice.
45
+ *
46
+ * @param rule - Compiled token or skip rule.
47
+ * @param slice - Remaining source text from the current offset.
48
+ * @returns Matched lexeme text, or null when the rule does not match.
49
+ */
50
+ export declare function matchRule(rule: CompiledRule, slice: string): string | null;
51
+ /**
52
+ * Returns whether more input could extend the match via a different token rule.
53
+ *
54
+ * @param buffer - Buffered source not yet consumed.
55
+ * @param matchedText - Current best match at the buffer start.
56
+ * @param rules - Candidate rules for the active lexer state.
57
+ */
58
+ export declare function hasLongerPossibleMatchCrossRule(buffer: string, matchedText: string, rules: readonly CompiledRule[]): boolean;
59
+ /**
60
+ * Returns whether a longer match may appear if more input arrives.
61
+ *
62
+ * @param buffer - Buffered source not yet consumed.
63
+ * @param matchedText - Current best match at the buffer start.
64
+ * @param rules - Candidate rules for the active lexer state.
65
+ * @param finished - Whether the input stream has ended.
66
+ */
67
+ export declare function hasLongerPossibleMatch(buffer: string, matchedText: string, rules: readonly CompiledRule[], finished: boolean): boolean;
68
+ /**
69
+ * Returns whether buffered input may become a token once more data arrives.
70
+ *
71
+ * @param buffer - Buffered source not yet consumed.
72
+ * @param rules - Candidate rules for the active lexer state.
73
+ */
74
+ export declare function isPrefixOfPotentialMatch(buffer: string, rules: readonly CompiledRule[]): boolean;
75
+ /**
76
+ * Finds the longest winning rule match at the start of a buffer.
77
+ *
78
+ * @param buffer - Buffered source to match from the start.
79
+ * @param rules - Candidate rules for the active lexer state.
80
+ * @returns The longest winning match, or null when nothing matches.
81
+ */
82
+ export declare function findLongestMatch(buffer: string, rules: readonly CompiledRule[]): {
83
+ name: string;
84
+ text: string;
85
+ skip: boolean;
86
+ } | null;
87
+ /**
88
+ * Validates that a lexer state name is declared in the grammar.
89
+ *
90
+ * @param compiled - Compiled lexer rules for a grammar.
91
+ * @param state - Candidate lexer state name.
92
+ */
93
+ export declare function assertLexerState(compiled: CompiledLexerRules, state: string): void;
94
+ //# sourceMappingURL=lexer-compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-compile.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMrD,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAI7C;;GAEG;AACH,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAYtE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,MAAM,GACd,SAAS,YAAY,EAAE,CAGzB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAQ/E;AA2BD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuB1E;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC3C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,YAAY,EAAE,GAC/B,OAAO,CAwBT;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,QAAQ,EAAE,OAAO,GAClB,OAAO,CAyBT;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,YAAY,EAAE,GAC/B,OAAO,CAmBT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,YAAY,EAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAyBtD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMlF"}
@@ -0,0 +1,189 @@
1
+ import { LexerCompileError } from './lexer-compile-error.js';
2
+ import { LexerStateError } from './lexer-state-error.js';
3
+ /** Default lexer state when a grammar omits a `states` section. */
4
+ export const DEFAULT_LEXER_STATE = 'initial';
5
+ const REGEX_LITERAL_TOKEN = 'regex_literal';
6
+ /**
7
+ * Compiles token and skip rules from a grammar for streaming lexing.
8
+ *
9
+ * @param grammar - Grammar supplying lexer rule definitions.
10
+ * @returns Compiled rules and lexer state metadata.
11
+ */
12
+ export function compileLexerRules(grammar) {
13
+ const states = resolveLexerStates(grammar.states);
14
+ return {
15
+ states,
16
+ initialState: states[0] ?? DEFAULT_LEXER_STATE,
17
+ rules: [
18
+ ...grammar.tokenRules.map((rule) => compileRule(rule, false)),
19
+ ...grammar.skipRules.map((rule) => compileRule(rule, true)),
20
+ ],
21
+ };
22
+ }
23
+ /**
24
+ * Returns compiled rules active in a lexer state.
25
+ *
26
+ * @param compiled - Compiled lexer rules for a grammar.
27
+ * @param state - Current lexer state name.
28
+ * @returns Rules that apply in the state, preserving declaration order.
29
+ */
30
+ export function rulesForState(compiled, state) {
31
+ return compiled.rules.filter((rule) => rule.states === null || rule.states.includes(state));
32
+ }
33
+ /**
34
+ * Resolves declared lexer states, supplying a default when omitted.
35
+ *
36
+ * @param states - State names from the grammar `states` section.
37
+ * @returns Non-empty state name list.
38
+ */
39
+ export function resolveLexerStates(states) {
40
+ if (states.length === 0) {
41
+ return [DEFAULT_LEXER_STATE];
42
+ }
43
+ return states;
44
+ }
45
+ /**
46
+ * Compiles one grammar token or skip rule into an anchored regular expression.
47
+ *
48
+ * @param rule - Token rule from the grammar file.
49
+ * @param skip - Whether matches should be discarded instead of emitted.
50
+ * @returns A compiled rule for lexing.
51
+ */
52
+ function compileRule(rule, skip) {
53
+ try {
54
+ return {
55
+ name: rule.name,
56
+ skip,
57
+ regex: new RegExp(`^(?:${rule.pattern})`, rule.flags),
58
+ states: rule.states === undefined ? null : [...rule.states],
59
+ };
60
+ }
61
+ catch (error) {
62
+ const message = error instanceof Error ? error.message : String(error);
63
+ throw new LexerCompileError(rule.name, message);
64
+ }
65
+ }
66
+ /**
67
+ * Matches a compiled rule at the start of a source slice.
68
+ *
69
+ * @param rule - Compiled token or skip rule.
70
+ * @param slice - Remaining source text from the current offset.
71
+ * @returns Matched lexeme text, or null when the rule does not match.
72
+ */
73
+ export function matchRule(rule, slice) {
74
+ const match = rule.regex.exec(slice);
75
+ if (match === null || match.index !== 0) {
76
+ return null;
77
+ }
78
+ let text = match[0];
79
+ // Extend regex literals with optional JS flag letters after the closing slash.
80
+ if (rule.name === REGEX_LITERAL_TOKEN) {
81
+ const suffix = /^[gimsuy]*/.exec(slice.slice(text.length));
82
+ if (suffix !== null) {
83
+ text += suffix[0];
84
+ }
85
+ }
86
+ return text;
87
+ }
88
+ /**
89
+ * Returns whether more input could extend the match via a different token rule.
90
+ *
91
+ * @param buffer - Buffered source not yet consumed.
92
+ * @param matchedText - Current best match at the buffer start.
93
+ * @param rules - Candidate rules for the active lexer state.
94
+ */
95
+ export function hasLongerPossibleMatchCrossRule(buffer, matchedText, rules) {
96
+ const current = findLongestMatch(buffer, rules);
97
+ if (current === null || current.text !== matchedText) {
98
+ return false;
99
+ }
100
+ for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
101
+ const extendedMatch = findLongestMatch(buffer + suffix, rules);
102
+ if (extendedMatch !== null
103
+ && extendedMatch.text.length > current.text.length
104
+ && extendedMatch.name !== current.name) {
105
+ return true;
106
+ }
107
+ }
108
+ return false;
109
+ }
110
+ /**
111
+ * Returns whether a longer match may appear if more input arrives.
112
+ *
113
+ * @param buffer - Buffered source not yet consumed.
114
+ * @param matchedText - Current best match at the buffer start.
115
+ * @param rules - Candidate rules for the active lexer state.
116
+ * @param finished - Whether the input stream has ended.
117
+ */
118
+ export function hasLongerPossibleMatch(buffer, matchedText, rules, finished) {
119
+ if (finished) {
120
+ return false;
121
+ }
122
+ const current = findLongestMatch(buffer, rules);
123
+ if (current === null || current.text !== matchedText) {
124
+ return false;
125
+ }
126
+ for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
127
+ const extendedMatch = findLongestMatch(buffer + suffix, rules);
128
+ if (extendedMatch !== null && extendedMatch.text.length > current.text.length) {
129
+ return true;
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Returns whether buffered input may become a token once more data arrives.
136
+ *
137
+ * @param buffer - Buffered source not yet consumed.
138
+ * @param rules - Candidate rules for the active lexer state.
139
+ */
140
+ export function isPrefixOfPotentialMatch(buffer, rules) {
141
+ if (buffer.length === 0) {
142
+ return true;
143
+ }
144
+ for (const suffix of ['=', '+', '-', '/', '"', '(', '0', 'a', 'X']) {
145
+ const extended = buffer + suffix;
146
+ const match = findLongestMatch(extended, rules);
147
+ if (match !== null && match.text.startsWith(buffer) && match.text.length > buffer.length) {
148
+ return true;
149
+ }
150
+ }
151
+ return false;
152
+ }
153
+ /**
154
+ * Finds the longest winning rule match at the start of a buffer.
155
+ *
156
+ * @param buffer - Buffered source to match from the start.
157
+ * @param rules - Candidate rules for the active lexer state.
158
+ * @returns The longest winning match, or null when nothing matches.
159
+ */
160
+ export function findLongestMatch(buffer, rules) {
161
+ let bestMatch = null;
162
+ // Try every rule and keep the longest match, breaking ties by rule order.
163
+ for (const rule of rules) {
164
+ const matchedText = matchRule(rule, buffer);
165
+ if (matchedText === null || matchedText.length === 0) {
166
+ continue;
167
+ }
168
+ if (bestMatch === null || matchedText.length > bestMatch.text.length) {
169
+ bestMatch = {
170
+ name: rule.name,
171
+ text: matchedText,
172
+ skip: rule.skip,
173
+ };
174
+ }
175
+ }
176
+ return bestMatch;
177
+ }
178
+ /**
179
+ * Validates that a lexer state name is declared in the grammar.
180
+ *
181
+ * @param compiled - Compiled lexer rules for a grammar.
182
+ * @param state - Candidate lexer state name.
183
+ */
184
+ export function assertLexerState(compiled, state) {
185
+ if (!compiled.states.includes(state)) {
186
+ throw new LexerStateError(state);
187
+ }
188
+ }
189
+ //# sourceMappingURL=lexer-compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-compile.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Error thrown when the lexer cannot match input at the current offset.
4
+ */
5
+ export declare class LexerError extends ParserLrError {
6
+ readonly offset: number;
7
+ /**
8
+ * Creates a lexer error at a source offset.
9
+ *
10
+ * @param message - Human-readable failure description.
11
+ * @param offset - Source offset where lexing stopped.
12
+ */
13
+ constructor(message: string, offset: number);
14
+ }
15
+ //# sourceMappingURL=lexer-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-error.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,UAAW,SAAQ,aAAa;aAUrB,MAAM,EAAE,MAAM;IARlC;;;;;OAKG;gBAEC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM;CAKrC"}
@@ -0,0 +1,18 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Error thrown when the lexer cannot match input at the current offset.
4
+ */
5
+ export class LexerError extends ParserLrError {
6
+ offset;
7
+ /**
8
+ * Creates a lexer error at a source offset.
9
+ *
10
+ * @param message - Human-readable failure description.
11
+ * @param offset - Source offset where lexing stopped.
12
+ */
13
+ constructor(message, offset) {
14
+ super(message);
15
+ this.offset = offset;
16
+ }
17
+ }
18
+ //# sourceMappingURL=lexer-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,aAAa;IAUrB;IARpB;;;;;OAKG;IACH,YACI,OAAe,EACC,MAAc;QAG9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;IAIlC,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when source input is pushed after the lexer has finished.
4
+ */
5
+ export declare class LexerInputError extends ParserLrError {
6
+ /**
7
+ * Creates a lexer input sequencing error.
8
+ */
9
+ constructor();
10
+ }
11
+ //# sourceMappingURL=lexer-input-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-input-error.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-input-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAE9C;;OAEG;;CAKN"}
@@ -0,0 +1,13 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when source input is pushed after the lexer has finished.
4
+ */
5
+ export class LexerInputError extends ParserLrError {
6
+ /**
7
+ * Creates a lexer input sequencing error.
8
+ */
9
+ constructor() {
10
+ super('Cannot push input after finish()');
11
+ }
12
+ }
13
+ //# sourceMappingURL=lexer-input-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-input-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-input-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAE9C;;OAEG;IACH;QAEI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9C,CAAC;CACJ"}
@@ -0,0 +1,13 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when a lexer state name is not declared in the grammar.
4
+ */
5
+ export declare class LexerStateError extends ParserLrError {
6
+ /**
7
+ * Creates an unknown lexer state error.
8
+ *
9
+ * @param state - Requested lexer state name.
10
+ */
11
+ constructor(state: string);
12
+ }
13
+ //# sourceMappingURL=lexer-state-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-state-error.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-state-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAE9C;;;;OAIG;gBACgB,KAAK,EAAE,MAAM;CAInC"}
@@ -0,0 +1,15 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when a lexer state name is not declared in the grammar.
4
+ */
5
+ export class LexerStateError extends ParserLrError {
6
+ /**
7
+ * Creates an unknown lexer state error.
8
+ *
9
+ * @param state - Requested lexer state name.
10
+ */
11
+ constructor(state) {
12
+ super(`Unknown lexer state ${JSON.stringify(state)}`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=lexer-state-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer-state-error.js","sourceRoot":"","sources":["../../../src/lib/lexer/lexer-state-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAE9C;;;;OAIG;IACH,YAAmB,KAAa;QAE5B,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;CACJ"}
@@ -0,0 +1,111 @@
1
+ import type { Grammar } from '../grammar/grammar.js';
2
+ import type { Token } from './token.js';
3
+ /**
4
+ * Stream-based lexer driven by a grammar's `tokens`, `skip`, and `states` sections.
5
+ *
6
+ * Push source chunks with {@link push}, signal end-of-input with {@link finish},
7
+ * then read tokens via {@link next} or iteration. The final token is always `$eof`.
8
+ */
9
+ export declare class Lexer {
10
+ private readonly compiled;
11
+ private readonly queue;
12
+ private buffer;
13
+ private offset;
14
+ private finished;
15
+ private eofEmitted;
16
+ private currentState;
17
+ /**
18
+ * Creates a lexer from a parsed grammar.
19
+ *
20
+ * @param grammar - Grammar supplying token and skip rule definitions.
21
+ */
22
+ constructor(grammar: Grammar);
23
+ /**
24
+ * Returns the active lexer state name.
25
+ */
26
+ get state(): string;
27
+ /**
28
+ * Enters a declared lexer state.
29
+ *
30
+ * @param stateName - Lexer state to activate.
31
+ */
32
+ enterState(stateName: string): void;
33
+ /**
34
+ * Appends the next chunk of source text to the scan buffer.
35
+ *
36
+ * @param chunk - Source text fragment.
37
+ */
38
+ push(chunk: string): void;
39
+ /**
40
+ * Signals that no further source chunks will arrive.
41
+ */
42
+ finish(): void;
43
+ /**
44
+ * Returns the next token, or null when waiting for more input.
45
+ *
46
+ * @returns The next token, null while blocked, or `$eof` after input ends.
47
+ */
48
+ next(): Token | null;
49
+ /**
50
+ * Lexes an entire source string, including a trailing `$eof` token.
51
+ *
52
+ * @param source - Input text to tokenize.
53
+ * @returns Matched tokens in source order.
54
+ */
55
+ lex(source: string): readonly Token[];
56
+ /**
57
+ * Iterates all tokens until `$eof` after {@link finish} has been called.
58
+ */
59
+ [Symbol.iterator](): Iterator<Token>;
60
+ /**
61
+ * Scans the buffer and enqueues any tokens ready to emit.
62
+ *
63
+ * @param inputFinished - Whether the full input stream has ended.
64
+ * @param allowChunkBoundary - Whether to commit tokens at a chunk boundary.
65
+ */
66
+ private drain;
67
+ /**
68
+ * Finds the winning rule match at the start of the scan buffer.
69
+ *
70
+ * @param inputFinished - Whether the full input stream has ended.
71
+ * @param allowChunkBoundary - Whether to commit tokens at a chunk boundary.
72
+ */
73
+ private matchAtBufferStart;
74
+ /**
75
+ * Resets stream state for a fresh lex run.
76
+ */
77
+ private reset;
78
+ }
79
+ /**
80
+ * Lexes synchronous source chunks into a token stream ending with `$eof`.
81
+ *
82
+ * @param grammar - Grammar supplying lexer rules.
83
+ * @param chunks - Source text fragments in order.
84
+ * @returns Token iterator including `$eof`.
85
+ */
86
+ export declare function lexChunks(grammar: Grammar, chunks: Iterable<string>): IterableIterator<Token>;
87
+ /**
88
+ * Lexes asynchronous source chunks into a token stream ending with `$eof`.
89
+ *
90
+ * @param grammar - Grammar supplying lexer rules.
91
+ * @param chunks - Source text fragments in order.
92
+ * @returns Async token iterator including `$eof`.
93
+ */
94
+ export declare function lexChunksAsync(grammar: Grammar, chunks: AsyncIterable<string>): AsyncIterableIterator<Token>;
95
+ /**
96
+ * Collects all tokens from a synchronous chunk stream.
97
+ *
98
+ * @param grammar - Grammar supplying lexer rules.
99
+ * @param chunks - Source text fragments in order.
100
+ * @returns Matched tokens including `$eof`.
101
+ */
102
+ export declare function lexChunkStream(grammar: Grammar, chunks: Iterable<string>): readonly Token[];
103
+ /**
104
+ * Collects all tokens from an asynchronous chunk stream.
105
+ *
106
+ * @param grammar - Grammar supplying lexer rules.
107
+ * @param chunks - Source text fragments in order.
108
+ * @returns Matched tokens including `$eof`.
109
+ */
110
+ export declare function lexChunkStreamAsync(grammar: Grammar, chunks: AsyncIterable<string>): Promise<readonly Token[]>;
111
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../src/lib/lexer/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAcrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,KAAK;IAEd,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;OAIG;gBACgB,OAAO,EAAE,OAAO;IAMnC;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,CAGzB;IAED;;;;OAIG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;;OAIG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWhC;;OAEG;IACI,MAAM,IAAI,IAAI;IAMrB;;;;OAIG;IACI,IAAI,IAAI,KAAK,GAAG,IAAI;IA6B3B;;;;;OAKG;IACI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE;IAkB5C;;OAEG;IACI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;IAuB3C;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAmCb;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,KAAK;CAQhB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GACzB,gBAAgB,CAAC,KAAK,CAAC,CAKzB;AAED;;;;;;GAMG;AACH,wBAAuB,cAAc,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,qBAAqB,CAAC,KAAK,CAAC,CA0B9B;AAsCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GACzB,SAAS,KAAK,EAAE,CAGlB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAU3B"}