@ohm-js/wasm 0.1.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.
@@ -0,0 +1,1057 @@
1
+ /*
2
+ Exports a function which is a factory for ES5 parsers.
3
+ Based on https://github.com/ohmjs/sle17 with minor modifications.
4
+ */
5
+ const fac = async ns => {
6
+ // Combinators for instantiating the various PExp subclasses.
7
+ const _ = value => new ns.Terminal(value);
8
+ const app = ruleName => new ns.RuleApplication(ruleName);
9
+ const seq = (...exps) => new ns.Sequence(exps);
10
+ const choice = (...exps) => new ns.Choice(exps);
11
+ const rep = exp => new ns.Repetition(exp);
12
+ const not = exp => new ns.Not(exp);
13
+ const lookahead = exp => not(not(exp));
14
+ const range = (start, end) => new ns.Range(start, end);
15
+
16
+ const lexIgnored = exp => exp;
17
+
18
+ return new ns.Matcher({
19
+ start: app('program'),
20
+ // any: range('\u0000', '\uFFFF'),
21
+ any: ns.any,
22
+ // end: not(app('any')),
23
+ end: ns.end,
24
+ program: seq(lookahead(rep(app('directive'))), rep(app('sourceElement')), app('spaces')),
25
+ sourceCharacter: app('any'),
26
+ space: choice(app('whitespace'), app('lineTerminator'), app('comment')),
27
+ spaces: rep(app('space')),
28
+ whitespace: choice(
29
+ _('\t'),
30
+ _('\x0B'),
31
+ _('\x0C'),
32
+ _(' '),
33
+ _('\u00A0'),
34
+ _('\uFEFF'),
35
+ app('unicodeSpaceSeparator'),
36
+ ),
37
+ lineTerminator: choice(_('\n'), _('\r'), _('\u2028'), _('\u2029')),
38
+ lineTerminatorSequence: choice(
39
+ _('\n'),
40
+ seq(_('\r'), not(_('\n'))),
41
+ _('\u2028'),
42
+ _('\u2029'),
43
+ _('\r\n'),
44
+ ),
45
+ comment: choice(app('multiLineComment'), app('singleLineComment')),
46
+ multiLineComment: seq(_('/*'), rep(seq(not(_('*/')), app('sourceCharacter'))), _('*/')),
47
+ singleLineComment: seq(
48
+ _('//'),
49
+ rep(seq(not(app('lineTerminator')), app('sourceCharacter'))),
50
+ ),
51
+ identifier: seq(not(app('reservedWord')), app('identifierName')),
52
+ identifierName: seq(app('identifierStart'), rep(app('identifierPart'))),
53
+ identifierStart: choice(
54
+ app('letter'),
55
+ _('$'),
56
+ _('_'),
57
+ seq(_('\\'), app('unicodeEscapeSequence')),
58
+ ),
59
+ identifierPart: choice(
60
+ app('identifierStart'),
61
+ app('unicodeCombiningMark'),
62
+ app('unicodeDigit'),
63
+ app('unicodeConnectorPunctuation'),
64
+ _('\u200C'),
65
+ _('\u200D'),
66
+ ),
67
+ letter: choice(
68
+ range('a', 'z'),
69
+ range('A', 'Z'),
70
+ range('À', 'ÿ'),
71
+ app('unicodeCategoryNl'),
72
+ ),
73
+ unicodeCategoryNl: choice(
74
+ range('\u2160', '\u2182'),
75
+ _('\u3007'),
76
+ range('\u3021', '\u3029'),
77
+ ),
78
+ unicodeDigit: choice(
79
+ range('\u0030', '\u0039'),
80
+ range('\u0660', '\u0669'),
81
+ range('\u06F0', '\u06F9'),
82
+ range('\u0966', '\u096F'),
83
+ range('\u09E6', '\u09EF'),
84
+ range('\u0A66', '\u0A6F'),
85
+ range('\u0AE6', '\u0AEF'),
86
+ range('\u0B66', '\u0B6F'),
87
+ range('\u0BE7', '\u0BEF'),
88
+ range('\u0C66', '\u0C6F'),
89
+ range('\u0CE6', '\u0CEF'),
90
+ range('\u0D66', '\u0D6F'),
91
+ range('\u0E50', '\u0E59'),
92
+ range('\u0ED0', '\u0ED9'),
93
+ range('\u0F20', '\u0F29'),
94
+ range('\uFF10', '\uFF19'),
95
+ ),
96
+ unicodeCombiningMark: choice(
97
+ range('\u0300', '\u0345'),
98
+ range('\u0360', '\u0361'),
99
+ range('\u0483', '\u0486'),
100
+ range('\u0591', '\u05A1'),
101
+ range('\u05A3', '\u05B9'),
102
+ range('\u05BB', '\u05BD'),
103
+ range('\u05BF', '\u05BF'),
104
+ range('\u05C1', '\u05C2'),
105
+ range('\u05C4', '\u05C4'),
106
+ range('\u064B', '\u0652'),
107
+ range('\u0670', '\u0670'),
108
+ range('\u06D6', '\u06DC'),
109
+ range('\u06DF', '\u06E4'),
110
+ range('\u06E7', '\u06E8'),
111
+ range('\u06EA', '\u06ED'),
112
+ range('\u0901', '\u0902'),
113
+ range('\u093C', '\u093C'),
114
+ range('\u0941', '\u0948'),
115
+ range('\u094D', '\u094D'),
116
+ range('\u0951', '\u0954'),
117
+ range('\u0962', '\u0963'),
118
+ range('\u0981', '\u0981'),
119
+ range('\u09BC', '\u09BC'),
120
+ range('\u09C1', '\u09C4'),
121
+ range('\u09CD', '\u09CD'),
122
+ range('\u09E2', '\u09E3'),
123
+ range('\u0A02', '\u0A02'),
124
+ range('\u0A3C', '\u0A3C'),
125
+ range('\u0A41', '\u0A42'),
126
+ range('\u0A47', '\u0A48'),
127
+ range('\u0A4B', '\u0A4D'),
128
+ range('\u0A70', '\u0A71'),
129
+ range('\u0A81', '\u0A82'),
130
+ range('\u0ABC', '\u0ABC'),
131
+ range('\u0AC1', '\u0AC5'),
132
+ range('\u0AC7', '\u0AC8'),
133
+ range('\u0ACD', '\u0ACD'),
134
+ range('\u0B01', '\u0B01'),
135
+ range('\u0B3C', '\u0B3C'),
136
+ range('\u0B3F', '\u0B3F'),
137
+ range('\u0B41', '\u0B43'),
138
+ range('\u0B4D', '\u0B4D'),
139
+ range('\u0B56', '\u0B56'),
140
+ range('\u0B82', '\u0B82'),
141
+ range('\u0BC0', '\u0BC0'),
142
+ range('\u0BCD', '\u0BCD'),
143
+ range('\u0C3E', '\u0C40'),
144
+ range('\u0C46', '\u0C48'),
145
+ range('\u0C4A', '\u0C4D'),
146
+ range('\u0C55', '\u0C56'),
147
+ range('\u0CBF', '\u0CBF'),
148
+ range('\u0CC6', '\u0CC6'),
149
+ range('\u0CCC', '\u0CCD'),
150
+ range('\u0D41', '\u0D43'),
151
+ range('\u0D4D', '\u0D4D'),
152
+ range('\u0E31', '\u0E31'),
153
+ range('\u0E34', '\u0E3A'),
154
+ range('\u0E47', '\u0E4E'),
155
+ range('\u0EB1', '\u0EB1'),
156
+ range('\u0EB4', '\u0EB9'),
157
+ range('\u0EBB', '\u0EBC'),
158
+ range('\u0EC8', '\u0ECD'),
159
+ range('\u0F18', '\u0F19'),
160
+ range('\u0F35', '\u0F35'),
161
+ range('\u0F37', '\u0F37'),
162
+ range('\u0F39', '\u0F39'),
163
+ range('\u0F71', '\u0F7E'),
164
+ range('\u0F80', '\u0F84'),
165
+ range('\u0F86', '\u0F87'),
166
+ range('\u0F90', '\u0F95'),
167
+ range('\u0F97', '\u0F97'),
168
+ range('\u0F99', '\u0FAD'),
169
+ range('\u0FB1', '\u0FB7'),
170
+ range('\u0FB9', '\u0FB9'),
171
+ range('\u20D0', '\u20DC'),
172
+ range('\u20E1', '\u20E1'),
173
+ range('\u302A', '\u302F'),
174
+ range('\u3099', '\u309A'),
175
+ range('\uFB1E', '\uFB1E'),
176
+ range('\uFE20', '\uFE23'),
177
+ ),
178
+ unicodeConnectorPunctuation: choice(
179
+ _('\u005F'),
180
+ range('\u203F', '\u2040'),
181
+ _('\u30FB'),
182
+ range('\uFE33', '\uFE34'),
183
+ range('\uFE4D', '\uFE4F'),
184
+ _('\uFF3F'),
185
+ _('\uFF65'),
186
+ ),
187
+ unicodeSpaceSeparator: choice(range('\u2000', '\u200B'), _('\u3000')),
188
+ reservedWord: choice(
189
+ app('keyword'),
190
+ app('futureReservedWord'),
191
+ app('nullLiteral'),
192
+ app('booleanLiteral'),
193
+ ),
194
+ keyword: choice(
195
+ app('break'),
196
+ app('do'),
197
+ app('instanceof'),
198
+ app('typeof'),
199
+ app('case'),
200
+ app('else'),
201
+ app('new'),
202
+ app('var'),
203
+ app('catch'),
204
+ app('finally'),
205
+ app('return'),
206
+ app('void'),
207
+ app('continue'),
208
+ app('for'),
209
+ app('switch'),
210
+ app('while'),
211
+ app('debugger'),
212
+ app('function'),
213
+ app('this'),
214
+ app('with'),
215
+ app('default'),
216
+ app('if'),
217
+ app('throw'),
218
+ app('delete'),
219
+ app('in'),
220
+ app('try'),
221
+ ),
222
+ futureReservedWordLax: choice(
223
+ app('class'),
224
+ app('enum'),
225
+ app('extends'),
226
+ app('super'),
227
+ app('const'),
228
+ app('export'),
229
+ app('import'),
230
+ ),
231
+ futureReservedWordStrict: choice(
232
+ app('futureReservedWordLax'),
233
+ app('implements'),
234
+ app('let'),
235
+ app('private'),
236
+ app('public'),
237
+ app('interface'),
238
+ app('package'),
239
+ app('protected'),
240
+ app('static'),
241
+ app('yield'),
242
+ ),
243
+ futureReservedWord: app('futureReservedWordStrict'),
244
+ literal: choice(
245
+ app('nullLiteral'),
246
+ app('booleanLiteral'),
247
+ app('numericLiteral'),
248
+ app('stringLiteral'),
249
+ app('regularExpressionLiteral'),
250
+ ),
251
+ nullLiteral: seq(_('null'), not(app('identifierPart'))),
252
+ booleanLiteral: seq(choice(_('true'), _('false')), not(app('identifierPart'))),
253
+ numericLiteral: choice(
254
+ app('octalIntegerLiteral'),
255
+ app('hexIntegerLiteral'),
256
+ app('decimalLiteral'),
257
+ ),
258
+ decimalLiteral: choice(
259
+ seq(app('decimalIntegerLiteral'), _('.'), rep(app('decimalDigit')), app('exponentPart')),
260
+ seq(_('.'), seq(app('decimalDigit'), rep(app('decimalDigit'))), app('exponentPart')),
261
+ seq(app('decimalIntegerLiteral'), app('exponentPart')),
262
+ ),
263
+ decimalIntegerLiteral: choice(seq(app('nonZeroDigit'), rep(app('decimalDigit'))), _('0')),
264
+ decimalDigit: range('0', '9'),
265
+ nonZeroDigit: range('1', '9'),
266
+ exponentPart: choice(seq(app('exponentIndicator'), app('signedInteger')), seq()),
267
+ exponentIndicator: choice(_('e'), _('E')),
268
+ signedInteger: choice(
269
+ seq(_('+'), rep(app('decimalDigit'))),
270
+ seq(_('-'), rep(app('decimalDigit'))),
271
+ seq(app('decimalDigit'), rep(app('decimalDigit'))),
272
+ ),
273
+ hexIntegerLiteral: choice(
274
+ seq(_('0x'), seq(app('hexDigit'), rep(app('hexDigit')))),
275
+ seq(_('0X'), seq(app('hexDigit'), rep(app('hexDigit')))),
276
+ ),
277
+ hexDigit: choice(range('0', '9'), range('a', 'f'), range('A', 'F')),
278
+ octalIntegerLiteral: seq(_('0'), seq(app('octalDigit'), rep(app('octalDigit')))),
279
+ octalDigit: range('0', '7'),
280
+ stringLiteral: choice(
281
+ seq(_('"'), rep(app('doubleStringCharacter')), _('"')),
282
+ seq(_("'"), rep(app('singleStringCharacter')), _("'")),
283
+ ),
284
+ doubleStringCharacter: choice(
285
+ seq(not(choice(_('"'), _('\\'), app('lineTerminator'))), app('sourceCharacter')),
286
+ seq(_('\\'), app('escapeSequence')),
287
+ app('lineContinuation'),
288
+ ),
289
+ singleStringCharacter: choice(
290
+ seq(not(choice(_("'"), _('\\'), app('lineTerminator'))), app('sourceCharacter')),
291
+ seq(_('\\'), app('escapeSequence')),
292
+ app('lineContinuation'),
293
+ ),
294
+ lineContinuation: seq(_('\\'), app('lineTerminatorSequence')),
295
+ escapeSequence: choice(
296
+ app('unicodeEscapeSequence'),
297
+ app('hexEscapeSequence'),
298
+ app('octalEscapeSequence'),
299
+ app('characterEscapeSequence'),
300
+ ),
301
+ characterEscapeSequence: choice(app('singleEscapeCharacter'), app('nonEscapeCharacter')),
302
+ singleEscapeCharacter: choice(
303
+ _("'"),
304
+ _('"'),
305
+ _('\\'),
306
+ _('b'),
307
+ _('f'),
308
+ _('n'),
309
+ _('r'),
310
+ _('t'),
311
+ _('v'),
312
+ ),
313
+ nonEscapeCharacter: seq(
314
+ not(choice(app('escapeCharacter'), app('lineTerminator'))),
315
+ app('sourceCharacter'),
316
+ ),
317
+ escapeCharacter: choice(app('singleEscapeCharacter'), app('decimalDigit'), _('x'), _('u')),
318
+ octalEscapeSequence: choice(
319
+ seq(app('zeroToThree'), app('octalDigit'), app('octalDigit')),
320
+ seq(app('fourToSeven'), app('octalDigit')),
321
+ seq(app('zeroToThree'), app('octalDigit'), not(app('decimalDigit'))),
322
+ seq(app('octalDigit'), not(app('decimalDigit'))),
323
+ ),
324
+ hexEscapeSequence: seq(_('x'), app('hexDigit'), app('hexDigit')),
325
+ unicodeEscapeSequence: seq(
326
+ _('u'),
327
+ app('hexDigit'),
328
+ app('hexDigit'),
329
+ app('hexDigit'),
330
+ app('hexDigit'),
331
+ ),
332
+ zeroToThree: range('0', '3'),
333
+ fourToSeven: range('4', '7'),
334
+ regularExpressionLiteral: seq(
335
+ _('/'),
336
+ app('regularExpressionBody'),
337
+ _('/'),
338
+ app('regularExpressionFlags'),
339
+ ),
340
+ regularExpressionBody: seq(
341
+ app('regularExpressionFirstChar'),
342
+ rep(app('regularExpressionChar')),
343
+ ),
344
+ regularExpressionFirstChar: choice(
345
+ seq(not(choice(_('*'), _('\\'), _('/'), _('['))), app('regularExpressionNonTerminator')),
346
+ app('regularExpressionBackslashSequence'),
347
+ app('regularExpressionClass'),
348
+ ),
349
+ regularExpressionChar: choice(
350
+ seq(not(choice(_('\\'), _('/'), _('['))), app('regularExpressionNonTerminator')),
351
+ app('regularExpressionBackslashSequence'),
352
+ app('regularExpressionClass'),
353
+ ),
354
+ regularExpressionBackslashSequence: seq(_('\\'), app('regularExpressionNonTerminator')),
355
+ regularExpressionNonTerminator: seq(not(app('lineTerminator')), app('sourceCharacter')),
356
+ regularExpressionClass: seq(_('['), rep(app('regularExpressionClassChar')), _(']')),
357
+ regularExpressionClassChar: choice(
358
+ seq(not(choice(_(']'), _('\\'))), app('regularExpressionNonTerminator')),
359
+ app('regularExpressionBackslashSequence'),
360
+ ),
361
+ regularExpressionFlags: rep(app('identifierPart')),
362
+ multiLineCommentNoNL: seq(
363
+ _('/*'),
364
+ rep(seq(not(choice(_('*/'), app('lineTerminator'))), app('sourceCharacter'))),
365
+ _('*/'),
366
+ ),
367
+ spacesNoNL: rep(
368
+ choice(app('whitespace'), app('singleLineComment'), app('multiLineCommentNoNL')),
369
+ ),
370
+ sc: choice(
371
+ seq(rep(app('space')), choice(_(';'), app('end'))),
372
+ seq(
373
+ app('spacesNoNL'),
374
+ choice(
375
+ app('lineTerminator'),
376
+ seq(not(app('multiLineCommentNoNL')), app('multiLineComment')),
377
+ lookahead(_('}')),
378
+ ),
379
+ ),
380
+ ),
381
+ break: seq(_('break'), not(app('identifierPart'))),
382
+ do: seq(_('do'), not(app('identifierPart'))),
383
+ instanceof: seq(_('instanceof'), not(app('identifierPart'))),
384
+ typeof: seq(_('typeof'), not(app('identifierPart'))),
385
+ case: seq(_('case'), not(app('identifierPart'))),
386
+ else: seq(_('else'), not(app('identifierPart'))),
387
+ new: seq(_('new'), not(app('identifierPart'))),
388
+ var: seq(_('var'), not(app('identifierPart'))),
389
+ catch: seq(_('catch'), not(app('identifierPart'))),
390
+ finally: seq(_('finally'), not(app('identifierPart'))),
391
+ return: seq(_('return'), not(app('identifierPart'))),
392
+ void: seq(_('void'), not(app('identifierPart'))),
393
+ continue: seq(_('continue'), not(app('identifierPart'))),
394
+ for: seq(_('for'), not(app('identifierPart'))),
395
+ switch: seq(_('switch'), not(app('identifierPart'))),
396
+ while: seq(_('while'), not(app('identifierPart'))),
397
+ debugger: seq(_('debugger'), not(app('identifierPart'))),
398
+ function: seq(_('function'), not(app('identifierPart'))),
399
+ this: seq(_('this'), not(app('identifierPart'))),
400
+ with: seq(_('with'), not(app('identifierPart'))),
401
+ default: seq(_('default'), not(app('identifierPart'))),
402
+ if: seq(_('if'), not(app('identifierPart'))),
403
+ throw: seq(_('throw'), not(app('identifierPart'))),
404
+ delete: seq(_('delete'), not(app('identifierPart'))),
405
+ in: seq(_('in'), not(app('identifierPart'))),
406
+ try: seq(_('try'), not(app('identifierPart'))),
407
+ get: seq(_('get'), not(app('identifierPart'))),
408
+ set: seq(_('set'), not(app('identifierPart'))),
409
+ class: seq(_('class'), not(app('identifierPart'))),
410
+ enum: seq(_('enum'), not(app('identifierPart'))),
411
+ extends: seq(_('extends'), not(app('identifierPart'))),
412
+ super: seq(_('super'), not(app('identifierPart'))),
413
+ const: seq(_('const'), not(app('identifierPart'))),
414
+ export: seq(_('export'), not(app('identifierPart'))),
415
+ import: seq(_('import'), not(app('identifierPart'))),
416
+ implements: seq(_('implements'), not(app('identifierPart'))),
417
+ let: seq(_('let'), not(app('identifierPart'))),
418
+ private: seq(_('private'), not(app('identifierPart'))),
419
+ public: seq(_('public'), not(app('identifierPart'))),
420
+ interface: seq(_('interface'), not(app('identifierPart'))),
421
+ package: seq(_('package'), not(app('identifierPart'))),
422
+ protected: seq(_('protected'), not(app('identifierPart'))),
423
+ static: seq(_('static'), not(app('identifierPart'))),
424
+ yield: seq(_('yield'), not(app('identifierPart'))),
425
+ primaryExpression: choice(
426
+ seq(app('spaces'), app('this')),
427
+ seq(app('spaces'), app('identifier')),
428
+ seq(app('spaces'), app('literal')),
429
+ app('arrayLiteral'),
430
+ app('objectLiteral'),
431
+ seq(app('spaces'), _('('), app('expression'), app('spaces'), _(')')),
432
+ ),
433
+ arrayLiteral: choice(
434
+ seq(
435
+ app('spaces'),
436
+ _('['),
437
+ app('assignmentExpressionOrElision'),
438
+ rep(seq(app('spaces'), _(','), app('assignmentExpressionOrElision'))),
439
+ app('spaces'),
440
+ _(']'),
441
+ ),
442
+ seq(app('spaces'), _('['), app('spaces'), _(']')),
443
+ ),
444
+ assignmentExpressionOrElision: choice(app('assignmentExpression'), seq()),
445
+ objectLiteral: choice(
446
+ seq(
447
+ app('spaces'),
448
+ _('{'),
449
+ app('propertyAssignment'),
450
+ rep(seq(app('spaces'), _(','), app('propertyAssignment'))),
451
+ app('spaces'),
452
+ _('}'),
453
+ ),
454
+ seq(app('spaces'), _('{'), app('spaces'), _('}')),
455
+ seq(
456
+ app('spaces'),
457
+ _('{'),
458
+ app('propertyAssignment'),
459
+ rep(seq(app('spaces'), _(','), app('propertyAssignment'))),
460
+ app('spaces'),
461
+ _(','),
462
+ app('spaces'),
463
+ _('}'),
464
+ ),
465
+ ),
466
+ propertyAssignment: choice(
467
+ seq(
468
+ app('spaces'),
469
+ app('get'),
470
+ app('propertyName'),
471
+ app('spaces'),
472
+ _('('),
473
+ app('spaces'),
474
+ _(')'),
475
+ app('spaces'),
476
+ _('{'),
477
+ app('functionBody'),
478
+ app('spaces'),
479
+ _('}'),
480
+ ),
481
+ seq(
482
+ app('spaces'),
483
+ app('set'),
484
+ app('propertyName'),
485
+ app('spaces'),
486
+ _('('),
487
+ app('formalParameter'),
488
+ app('spaces'),
489
+ _(')'),
490
+ app('spaces'),
491
+ _('{'),
492
+ app('functionBody'),
493
+ app('spaces'),
494
+ _('}'),
495
+ ),
496
+ seq(app('propertyName'), app('spaces'), _(':'), app('assignmentExpression')),
497
+ ),
498
+ propertyName: choice(
499
+ seq(app('spaces'), app('identifierName')),
500
+ seq(app('spaces'), app('stringLiteral')),
501
+ seq(app('spaces'), app('numericLiteral')),
502
+ ),
503
+ memberExpression: seq(app('memberExpressionHead'), rep(app('memberExpressionTail'))),
504
+ memberExpressionHead: choice(
505
+ seq(app('spaces'), app('new'), app('memberExpression'), app('arguments')),
506
+ app('primaryExpression'),
507
+ app('functionExpression'),
508
+ ),
509
+ memberExpressionTail: choice(
510
+ seq(app('spaces'), _('['), app('expression'), app('spaces'), _(']')),
511
+ seq(app('spaces'), _('.'), app('spaces'), app('identifierName')),
512
+ ),
513
+ newExpression: choice(
514
+ app('memberExpression'),
515
+ seq(app('spaces'), app('new'), app('newExpression')),
516
+ ),
517
+ callExpression: seq(app('memberExpression'), rep(app('callExpressionTail'))),
518
+ callExpressionTail: choice(
519
+ app('arguments'),
520
+ seq(app('spaces'), _('['), app('expression'), app('spaces'), _(']')),
521
+ seq(app('spaces'), _('.'), app('spaces'), app('identifierName')),
522
+ ),
523
+ arguments: choice(
524
+ seq(
525
+ app('spaces'),
526
+ _('('),
527
+ app('assignmentExpression'),
528
+ rep(seq(app('spaces'), _(','), app('assignmentExpression'))),
529
+ app('spaces'),
530
+ _(')'),
531
+ ),
532
+ seq(app('spaces'), _('('), app('spaces'), _(')')),
533
+ ),
534
+ leftHandSideExpression: choice(app('callExpression'), app('newExpression')),
535
+ postfixExpression: choice(
536
+ seq(app('leftHandSideExpression'), lexIgnored(seq(app('spacesNoNL'), _('++')))),
537
+ seq(app('leftHandSideExpression'), lexIgnored(seq(app('spacesNoNL'), _('--')))),
538
+ app('leftHandSideExpression'),
539
+ ),
540
+ unaryExpression: choice(
541
+ seq(app('spaces'), app('delete'), app('unaryExpression')),
542
+ seq(app('spaces'), app('void'), app('unaryExpression')),
543
+ seq(app('spaces'), app('typeof'), app('unaryExpression')),
544
+ seq(app('spaces'), _('++'), app('unaryExpression')),
545
+ seq(app('spaces'), _('--'), app('unaryExpression')),
546
+ seq(app('spaces'), _('+'), app('unaryExpression')),
547
+ seq(app('spaces'), _('-'), app('unaryExpression')),
548
+ seq(app('spaces'), _('~'), app('unaryExpression')),
549
+ seq(app('spaces'), _('!'), app('unaryExpression')),
550
+ app('postfixExpression'),
551
+ ),
552
+ multiplicativeExpression: choice(
553
+ seq(app('unaryExpression'), app('spaces'), _('*'), app('multiplicativeExpression')),
554
+ seq(app('unaryExpression'), app('spaces'), _('/'), app('multiplicativeExpression')),
555
+ seq(app('unaryExpression'), app('spaces'), _('%'), app('multiplicativeExpression')),
556
+ app('unaryExpression'),
557
+ ),
558
+ additiveExpression: choice(
559
+ seq(app('multiplicativeExpression'), app('spaces'), _('+'), app('additiveExpression')),
560
+ seq(app('multiplicativeExpression'), app('spaces'), _('-'), app('additiveExpression')),
561
+ app('multiplicativeExpression'),
562
+ ),
563
+ shiftExpression: choice(
564
+ seq(app('additiveExpression'), app('spaces'), _('<<'), app('shiftExpression')),
565
+ seq(app('additiveExpression'), app('spaces'), _('>>>'), app('shiftExpression')),
566
+ seq(app('additiveExpression'), app('spaces'), _('>>'), app('shiftExpression')),
567
+ app('additiveExpression'),
568
+ ),
569
+ relationalExpression: choice(
570
+ seq(app('shiftExpression'), app('spaces'), _('<'), app('relationalExpression')),
571
+ seq(app('shiftExpression'), app('spaces'), _('>'), app('relationalExpression')),
572
+ seq(app('shiftExpression'), app('spaces'), _('<='), app('relationalExpression')),
573
+ seq(app('shiftExpression'), app('spaces'), _('>='), app('relationalExpression')),
574
+ seq(
575
+ app('shiftExpression'),
576
+ app('spaces'),
577
+ app('instanceof'),
578
+ app('relationalExpression'),
579
+ ),
580
+ seq(app('shiftExpression'), app('spaces'), app('in'), app('relationalExpression')),
581
+ app('shiftExpression'),
582
+ ),
583
+ relationalExpressionNoIn: choice(
584
+ seq(app('shiftExpression'), app('spaces'), _('<'), app('relationalExpressionNoIn')),
585
+ seq(app('shiftExpression'), app('spaces'), _('>'), app('relationalExpressionNoIn')),
586
+ seq(app('shiftExpression'), app('spaces'), _('<='), app('relationalExpressionNoIn')),
587
+ seq(app('shiftExpression'), app('spaces'), _('>='), app('relationalExpressionNoIn')),
588
+ seq(
589
+ app('shiftExpression'),
590
+ app('spaces'),
591
+ app('instanceof'),
592
+ app('relationalExpressionNoIn'),
593
+ ),
594
+ app('shiftExpression'),
595
+ ),
596
+ equalityExpression: choice(
597
+ seq(app('relationalExpression'), app('spaces'), _('=='), app('equalityExpression')),
598
+ seq(app('relationalExpression'), app('spaces'), _('!='), app('equalityExpression')),
599
+ seq(app('relationalExpression'), app('spaces'), _('==='), app('equalityExpression')),
600
+ seq(app('relationalExpression'), app('spaces'), _('!=='), app('equalityExpression')),
601
+ app('relationalExpression'),
602
+ ),
603
+ equalityExpressionNoIn: choice(
604
+ seq(
605
+ app('relationalExpressionNoIn'),
606
+ app('spaces'),
607
+ _('=='),
608
+ app('equalityExpressionNoIn'),
609
+ ),
610
+ seq(
611
+ app('relationalExpressionNoIn'),
612
+ app('spaces'),
613
+ _('!='),
614
+ app('equalityExpressionNoIn'),
615
+ ),
616
+ seq(
617
+ app('relationalExpressionNoIn'),
618
+ app('spaces'),
619
+ _('==='),
620
+ app('equalityExpressionNoIn'),
621
+ ),
622
+ seq(
623
+ app('relationalExpressionNoIn'),
624
+ app('spaces'),
625
+ _('!=='),
626
+ app('equalityExpressionNoIn'),
627
+ ),
628
+ app('relationalExpressionNoIn'),
629
+ ),
630
+ bitwiseANDExpression: choice(
631
+ seq(app('equalityExpression'), app('spaces'), _('&'), app('bitwiseANDExpression')),
632
+ app('equalityExpression'),
633
+ ),
634
+ bitwiseANDExpressionNoIn: choice(
635
+ seq(
636
+ app('equalityExpressionNoIn'),
637
+ app('spaces'),
638
+ _('&'),
639
+ app('bitwiseANDExpressionNoIn'),
640
+ ),
641
+ app('equalityExpressionNoIn'),
642
+ ),
643
+ bitwiseXORExpression: choice(
644
+ seq(app('bitwiseANDExpression'), app('spaces'), _('^'), app('bitwiseXORExpression')),
645
+ app('bitwiseANDExpression'),
646
+ ),
647
+ bitwiseXORExpressionNoIn: choice(
648
+ seq(
649
+ app('bitwiseANDExpressionNoIn'),
650
+ app('spaces'),
651
+ _('^'),
652
+ app('bitwiseXORExpressionNoIn'),
653
+ ),
654
+ app('bitwiseANDExpressionNoIn'),
655
+ ),
656
+ bitwiseORExpression: choice(
657
+ seq(app('bitwiseXORExpression'), app('spaces'), _('|'), app('bitwiseORExpression')),
658
+ app('bitwiseXORExpression'),
659
+ ),
660
+ bitwiseORExpressionNoIn: choice(
661
+ seq(
662
+ app('bitwiseXORExpressionNoIn'),
663
+ app('spaces'),
664
+ _('|'),
665
+ app('bitwiseORExpressionNoIn'),
666
+ ),
667
+ app('bitwiseXORExpressionNoIn'),
668
+ ),
669
+ logicalANDExpression: choice(
670
+ seq(app('bitwiseORExpression'), app('spaces'), _('&&'), app('logicalANDExpression')),
671
+ app('bitwiseORExpression'),
672
+ ),
673
+ logicalANDExpressionNoIn: choice(
674
+ seq(
675
+ app('bitwiseORExpressionNoIn'),
676
+ app('spaces'),
677
+ _('&&'),
678
+ app('logicalANDExpressionNoIn'),
679
+ ),
680
+ app('bitwiseORExpressionNoIn'),
681
+ ),
682
+ logicalORExpression: choice(
683
+ seq(app('logicalANDExpression'), app('spaces'), _('||'), app('logicalORExpression')),
684
+ app('logicalANDExpression'),
685
+ ),
686
+ logicalORExpressionNoIn: choice(
687
+ seq(
688
+ app('logicalANDExpressionNoIn'),
689
+ app('spaces'),
690
+ _('||'),
691
+ app('logicalORExpressionNoIn'),
692
+ ),
693
+ app('logicalANDExpressionNoIn'),
694
+ ),
695
+ conditionalExpression: choice(
696
+ seq(
697
+ app('logicalORExpression'),
698
+ app('spaces'),
699
+ _('?'),
700
+ app('assignmentExpression'),
701
+ app('spaces'),
702
+ _(':'),
703
+ app('assignmentExpression'),
704
+ ),
705
+ app('logicalORExpression'),
706
+ ),
707
+ conditionalExpressionNoIn: choice(
708
+ seq(
709
+ app('logicalORExpressionNoIn'),
710
+ app('spaces'),
711
+ _('?'),
712
+ app('assignmentExpression'),
713
+ app('spaces'),
714
+ _(':'),
715
+ app('assignmentExpressionNoIn'),
716
+ ),
717
+ app('logicalORExpressionNoIn'),
718
+ ),
719
+ assignmentExpression: choice(
720
+ seq(
721
+ app('leftHandSideExpression'),
722
+ app('spaces'),
723
+ app('assignmentOperator'),
724
+ app('assignmentExpression'),
725
+ ),
726
+ app('conditionalExpression'),
727
+ ),
728
+ assignmentExpressionNoIn: choice(
729
+ seq(
730
+ app('leftHandSideExpression'),
731
+ app('spaces'),
732
+ app('assignmentOperator'),
733
+ app('assignmentExpressionNoIn'),
734
+ ),
735
+ app('conditionalExpressionNoIn'),
736
+ ),
737
+ expression: seq(
738
+ app('assignmentExpression'),
739
+ rep(seq(app('spaces'), _(','), app('assignmentExpression'))),
740
+ ),
741
+ expressionNoIn: seq(
742
+ app('assignmentExpressionNoIn'),
743
+ rep(seq(app('spaces'), _(','), app('assignmentExpressionNoIn'))),
744
+ ),
745
+ assignmentOperator: choice(
746
+ _('='),
747
+ _('>>>='),
748
+ _('<<='),
749
+ _('>>='),
750
+ _('*='),
751
+ _('/='),
752
+ _('%='),
753
+ _('+='),
754
+ _('-='),
755
+ _('&='),
756
+ _('^='),
757
+ _('|='),
758
+ ),
759
+ statement: choice(
760
+ app('block'),
761
+ app('variableStatement'),
762
+ app('emptyStatement'),
763
+ app('expressionStatement'),
764
+ app('ifStatement'),
765
+ app('iterationStatement'),
766
+ app('continueStatement'),
767
+ app('breakStatement'),
768
+ app('returnStatement'),
769
+ app('withStatement'),
770
+ app('labelledStatement'),
771
+ app('switchStatement'),
772
+ app('throwStatement'),
773
+ app('tryStatement'),
774
+ app('debuggerStatement'),
775
+ ),
776
+ block: seq(app('spaces'), _('{'), app('statementList'), app('spaces'), _('}')),
777
+ statementList: rep(app('statement')),
778
+ variableStatement: seq(
779
+ app('spaces'),
780
+ app('var'),
781
+ app('variableDeclarationList'),
782
+ lexIgnored(app('sc')),
783
+ ),
784
+ variableDeclarationList: seq(
785
+ app('variableDeclaration'),
786
+ rep(seq(app('spaces'), _(','), app('variableDeclaration'))),
787
+ ),
788
+ variableDeclarationListNoIn: seq(
789
+ app('variableDeclarationNoIn'),
790
+ rep(seq(app('spaces'), _(','), app('variableDeclarationNoIn'))),
791
+ ),
792
+ variableDeclaration: seq(
793
+ app('spaces'),
794
+ app('identifier'),
795
+ choice(app('initialiser'), seq()),
796
+ ),
797
+ variableDeclarationNoIn: seq(
798
+ app('spaces'),
799
+ app('identifier'),
800
+ choice(app('initialiserNoIn'), seq()),
801
+ ),
802
+ initialiser: seq(app('spaces'), _('='), app('assignmentExpression')),
803
+ initialiserNoIn: seq(app('spaces'), _('='), app('assignmentExpressionNoIn')),
804
+ emptyStatement: seq(app('spaces'), _(';')),
805
+ expressionStatement: seq(
806
+ not(seq(app('spaces'), choice(_('{'), app('function')))),
807
+ app('expression'),
808
+ lexIgnored(app('sc')),
809
+ ),
810
+ ifStatement: seq(
811
+ app('spaces'),
812
+ app('if'),
813
+ app('spaces'),
814
+ _('('),
815
+ app('expression'),
816
+ app('spaces'),
817
+ _(')'),
818
+ app('statement'),
819
+ choice(seq(app('spaces'), app('else'), app('statement')), seq()),
820
+ ),
821
+ iterationStatement: choice(
822
+ seq(
823
+ app('spaces'),
824
+ app('do'),
825
+ app('statement'),
826
+ app('spaces'),
827
+ app('while'),
828
+ app('spaces'),
829
+ _('('),
830
+ app('expression'),
831
+ app('spaces'),
832
+ _(')'),
833
+ lexIgnored(app('sc')),
834
+ ),
835
+ seq(
836
+ app('spaces'),
837
+ app('while'),
838
+ app('spaces'),
839
+ _('('),
840
+ app('expression'),
841
+ app('spaces'),
842
+ _(')'),
843
+ app('statement'),
844
+ ),
845
+ seq(
846
+ app('spaces'),
847
+ app('for'),
848
+ app('spaces'),
849
+ _('('),
850
+ choice(app('expressionNoIn'), seq()),
851
+ app('spaces'),
852
+ _(';'),
853
+ choice(app('expression'), seq()),
854
+ app('spaces'),
855
+ _(';'),
856
+ choice(app('expression'), seq()),
857
+ app('spaces'),
858
+ _(')'),
859
+ app('statement'),
860
+ ),
861
+ seq(
862
+ app('spaces'),
863
+ app('for'),
864
+ app('spaces'),
865
+ _('('),
866
+ app('spaces'),
867
+ app('var'),
868
+ app('variableDeclarationListNoIn'),
869
+ app('spaces'),
870
+ _(';'),
871
+ choice(app('expression'), seq()),
872
+ app('spaces'),
873
+ _(';'),
874
+ choice(app('expression'), seq()),
875
+ app('spaces'),
876
+ _(')'),
877
+ app('statement'),
878
+ ),
879
+ seq(
880
+ app('spaces'),
881
+ app('for'),
882
+ app('spaces'),
883
+ _('('),
884
+ app('leftHandSideExpression'),
885
+ app('spaces'),
886
+ app('in'),
887
+ app('expression'),
888
+ app('spaces'),
889
+ _(')'),
890
+ app('statement'),
891
+ ),
892
+ seq(
893
+ app('spaces'),
894
+ app('for'),
895
+ app('spaces'),
896
+ _('('),
897
+ app('spaces'),
898
+ app('var'),
899
+ app('variableDeclarationNoIn'),
900
+ app('spaces'),
901
+ app('in'),
902
+ app('expression'),
903
+ app('spaces'),
904
+ _(')'),
905
+ app('statement'),
906
+ ),
907
+ ),
908
+ continueStatement: seq(
909
+ app('spaces'),
910
+ app('continue'),
911
+ lexIgnored(seq(choice(seq(app('spacesNoNL'), app('identifier')), seq()), app('sc'))),
912
+ ),
913
+ breakStatement: seq(
914
+ app('spaces'),
915
+ app('break'),
916
+ lexIgnored(seq(choice(seq(app('spacesNoNL'), app('identifier')), seq()), app('sc'))),
917
+ ),
918
+ returnStatement: seq(
919
+ app('spaces'),
920
+ app('return'),
921
+ choice(
922
+ seq(lexIgnored(seq(app('spacesNoNL'), not(app('space')))), app('expression')),
923
+ seq(),
924
+ ),
925
+ lexIgnored(app('sc')),
926
+ ),
927
+ withStatement: seq(
928
+ app('spaces'),
929
+ app('with'),
930
+ app('spaces'),
931
+ _('('),
932
+ app('expression'),
933
+ app('spaces'),
934
+ _(')'),
935
+ app('statement'),
936
+ ),
937
+ switchStatement: seq(
938
+ app('spaces'),
939
+ app('switch'),
940
+ app('spaces'),
941
+ _('('),
942
+ app('expression'),
943
+ app('spaces'),
944
+ _(')'),
945
+ app('caseBlock'),
946
+ ),
947
+ caseBlock: choice(
948
+ seq(
949
+ app('spaces'),
950
+ _('{'),
951
+ rep(app('caseClause')),
952
+ app('defaultClause'),
953
+ rep(app('caseClause')),
954
+ app('spaces'),
955
+ _('}'),
956
+ ),
957
+ seq(app('spaces'), _('{'), rep(app('caseClause')), app('spaces'), _('}')),
958
+ ),
959
+ caseClause: seq(
960
+ app('spaces'),
961
+ app('case'),
962
+ app('expression'),
963
+ app('spaces'),
964
+ _(':'),
965
+ rep(app('statement')),
966
+ ),
967
+ defaultClause: seq(
968
+ app('spaces'),
969
+ app('default'),
970
+ app('spaces'),
971
+ _(':'),
972
+ rep(app('statement')),
973
+ ),
974
+ labelledStatement: seq(
975
+ app('spaces'),
976
+ app('identifier'),
977
+ app('spaces'),
978
+ _(':'),
979
+ app('statement'),
980
+ ),
981
+ throwStatement: seq(app('spaces'), app('throw'), app('expression'), lexIgnored(app('sc'))),
982
+ tryStatement: choice(
983
+ seq(app('spaces'), app('try'), app('block'), app('catchBlock'), app('finallyBlock')),
984
+ seq(app('spaces'), app('try'), app('block'), app('finallyBlock')),
985
+ seq(app('spaces'), app('try'), app('block'), app('catchBlock')),
986
+ ),
987
+ catchBlock: seq(
988
+ app('spaces'),
989
+ app('catch'),
990
+ app('spaces'),
991
+ _('('),
992
+ app('formalParameter'),
993
+ app('spaces'),
994
+ _(')'),
995
+ app('block'),
996
+ ),
997
+ finallyBlock: seq(app('spaces'), app('finally'), app('block')),
998
+ debuggerStatement: seq(app('spaces'), lexIgnored(seq(app('debugger'), app('sc')))),
999
+ functionDeclaration: seq(
1000
+ app('spaces'),
1001
+ app('function'),
1002
+ app('spaces'),
1003
+ app('identifier'),
1004
+ app('spaces'),
1005
+ _('('),
1006
+ app('formalParameterList'),
1007
+ app('spaces'),
1008
+ _(')'),
1009
+ app('spaces'),
1010
+ _('{'),
1011
+ app('functionBody'),
1012
+ app('spaces'),
1013
+ _('}'),
1014
+ ),
1015
+ functionExpression: choice(
1016
+ seq(
1017
+ app('spaces'),
1018
+ app('function'),
1019
+ app('spaces'),
1020
+ app('identifier'),
1021
+ app('spaces'),
1022
+ _('('),
1023
+ app('formalParameterList'),
1024
+ app('spaces'),
1025
+ _(')'),
1026
+ app('spaces'),
1027
+ _('{'),
1028
+ app('functionBody'),
1029
+ app('spaces'),
1030
+ _('}'),
1031
+ ),
1032
+ seq(
1033
+ app('spaces'),
1034
+ app('function'),
1035
+ app('spaces'),
1036
+ _('('),
1037
+ app('formalParameterList'),
1038
+ app('spaces'),
1039
+ _(')'),
1040
+ app('spaces'),
1041
+ _('{'),
1042
+ app('functionBody'),
1043
+ app('spaces'),
1044
+ _('}'),
1045
+ ),
1046
+ ),
1047
+ formalParameterList: choice(
1048
+ seq(app('formalParameter'), rep(seq(app('spaces'), _(','), app('formalParameter')))),
1049
+ seq(),
1050
+ ),
1051
+ formalParameter: seq(app('spaces'), app('identifier')),
1052
+ functionBody: seq(lookahead(rep(app('directive'))), rep(app('sourceElement'))),
1053
+ sourceElement: choice(app('functionDeclaration'), app('statement')),
1054
+ directive: seq(app('spaces'), app('stringLiteral'), lexIgnored(app('sc'))),
1055
+ });
1056
+ };
1057
+ export default fac;