grammar-composer 0.4.0 → 0.6.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 (60) hide show
  1. package/README.md +144 -89
  2. package/dist/exports/Exports.d.ts +2 -0
  3. package/dist/exports/Exports.d.ts.map +1 -1
  4. package/dist/exports/Exports.js +2 -0
  5. package/dist/exports/Exports.js.map +1 -1
  6. package/dist/parser-generator/Grammar.d.ts +8 -1
  7. package/dist/parser-generator/Grammar.d.ts.map +1 -1
  8. package/dist/parser-generator/Grammar.js +30 -225
  9. package/dist/parser-generator/Grammar.js.map +1 -1
  10. package/dist/parser-generator/ParseError.d.ts +37 -0
  11. package/dist/parser-generator/ParseError.d.ts.map +1 -0
  12. package/dist/parser-generator/ParseError.js +226 -0
  13. package/dist/parser-generator/ParseError.js.map +1 -0
  14. package/dist/parser-generator/StaticAnalysis.d.ts +6 -0
  15. package/dist/parser-generator/StaticAnalysis.d.ts.map +1 -0
  16. package/dist/parser-generator/StaticAnalysis.js +283 -0
  17. package/dist/parser-generator/StaticAnalysis.js.map +1 -0
  18. package/dist/parser-generator/TerminalToText.d.ts +15 -0
  19. package/dist/parser-generator/TerminalToText.d.ts.map +1 -0
  20. package/dist/parser-generator/TerminalToText.js +158 -0
  21. package/dist/parser-generator/TerminalToText.js.map +1 -0
  22. package/dist/parser-generator/TopDownParser.d.ts +4 -2
  23. package/dist/parser-generator/TopDownParser.d.ts.map +1 -1
  24. package/dist/parser-generator/TopDownParser.js +44 -42
  25. package/dist/parser-generator/TopDownParser.js.map +1 -1
  26. package/dist/tests/Test.js +23 -23
  27. package/dist/tests/Test.js.map +1 -1
  28. package/dist/tests/test-grammars/JsonGrammar.d.ts +12 -11
  29. package/dist/tests/test-grammars/JsonGrammar.d.ts.map +1 -1
  30. package/dist/tests/test-grammars/JsonGrammar.js +25 -10
  31. package/dist/tests/test-grammars/JsonGrammar.js.map +1 -1
  32. package/dist/tests/test-grammars/RegExpGrammar.d.ts +25 -25
  33. package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
  34. package/dist/tests/test-grammars/RegExpGrammar.js +48 -31
  35. package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
  36. package/dist/tests/test-grammars/XmlGrammar.d.ts +11 -10
  37. package/dist/tests/test-grammars/XmlGrammar.d.ts.map +1 -1
  38. package/dist/tests/test-grammars/XmlGrammar.js +19 -8
  39. package/dist/tests/test-grammars/XmlGrammar.js.map +1 -1
  40. package/dist/utilities/LineAndColumn.d.ts +7 -0
  41. package/dist/utilities/LineAndColumn.d.ts.map +1 -0
  42. package/dist/utilities/LineAndColumn.js +52 -0
  43. package/dist/utilities/LineAndColumn.js.map +1 -0
  44. package/dist/utilities/Timer.d.ts +7 -3
  45. package/dist/utilities/Timer.d.ts.map +1 -1
  46. package/dist/utilities/Timer.js +41 -39
  47. package/dist/utilities/Timer.js.map +1 -1
  48. package/package.json +3 -3
  49. package/src/exports/Exports.ts +2 -0
  50. package/src/parser-generator/Grammar.ts +59 -265
  51. package/src/parser-generator/ParseError.ts +337 -0
  52. package/src/parser-generator/StaticAnalysis.ts +340 -0
  53. package/src/parser-generator/TerminalToText.ts +196 -0
  54. package/src/parser-generator/TopDownParser.ts +67 -49
  55. package/src/tests/Test.ts +26 -24
  56. package/src/tests/test-grammars/JsonGrammar.ts +28 -10
  57. package/src/tests/test-grammars/RegExpGrammar.ts +65 -46
  58. package/src/tests/test-grammars/XmlGrammar.ts +20 -8
  59. package/src/utilities/LineAndColumn.ts +61 -0
  60. package/src/utilities/Timer.ts +50 -48
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  A library to define, build and efficiently parse context-free grammars.
4
4
 
5
5
  * Grammars are defined using TypeScript class declarations
6
- * No tokenization stage. The generated parser accepts raw characters as input, meaning it's a form of lexer-free, or hybrid parser, supporting contextual tokenization - that is, low-level character patterns can be specialized to different high-level parser contexts, and sub-patterns captured in the low-level regular expressions are directly embedded as part of the resulting parse tree
7
- * Raw character parsing is defined as part of the grammar via embedded `Pattern` objects that are internally processed through the [`regexp-composer`](https://github.com/rotemdan/regexp-composer) regular expression library. This means that any subset of the grammar that can be stated as a regular expression can be moved to be parsed using the highly optimized native JavaScript RegExp engine, instead of being parsed via the slower context-free parser
8
- * Top-down parsing (roughly equivalent to PEG parsing), with optional "packrat" caching that can be enabled or disabled for individual productions
6
+ * No tokenization stage. The generated parser accepts raw characters as input, meaning it's a form of lexer-free, hybrid parser, supporting contextual low-level parsing. This means low-level character patterns, recognized by a regular language, can be specialized to various high-level parser contexts, and sub-patterns captured in low-level regular expressions are directly embedded as part of the resulting parse tree
7
+ * Raw character parsing is defined as part of the grammar via embedded `Pattern` objects that are internally processed through the [`regexp-composer`](https://github.com/rotemdan/regexp-composer) regular expression library. This means that any subset of the grammar that can be stated as a regular grammar can be moved to be parsed using the highly optimized native JavaScript RegExp engine, instead of being parsed via the slower context-free parser
8
+ * Top-down parsing (roughly equivalent to PEG parsing), with optional "packrat" caching that can be enabled or disabled for individual productions or more specific grammar elements
9
9
  * Supports right-recursion, but will currently error when left-recursion is detected
10
10
  * Uses sophisticated static analysis to automatically identify and annotate optional productions
11
11
  * Provides useful parse-time error reporting, identifying the exact production involved and most likely alternatives at the failed position
@@ -26,12 +26,14 @@ npm install regexp-composer
26
26
  The grammar is defined within a container class `XmlGrammar`. It contains a mixture of higher-level, context-free productions and lower-level, regular expression productions.
27
27
 
28
28
  * Context-free grammar productions are defined by anonymous functions `() => ...`
29
- * Regular expression productions are defined by `pattern(...)`
29
+ * Regular expression productions are defined by `() => pattern(...)`
30
+
31
+ (Note: since version `0.5.0` all class members must be productions like `() => ...`, otherwise the grammar would cause a build error)
30
32
 
31
33
  In this example, context-free operators are prefixed with `G`, and regular expression operators are prefixed with `R`, to avoid confusion between similarly named operators:
32
34
 
33
35
  ```ts
34
- import * as G from 'grammar-composer'
36
+ import * as G from '../../exports/Exports.js'
35
37
  import * as R from 'regexp-composer'
36
38
 
37
39
  export class XmlGrammar {
@@ -47,7 +49,7 @@ export class XmlGrammar {
47
49
  )
48
50
  ]
49
51
 
50
- textFragment = G.pattern([
52
+ textFragment = () => G.pattern([
51
53
  R.oneOrMore(R.notAnyOfChars('<'))
52
54
  ])
53
55
 
@@ -59,7 +61,7 @@ export class XmlGrammar {
59
61
  this.tagEnd
60
62
  ]
61
63
 
62
- openingTagStart = G.pattern([
64
+ openingTagStart = () => G.pattern([
63
65
  '<',
64
66
 
65
67
  R.possibly('?'),
@@ -71,7 +73,7 @@ export class XmlGrammar {
71
73
  R.zeroOrMore(R.whitespace),
72
74
  ])
73
75
 
74
- tagEnd = G.pattern([
76
+ tagEnd = () => G.pattern([
75
77
  R.zeroOrMore(R.whitespace),
76
78
 
77
79
  R.possibly(R.anyOf('/', '?')),
@@ -79,7 +81,7 @@ export class XmlGrammar {
79
81
  '>'
80
82
  ])
81
83
 
82
- attribute = G.pattern([
84
+ attribute = () => G.pattern([
83
85
  R.zeroOrMore(R.whitespace),
84
86
 
85
87
  R.captureAs('attributeName',
@@ -99,7 +101,7 @@ export class XmlGrammar {
99
101
  ])
100
102
  ])
101
103
 
102
- closingTag = G.pattern([
104
+ closingTag = () => G.pattern([
103
105
  '</',
104
106
 
105
107
  R.zeroOrMore(R.whitespace),
@@ -121,7 +123,7 @@ export class XmlGrammar {
121
123
  this.tagEnd
122
124
  ]
123
125
 
124
- declarationTagOpening = G.pattern([
126
+ declarationTagOpening = () => G.pattern([
125
127
  '<!',
126
128
 
127
129
  R.captureAs('tagName',
@@ -131,7 +133,7 @@ export class XmlGrammar {
131
133
  R.zeroOrMore(R.whitespace)
132
134
  ])
133
135
 
134
- declarationTagAttribute = G.pattern([
136
+ declarationTagAttribute = () => G.pattern([
135
137
  R.zeroOrMore(R.whitespace),
136
138
 
137
139
  R.anyOf(
@@ -145,7 +147,7 @@ export class XmlGrammar {
145
147
  R.zeroOrMore(R.whitespace),
146
148
  ])
147
149
 
148
- comment = G.pattern([
150
+ comment = () => G.pattern([
149
151
  '<!--',
150
152
 
151
153
  R.captureAs('commentBody',
@@ -156,6 +158,9 @@ export class XmlGrammar {
156
158
  ])
157
159
  }
158
160
 
161
+ //////////////////////////////////////////////////////////////////////////////////////////////
162
+ // Helper regular expressions
163
+ //////////////////////////////////////////////////////////////////////////////////////////////
159
164
  const quotedString = R.anyOf(
160
165
  [
161
166
  '"',
@@ -172,12 +177,22 @@ const quotedString = R.anyOf(
172
177
  "'"
173
178
  ],
174
179
  )
180
+
181
+ //////////////////////////////////////////////////////////////////////////////////////////////
182
+ // Wrapped nonterminal names
183
+ //////////////////////////////////////////////////////////////////////////////////////////////
184
+ export const xmlGrammarUnwrappedNonterminalNames: G.GrammarNonterminalNames<XmlGrammar> = [
185
+ 'openingTagStart',
186
+ 'tagEnd',
187
+ 'declarationTagOpening',
188
+ ]
175
189
  ```
176
190
 
177
191
  ### Building and parsing using the XML grammar
178
192
 
179
193
  ```ts
180
194
  import { buildGrammar } from 'grammar-composer'
195
+ import { XmlGrammar, xmlGrammarUnwrappedNonterminalNames } from './XmlGrammar.js'
181
196
 
182
197
  const xmlString = `
183
198
  <!DOCTYPE web-app>
@@ -186,17 +201,6 @@ import { buildGrammar } from 'grammar-composer'
186
201
  <header>Adobe SVG Viewer</header>
187
202
  <item action="Open" id="Open">Open</item>
188
203
  <item action="OpenNew" id="OpenNew">Open New</item>
189
- <separator/>
190
- <item action="ZoomIn" id="ZoomIn">Zoom In</item>
191
- <item action="ZoomOut" id="ZoomOut">Zoom Out</item>
192
- <separator/>
193
- <item action="Quality" id="Quality">Quality</item>
194
- <item action="Pause" id="Pause">Pause</item>
195
- <item action="Mute" id="Mute">Mute</item>
196
- <separator/>
197
- <item action="Find" id="Find">Find...</item>
198
- <item action="FindAgain" id="FindAgain">Find Again</item>
199
- <item action="Copy" id="Copy">Copy</item>
200
204
  </menu>
201
205
  `
202
206
 
@@ -204,7 +208,13 @@ import { buildGrammar } from 'grammar-composer'
204
208
  //
205
209
  // Although `XmlGrammar` is defined as a class, there's no need to instantiate it,
206
210
  // just pass it as it is.
207
- const grammar = buildGrammar(XmlGrammar, 'document')
211
+ const grammar = buildGrammar(RegExpGrammar, 'root', {
212
+ // This list contains the names of Nonterminals that would be
213
+ // "passed through" when the parse tree is built,
214
+ // meaning they would not appear in the parse tree
215
+ // and their child nodes would be absorbed into their ancestor nodes.
216
+ unwrappedNonterminalNames: xmlGrammarUnwrappedNonterminalNames
217
+ })
208
218
 
209
219
  // Parse the XML string with the built grammar
210
220
  const parseTree = grammar.parse(xmlString)
@@ -217,15 +227,8 @@ The resulting parse tree looks like:
217
227
  {
218
228
  "name": "document",
219
229
  "startOffset": 0,
220
- "endOffset": 644,
221
- "sourceText": "\n<!DOCTYPE web-app>\n\n<menu>\n <header>Adobe SVG Viewer</header>\n <it
222
- em action=\"Open\" id=\"Open\">Open</item>\n <item action=\"OpenNew\" id=\"OpenNew\">Open New</ite
223
- m>\n <separator/>\n <item action=\"ZoomIn\" id=\"ZoomIn\">Zoom In</item>\n <item action=\"Zo
224
- omOut\" id=\"ZoomOut\">Zoom Out</item>\n <separator/>\n <item action=\"Quality\" id=\"Quality\"
225
- >Quality</item>\n <item action=\"Pause\" id=\"Pause\">Pause</item>\n <item action=\"Mute\" id=\
226
- "Mute\">Mute</item>\n <separator/>\n <item action=\"Find\" id=\"Find\">Find...</item>\n <ite
227
- m action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Copy\" id=\"Copy\">Copy
228
- </item>\n</menu>\n\n",
230
+ "endOffset": 177,
231
+ "sourceText": "\n<!DOCTYPE web-app>\n\n<menu>\n <header>Adobe SVG Viewer</header>\n <item action=\"Open\" id=\"Open\">Open</item>\n <item action=\"OpenNew\" id=\"OpenNew\">Open New</item>\n</menu>\n\n",
229
232
  "children": [
230
233
  {
231
234
  "name": "textFragment",
@@ -241,18 +244,10 @@ m action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Co
241
244
  "sourceText": "<!DOCTYPE web-app>",
242
245
  "children": [
243
246
  {
244
- "name": "declarationTagOpening",
245
- "startOffset": 1,
246
- "endOffset": 11,
247
- "sourceText": "<!DOCTYPE ",
248
- "children": [
249
- {
250
- "name": "tagName",
251
- "startOffset": 3,
252
- "endOffset": 10,
253
- "sourceText": "DOCTYPE"
254
- }
255
- ]
247
+ "name": "tagName",
248
+ "startOffset": 3,
249
+ "endOffset": 10,
250
+ "sourceText": "DOCTYPE"
256
251
  },
257
252
  {
258
253
  "name": "declarationTagAttribute",
@@ -267,13 +262,6 @@ m action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Co
267
262
  "sourceText": "web-app"
268
263
  }
269
264
  ]
270
- },
271
- {
272
- "name": "tagEnd",
273
- "startOffset": 18,
274
- "endOffset": 19,
275
- "sourceText": ">",
276
- "children": []
277
265
  }
278
266
  ]
279
267
  },
@@ -291,25 +279,10 @@ m action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Co
291
279
  "sourceText": "<menu>",
292
280
  "children": [
293
281
  {
294
- "name": "openingTagStart",
295
- "startOffset": 21,
282
+ "name": "tagName",
283
+ "startOffset": 22,
296
284
  "endOffset": 26,
297
- "sourceText": "<menu",
298
- "children": [
299
- {
300
- "name": "tagName",
301
- "startOffset": 22,
302
- "endOffset": 26,
303
- "sourceText": "menu"
304
- }
305
- ]
306
- },
307
- {
308
- "name": "tagEnd",
309
- "startOffset": 26,
310
- "endOffset": 27,
311
- "sourceText": ">",
312
- "children": []
285
+ "sourceText": "menu"
313
286
  }
314
287
  ]
315
288
  },
@@ -327,29 +300,116 @@ m action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Co
327
300
  "sourceText": "<header>",
328
301
  "children": [
329
302
  {
330
- "name": "openingTagStart",
331
- "startOffset": 32,
303
+ "name": "tagName",
304
+ "startOffset": 33,
332
305
  "endOffset": 39,
333
- "sourceText": "<header",
306
+ "sourceText": "header"
307
+ }
308
+ ]
309
+ },
310
+ {
311
+ "name": "textFragment",
312
+ "startOffset": 40,
313
+ "endOffset": 56,
314
+ "sourceText": "Adobe SVG Viewer",
315
+ "children": []
316
+ },
317
+ {
318
+ "name": "closingTag",
319
+ "startOffset": 56,
320
+ "endOffset": 65,
321
+ "sourceText": "</header>",
322
+ "children": [
323
+ {
324
+ "name": "tagName",
325
+ "startOffset": 58,
326
+ "endOffset": 64,
327
+ "sourceText": "header"
328
+ }
329
+ ]
330
+ },
331
+ {
332
+ "name": "textFragment",
333
+ "startOffset": 65,
334
+ "endOffset": 70,
335
+ "sourceText": "\n ",
336
+ "children": []
337
+ },
338
+ {
339
+ "name": "openingTag",
340
+ "startOffset": 70,
341
+ "endOffset": 100,
342
+ "sourceText": "<item action=\"Open\" id=\"Open\">",
343
+ "children": [
344
+ {
345
+ "name": "tagName",
346
+ "startOffset": 71,
347
+ "endOffset": 75,
348
+ "sourceText": "item"
349
+ },
350
+ {
351
+ "name": "attribute",
352
+ "startOffset": 76,
353
+ "endOffset": 90,
354
+ "sourceText": "action=\"Open\" ",
334
355
  "children": [
335
356
  {
336
- "name": "tagName",
337
- "startOffset": 33,
338
- "endOffset": 39,
339
- "sourceText": "header"
357
+ "name": "attributeName",
358
+ "startOffset": 76,
359
+ "endOffset": 82,
360
+ "sourceText": "action"
361
+ },
362
+ {
363
+ "name": "doubleQuotedStringContent",
364
+ "startOffset": 84,
365
+ "endOffset": 88,
366
+ "sourceText": "Open"
340
367
  }
341
368
  ]
342
369
  },
343
370
  {
344
- "name": "tagEnd",
345
- "startOffset": 39,
346
- "endOffset": 40,
347
- "sourceText": ">",
348
- "children": []
371
+ "name": "attribute",
372
+ "startOffset": 90,
373
+ "endOffset": 99,
374
+ "sourceText": "id=\"Open\"",
375
+ "children": [
376
+ {
377
+ "name": "attributeName",
378
+ "startOffset": 90,
379
+ "endOffset": 92,
380
+ "sourceText": "id"
381
+ },
382
+ {
383
+ "name": "doubleQuotedStringContent",
384
+ "startOffset": 94,
385
+ "endOffset": 98,
386
+ "sourceText": "Open"
387
+ }
388
+ ]
389
+ }
390
+ ]
391
+ },
392
+ {
393
+ "name": "textFragment",
394
+ "startOffset": 100,
395
+ "endOffset": 104,
396
+ "sourceText": "Open",
397
+ "children": []
398
+ },
399
+ {
400
+ "name": "closingTag",
401
+ "startOffset": 104,
402
+ "endOffset": 111,
403
+ "sourceText": "</item>",
404
+ "children": [
405
+ {
406
+ "name": "tagName",
407
+ "startOffset": 106,
408
+ "endOffset": 110,
409
+ "sourceText": "item"
349
410
  }
350
411
  ]
351
412
  },
352
-
353
413
  ...
354
414
  ```
355
415
 
@@ -389,11 +449,6 @@ Store the result of parsing using this grammar element and reuse when it's subse
389
449
 
390
450
  Don't cache this grammar element.
391
451
 
392
- ## Future
393
-
394
- * Allow raw regular expressions as part of the grammar
395
- * Allow to include user-provided parser functions
396
-
397
452
  ## License
398
453
 
399
454
  MIT
@@ -1,2 +1,4 @@
1
1
  export * from '../parser-generator/Grammar.js';
2
+ export { ParseError } from '../parser-generator/ParseError.js';
3
+ export * from '../parser-generator/TopDownParser.js';
2
4
  //# sourceMappingURL=Exports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Exports.d.ts","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"Exports.d.ts","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAC9D,cAAc,sCAAsC,CAAA"}
@@ -1,2 +1,4 @@
1
1
  export * from '../parser-generator/Grammar.js';
2
+ export { ParseError } from '../parser-generator/ParseError.js';
3
+ export * from '../parser-generator/TopDownParser.js';
2
4
  //# sourceMappingURL=Exports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Exports.js","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"Exports.js","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAC9D,cAAc,sCAAsC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Pattern } from 'regexp-composer';
2
2
  export declare function buildGrammar<T extends {
3
3
  [key: string]: any;
4
- }>(obj: T | (new () => T), startProductionName: keyof T): Grammar<T>;
4
+ }>(definitionObject: T | (new () => T), startProductionName: keyof T, options?: GrammarBuilderOptions<T>): Grammar<T>;
5
5
  export declare function zeroOrMore(content: Production): Repetition;
6
6
  export declare function oneOrMore(content: Production): Repetition;
7
7
  export declare function anyOf(...members: Production[]): Choice;
@@ -25,6 +25,7 @@ interface GrammarElementBase {
25
25
  optional: boolean;
26
26
  cached: boolean;
27
27
  cacheId?: number;
28
+ name?: string;
28
29
  }
29
30
  export type Terminal = StringTerminal | PatternTerminal;
30
31
  export interface StringTerminal extends GrammarElementBase {
@@ -40,6 +41,8 @@ export interface Nonterminal extends GrammarElementBase {
40
41
  type: 'Nonterminal';
41
42
  name: string;
42
43
  content: GrammarElement;
44
+ unwrapped: boolean;
45
+ grammarNonterminal?: Nonterminal;
43
46
  }
44
47
  export interface Sequence extends GrammarElementBase {
45
48
  type: 'Sequence';
@@ -58,5 +61,9 @@ export interface NonterminalReference extends GrammarElementBase {
58
61
  type: 'NonterminalReference';
59
62
  reference: Function;
60
63
  }
64
+ export interface GrammarBuilderOptions<T> {
65
+ unwrappedNonterminalNames?: GrammarNonterminalNames<T>;
66
+ }
67
+ export type GrammarNonterminalNames<T> = (keyof T)[];
61
68
  export {};
62
69
  //# sourceMappingURL=Grammar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grammar.d.ts","sourceRoot":"","sources":["../../src/parser-generator/Grammar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Grammar.d.ts","sourceRoot":"","sources":["../../src/parser-generator/Grammar.ts"],"names":[],"mappings":"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"}