@bablr/language-en-regex-vm-pattern 0.7.0 → 0.8.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.
package/lib/grammar.js CHANGED
@@ -1,18 +1,17 @@
1
1
  /* @macrome
2
2
  * @generatedby @bablr/macrome-generator-bablr
3
- * @generatedfrom ./grammar.macro.js#1a8dbfb8a85b2f6d763b0d332440f9d57d5f4c23
3
+ * @generatedfrom ./grammar.macro.js#0f254bf8ccce6de1ebde89020c7430dc4259e311
4
4
  * This file is autogenerated. Please do not edit it directly.
5
5
  * When editing run `npx macrome watch` then change the file this is generated from.
6
6
  */
7
7
  import _applyDecs from "@babel/runtime/helpers/applyDecs2305";
8
- import { interpolateArray as _interpolateArray, interpolateFragmentChildren as _interpolateFragmentChildren, interpolateString as _interpolateString } from "@bablr/agast-helpers/template";
9
- import * as _l from "@bablr/agast-vm-helpers/languages";
10
- import * as _t from "@bablr/agast-helpers/shorthand";
11
8
  let _initProto, _FlagsDecs, _GroupDecs, _AssertionDecs, _StartOfInputAssertionDecs, _EndOfInputAssertionDecs, _WordBoundaryAssertionDecs, _GapDecs, _CharacterDecs, _CharacterClassDecs, _CharacterClassRangeDecs, _CharacterSetDecs, _AnyCharacterSetDecs, _DigitCharacterSetDecs, _SpaceCharacterSetDecs, _WordCharacterSetDecs, _QuantifierDecs, _AnyDecs, _KeywordDecs, _PunctuatorDecs;
9
+ import { re, spam as m } from '@bablr/boot';
12
10
  import { Node, CoveredBy, InjectFrom, UnboundAttributes, AllowEmpty } from '@bablr/helpers/decorators';
13
11
  import objectEntries from 'iter-tools-es/methods/object-entries';
14
12
  import * as Shared from '@bablr/helpers/productions';
15
- import { buildString, buildBoolean, buildNumber, buildNullTag } from '@bablr/agast-vm-helpers';
13
+ import { eat, eatMatch, match, holdForMatch, guard, bindAttribute, fail } from '@bablr/helpers/grammar';
14
+ import { buildString, buildBoolean } from '@bablr/helpers/builders';
16
15
  export const canonicalURL = 'https://bablr.org/languages/core/en/bablr-regex-pattern';
17
16
  export const dependencies = {};
18
17
  const escapables = new Map(objectEntries({
@@ -47,43 +46,9 @@ const flagCharacters = {
47
46
  const unique = flags => flags.length === new Set(flags).size;
48
47
  const getSpecialPattern = span => {
49
48
  if (span === 'Pattern') {
50
- return _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
51
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
52
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
53
- elements: [_t.node(_l.Regex, "CharacterClass", [20, [[_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`]]], {
54
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
55
- elements: [16, [[_t.node(_l.Regex, "Character", [_t.lit("*")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("+")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("{")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("}")], {}, {})], [_t.node(_l.Regex, "Character", [_t.lit("[")], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\]")], {}, {
56
- cooked: "]"
57
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("(")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit(")")], {}, {})], [_t.node(_l.Regex, "Character", [_t.lit(".")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("^")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("$")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("|")], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\n")], {}, {
58
- cooked: "\n"
59
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
60
- cooked: "\\"
61
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("<")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit(">")], {}, {})]]],
62
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
63
- }, {
64
- negate: false
65
- })]
66
- }, {})],
67
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
68
- }, {});
49
+ return re`/[*+{}[\]().^$|\n\\<>]/`;
69
50
  } else if (span === 'CharacterClass') {
70
- return _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
71
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
72
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
73
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
74
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
75
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\]")], {}, {
76
- cooked: "]"
77
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
78
- cooked: "\\"
79
- }))], {}, {})],
80
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
81
- }, {
82
- negate: false
83
- })]
84
- }, {})],
85
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
86
- }, {});
51
+ return re`/[\]\\]/`;
87
52
  } else {
88
53
  throw new Error('unknown span type for special pattern');
89
54
  }
@@ -96,147 +61,15 @@ export const grammar = class RegexGrammar {
96
61
  _initProto(this);
97
62
  }
98
63
  *[(_FlagsDecs = [UnboundAttributes(Object.keys(flagCharacters)), AllowEmpty, Node], _GroupDecs = [CoveredBy('Element'), Node], _AssertionDecs = CoveredBy('Element'), _StartOfInputAssertionDecs = [CoveredBy('Assertion'), Node], _EndOfInputAssertionDecs = [CoveredBy('Assertion'), Node], _WordBoundaryAssertionDecs = [UnboundAttributes(['negate']), CoveredBy('Assertion'), Node], _GapDecs = [CoveredBy('Assertion'), Node], _CharacterDecs = [CoveredBy('Element'), CoveredBy('CharacterClassElement'), Node], _CharacterClassDecs = [UnboundAttributes(['negate']), CoveredBy('Element'), Node], _CharacterClassRangeDecs = [CoveredBy('CharacterClassElement'), Node], _CharacterSetDecs = CoveredBy('Element'), _AnyCharacterSetDecs = [CoveredBy('CharacterSet'), Node], _DigitCharacterSetDecs = [UnboundAttributes(['negate']), CoveredBy('CharacterSet'), Node], _SpaceCharacterSetDecs = [UnboundAttributes(['negate']), CoveredBy('CharacterSet'), Node], _WordCharacterSetDecs = [UnboundAttributes(['negate']), CoveredBy('CharacterSet'), Node], _QuantifierDecs = [UnboundAttributes(['min', 'max']), Node], _AnyDecs = InjectFrom(Shared), _KeywordDecs = [Node, InjectFrom(Shared)], _PunctuatorDecs = [Node, InjectFrom(Shared)], "Pattern")]() {
99
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
100
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
101
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
102
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
103
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
104
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [14, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr()], [_t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
105
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
106
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
107
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
108
- }, {}),
109
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
110
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
111
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
112
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
113
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
114
- }, {}),
115
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
116
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
117
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
118
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
119
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
120
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
121
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
122
- }, {})
123
- }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
124
- key: _t.s_node(_l.Spamex, "Identifier", "balancedSpan"),
125
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
126
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
127
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
128
- content: _t.node(_l.CSTML, "Content", [_t.lit("Pattern")], {}, {}),
129
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
130
- }, {})
131
- }, {})],
132
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
133
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
134
- }, {})
135
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
136
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
137
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
138
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
139
- }, {})],
140
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
141
- }, {})
142
- }, {});
143
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
144
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
145
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
146
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
147
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
148
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
149
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
150
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
151
- type: _t.s_node(_l.Spamex, "Identifier", "Alternatives"),
152
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
153
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
154
- }, {})
155
- }, {})],
156
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
157
- }, {})
158
- }, {});
159
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
160
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
161
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
162
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
163
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
164
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
165
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
166
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
167
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
168
- }, {}),
169
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
170
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
171
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
172
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
173
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
174
- }, {}),
175
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
176
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
177
- }, {})],
178
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
179
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
180
- }, {})
181
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
182
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
183
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
184
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
185
- }, {})],
186
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
187
- }, {})
188
- }, {});
189
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
190
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
191
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
192
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
193
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
194
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
195
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
196
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
197
- type: _t.s_node(_l.Spamex, "Identifier", "Flags"),
198
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
199
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
200
- }, {})
201
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
202
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
203
- content: _t.node(_l.CSTML, "Content", [_t.lit("flags$")], {}, {}),
204
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
205
- }, {})],
206
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
207
- }, {})
208
- }, {});
64
+ yield eat(m`openToken: <*Punctuator '/' { balanced: '/', balancedSpan: 'Pattern' } />`);
65
+ yield eat(m`<Alternatives />`);
66
+ yield eat(m`closeToken: <*Punctuator '/' { balancer: true } />`);
67
+ yield eat(m`flags$: <Flags />`);
209
68
  }
210
69
  *Flags({
211
70
  ctx
212
71
  }) {
213
- const flags = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
214
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
215
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
216
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
217
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
218
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
219
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
220
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
221
- element: _t.node(_l.Regex, "CharacterClass", [10, [[_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`]]], {
222
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
223
- elements: [_t.node(_l.Regex, "Character", [_t.lit("g")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("i")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("m")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("u")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("y")], {}, {})],
224
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
225
- }, {
226
- negate: false
227
- }),
228
- value: _t.s_node(_l.Regex, "Keyword", "+")
229
- }, {
230
- min: 1,
231
- max: Infinity,
232
- greedy: true
233
- })]
234
- }, {})],
235
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
236
- }, {})],
237
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
238
- }, {})
239
- }, {});
72
+ const flags = yield match(re`/[gimsuy]+/`);
240
73
  const flagsStr = ctx.sourceTextFor(flags) || '';
241
74
  if (flagsStr && !unique(flagsStr)) throw new Error('flags must be unique');
242
75
  for (const {
@@ -244,1722 +77,126 @@ export const grammar = class RegexGrammar {
244
77
  1: chr
245
78
  } of Object.entries(flagCharacters)) {
246
79
  if (flagsStr.includes(chr)) {
247
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
248
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
249
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateFragmentChildren(buildString(name), _t.ref`values[]`), _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
250
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
251
- values: [..._interpolateArray(buildString(name)), _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
252
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "true")
253
- }, {})],
254
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
255
- }, {})
256
- }, {});
80
+ yield bindAttribute(name, true);
257
81
  } else {
258
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
259
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
260
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateFragmentChildren(buildString(name), _t.ref`values[]`), _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
261
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
262
- values: [..._interpolateArray(buildString(name)), _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
263
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "false")
264
- }, {})],
265
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
266
- }, {})
267
- }, {});
82
+ yield bindAttribute(name, false);
268
83
  }
269
84
  }
270
85
  for (const flagChr of flagsStr) {
271
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
272
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
273
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
274
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
275
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
276
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
277
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
278
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
279
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
280
- }, {}),
281
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
282
- intrinsicValue: buildString(flagChr),
283
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
284
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
285
- }, {})
286
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
287
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
288
- content: _t.node(_l.CSTML, "Content", [_t.lit("tokens[]")], {}, {}),
289
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
290
- }, {})],
291
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
292
- }, {})
293
- }, {});
86
+ yield eat(m`tokens[]: <*Keyword ${buildString(flagChr)} />`);
294
87
  }
295
88
  }
296
89
  *Alternatives() {
297
90
  do {
298
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
299
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
300
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
301
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
302
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
303
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
304
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
305
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
306
- type: _t.s_node(_l.Spamex, "Identifier", "Alternative"),
307
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
308
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
309
- }, {})
310
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
311
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
312
- content: _t.node(_l.CSTML, "Content", [_t.lit("alternatives[]$")], {}, {}),
313
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
314
- }, {})],
315
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
316
- }, {})
317
- }, {});
318
- } while (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
319
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
320
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
321
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
322
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
323
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
324
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
325
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
326
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
327
- }, {}),
328
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
329
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
330
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
331
- content: _t.node(_l.CSTML, "Content", [_t.lit("|")], {}, {}),
332
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
333
- }, {}),
334
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
335
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
336
- }, {})
337
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
338
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
339
- content: _t.node(_l.CSTML, "Content", [_t.lit("separators[]")], {}, {}),
340
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
341
- }, {})],
342
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
343
- }, {})
344
- }, {}));
91
+ yield eat(m`alternatives[]$: <Alternative />`);
92
+ } while (yield eatMatch(m`separatorTokens[]: <*Punctuator '|' />`));
345
93
  }
346
94
  *Alternative() {
347
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
348
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
349
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
350
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
351
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
352
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
353
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
354
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
355
- type: _t.s_node(_l.Spamex, "Identifier", "Elements"),
356
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
357
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
358
- }, {})
359
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
360
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
361
- content: _t.node(_l.CSTML, "Content", [_t.lit("elements[]$")], {}, {}),
362
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
363
- }, {})],
364
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
365
- }, {})
366
- }, {});
95
+ yield eat(m`elements[]$: <Elements />`);
367
96
  }
368
97
  *Elements() {
369
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
370
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
371
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
372
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
373
- values: [_t.node(_l.Instruction, "Array", [_t.ref`openToken`, _t.ref`closeToken`], {
374
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
375
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
376
- }, {})],
377
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
378
- }, {})
379
- }, {});
380
- while (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
381
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
382
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
383
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
384
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
385
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
386
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
387
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`negateToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`closeToken`], {
388
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
389
- negateToken: _t.s_node(_l.Regex, "Keyword", "^"),
390
- elements: [_t.node(_l.Regex, "Character", [_t.lit("|")], {}, {})],
391
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
392
- }, {
393
- negate: true
394
- })]
395
- }, {})],
396
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
397
- }, {})],
398
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
399
- }, {})
400
- }, {})) {
401
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
402
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
403
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
404
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
405
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
406
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
407
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
408
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
409
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
410
- }, {}),
411
- type: _t.s_node(_l.Spamex, "Identifier", "Element"),
412
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
413
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
414
- }, {})
415
- }, {})],
416
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
417
- }, {})
418
- }, {});
98
+ yield eat(m`.[]: []`);
99
+ while (yield match(re`/[^|]/`)) {
100
+ yield eat(m`.[]+: <Element />`);
419
101
  }
420
102
  }
421
103
  *Element() {
422
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
423
- verb: _t.s_node(_l.Instruction, "Identifier", "guard"),
424
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
425
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
426
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
427
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
428
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
429
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
430
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
431
- }, {}),
432
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
433
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
434
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
435
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
436
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
437
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
438
- elements: [_t.node(_l.Regex, "Character", [_t.lit("*")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("+")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("?")], {}, {})],
439
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
440
- }, {
441
- negate: false
442
- })]
443
- }, {})],
444
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
445
- }, {}),
446
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
447
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
448
- }, {})
449
- }, {})],
450
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
451
- }, {})
452
- }, {});
453
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
454
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
455
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`]]], {
456
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
457
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
458
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
459
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
460
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
461
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
462
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
463
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
464
- }, {})
465
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
466
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
467
- }, {}), _t.node(_l.Instruction, "Array", [17, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`]]], {
468
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
469
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
470
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
471
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
472
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
473
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
474
- }, {}),
475
- type: _t.s_node(_l.Spamex, "Identifier", "CharacterClass"),
476
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
477
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
478
- content: _t.node(_l.CSTML, "Content", [_t.lit("[")], {}, {}),
479
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
480
- }, {}),
481
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
482
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
483
- }, {})
484
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
485
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
486
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
487
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
488
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
489
- }, {}),
490
- type: _t.s_node(_l.Spamex, "Identifier", "Group"),
491
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
492
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
493
- content: _t.node(_l.CSTML, "Content", [_t.lit("(?:")], {}, {}),
494
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
495
- }, {}),
496
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
497
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
498
- }, {})
499
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
500
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
501
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
502
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
503
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
504
- }, {}),
505
- type: _t.s_node(_l.Spamex, "Identifier", "Assertion"),
506
- intrinsicValue: _t.node(_l.Regex, "Pattern", [10, [[_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`]]], {
507
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
508
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
509
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
510
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
511
- elements: [_t.node(_l.Regex, "Character", [_t.lit("$")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("^")], {}, {})],
512
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
513
- }, {
514
- negate: false
515
- })]
516
- }, {}), _t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
517
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
518
- cooked: "\\"
519
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("b")], {}, {})]
520
- }, {})],
521
- separators: [_t.s_node(_l.Regex, "Punctuator", "|")],
522
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
523
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
524
- tokens: [_t.s_node(_l.Regex, "Keyword", "i")]
525
- }, {
526
- global: false,
527
- ignoreCase: true,
528
- multiline: false,
529
- dotAll: false,
530
- unicode: false,
531
- sticky: false
532
- })
533
- }, {}),
534
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
535
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
536
- }, {})
537
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
538
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
539
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
540
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
541
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
542
- }, {}),
543
- type: _t.s_node(_l.Spamex, "Identifier", "Gap"),
544
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
545
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
546
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
547
- cooked: "\\"
548
- })), _t.lit("g")], {}, {}),
549
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
550
- }, {}),
551
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
552
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
553
- }, {})
554
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
555
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
556
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
557
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
558
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
559
- }, {}),
560
- type: _t.s_node(_l.Spamex, "Identifier", "CharacterSet"),
561
- intrinsicValue: _t.node(_l.Regex, "Pattern", [10, [[_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`]]], {
562
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
563
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
564
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\.")], {}, {
565
- cooked: "."
566
- }))], {}, {})]
567
- }, {}), _t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
568
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
569
- cooked: "\\"
570
- }))], {}, {}), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
571
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
572
- elements: [_t.node(_l.Regex, "Character", [_t.lit("d")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("w")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("p")], {}, {})],
573
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
574
- }, {
575
- negate: false
576
- })]
577
- }, {})],
578
- separators: [_t.s_node(_l.Regex, "Punctuator", "|")],
579
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
580
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
581
- tokens: [_t.s_node(_l.Regex, "Keyword", "i")]
582
- }, {
583
- global: false,
584
- ignoreCase: true,
585
- multiline: false,
586
- dotAll: false,
587
- unicode: false,
588
- sticky: false
589
- })
590
- }, {}),
591
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
592
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
593
- }, {})
594
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
595
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
596
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
597
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`, _t.ref`expressionToken`], {
598
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*"),
599
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
600
- }, {}),
601
- type: _t.s_node(_l.Spamex, "Identifier", "Character"),
602
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
603
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
604
- }, {})
605
- }, {})],
606
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
607
- }, {})],
608
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
609
- }, {})
610
- }, {});
611
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
612
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
613
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
614
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
615
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
616
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
617
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
618
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
619
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
620
- elements: [_t.node(_l.Regex, "Character", [_t.lit("*")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("+")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("?")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("{")], {}, {})],
621
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
622
- }, {
623
- negate: false
624
- })]
625
- }, {})],
626
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
627
- }, {})],
628
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
629
- }, {})
630
- }, {})) {
631
- return _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
632
- verb: _t.s_node(_l.Instruction, "Identifier", "holdForMatch"),
633
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
634
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
635
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
636
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
637
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
638
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
639
- type: _t.s_node(_l.Spamex, "Identifier", "Quantifier"),
640
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
641
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
642
- }, {})
643
- }, {})],
644
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
645
- }, {})
646
- }, {});
104
+ yield guard(m`<*Keyword /[*+?]/ />`);
105
+ yield eat(m`<Any />`, [m`<CharacterClass '[' />`, m`<Group '(?:' />`, m`<Assertion /[$^]|\\b/i />`, m`<Gap '\\g' />`, m`<CharacterSet /\.|\\[dswp]/i />`, m`<*Character />`]);
106
+ if (yield match(re`/[*+?{]/`)) {
107
+ return holdForMatch(m`<Quantifier />`);
647
108
  }
648
109
  }
649
110
  *Group() {
650
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
651
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
652
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
653
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
654
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
655
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
656
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
657
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
658
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
659
- }, {}),
660
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
661
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
662
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
663
- content: _t.node(_l.CSTML, "Content", [_t.lit("(?:")], {}, {}),
664
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
665
- }, {}),
666
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
667
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
668
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
669
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
670
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
671
- content: _t.node(_l.CSTML, "Content", [_t.lit(")")], {}, {}),
672
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
673
- }, {})
674
- }, {})],
675
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
676
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
677
- }, {})
678
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
679
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
680
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
681
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
682
- }, {})],
683
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
684
- }, {})
685
- }, {});
686
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
687
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
688
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
689
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
690
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
691
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
692
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
693
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
694
- type: _t.s_node(_l.Spamex, "Identifier", "Alternatives"),
695
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
696
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
697
- }, {})
698
- }, {})],
699
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
700
- }, {})
701
- }, {});
702
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
703
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
704
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
705
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
706
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
707
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
708
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
709
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
710
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
711
- }, {}),
712
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
713
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
714
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
715
- content: _t.node(_l.CSTML, "Content", [_t.lit(")")], {}, {}),
716
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
717
- }, {}),
718
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
719
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
720
- }, {})],
721
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
722
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
723
- }, {})
724
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
725
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
726
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
727
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
728
- }, {})],
729
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
730
- }, {})
731
- }, {});
111
+ yield eat(m`openToken: <*Punctuator '(?:' { balanced: ')' } />`);
112
+ yield eat(m`<Alternatives />`);
113
+ yield eat(m`closeToken: <*Punctuator ')' { balancer: true } />`);
732
114
  }
733
115
  *CapturingGroup() {
734
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
735
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
736
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
737
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
738
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
739
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
740
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
741
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
742
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
743
- }, {}),
744
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
745
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
746
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
747
- content: _t.node(_l.CSTML, "Content", [_t.lit("(")], {}, {}),
748
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
749
- }, {}),
750
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
751
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
752
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
753
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
754
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
755
- content: _t.node(_l.CSTML, "Content", [_t.lit(")")], {}, {}),
756
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
757
- }, {})
758
- }, {})],
759
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
760
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
761
- }, {})
762
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
763
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
764
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
765
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
766
- }, {})],
767
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
768
- }, {})
769
- }, {});
770
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
771
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
772
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
773
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
774
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
775
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
776
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
777
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
778
- type: _t.s_node(_l.Spamex, "Identifier", "Alternatives"),
779
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
780
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
781
- }, {})
782
- }, {})],
783
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
784
- }, {})
785
- }, {});
786
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
787
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
788
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
789
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
790
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
791
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
792
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
793
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
794
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
795
- }, {}),
796
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
797
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
798
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
799
- content: _t.node(_l.CSTML, "Content", [_t.lit(")")], {}, {}),
800
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
801
- }, {}),
802
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
803
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
804
- }, {})],
805
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
806
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
807
- }, {})
808
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
809
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
810
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
811
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
812
- }, {})],
813
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
814
- }, {})
815
- }, {});
116
+ yield eat(m`openToken: <*Punctuator '(' { balanced: ')' } />`);
117
+ yield eat(m`<Alternatives />`);
118
+ yield eat(m`closeToken: <*Punctuator ')' { balancer: true } />`);
816
119
  }
817
120
  *Assertion() {
818
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
819
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
820
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`]]], {
821
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
822
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
823
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
824
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
825
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
826
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
827
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
828
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
829
- }, {})
830
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
831
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
832
- }, {}), _t.node(_l.Instruction, "Array", [11, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`]]], {
833
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
834
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
835
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
836
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
837
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
838
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
839
- }, {}),
840
- type: _t.s_node(_l.Spamex, "Identifier", "StartOfInputAssertion"),
841
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
842
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
843
- content: _t.node(_l.CSTML, "Content", [_t.lit("^")], {}, {}),
844
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
845
- }, {}),
846
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
847
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
848
- }, {})
849
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
850
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
851
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
852
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
853
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
854
- }, {}),
855
- type: _t.s_node(_l.Spamex, "Identifier", "EndOfInputAssertion"),
856
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
857
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
858
- content: _t.node(_l.CSTML, "Content", [_t.lit("$")], {}, {}),
859
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
860
- }, {}),
861
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
862
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
863
- }, {})
864
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
865
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
866
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
867
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`, _t.ref`escapeToken`], {
868
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*"),
869
- escapeToken: _t.s_node(_l.CSTML, "Punctuator", "@")
870
- }, {}),
871
- type: _t.s_node(_l.Spamex, "Identifier", "WordBoundaryAssertion"),
872
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`], {
873
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
874
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
875
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
876
- cooked: "\\"
877
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("b")], {}, {})]
878
- }, {})],
879
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
880
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
881
- tokens: [_t.s_node(_l.Regex, "Keyword", "i")]
882
- }, {
883
- global: false,
884
- ignoreCase: true,
885
- multiline: false,
886
- dotAll: false,
887
- unicode: false,
888
- sticky: false
889
- })
890
- }, {}),
891
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
892
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
893
- }, {})
894
- }, {})],
895
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
896
- }, {})],
897
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
898
- }, {})
899
- }, {});
121
+ yield eat(m`<Any />`, [m`<*StartOfInputAssertion '^' />`, m`<*EndOfInputAssertion '$' />`, m`<*WordBoundaryAssertion /\\b/i />`]);
900
122
  }
901
123
  *StartOfInputAssertion() {
902
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
903
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
904
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
905
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
906
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
907
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
908
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
909
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
910
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
911
- }, {}),
912
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
913
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
914
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
915
- content: _t.node(_l.CSTML, "Content", [_t.lit("^")], {}, {}),
916
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
917
- }, {}),
918
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
919
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
920
- }, {})
921
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
922
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
923
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
924
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
925
- }, {})],
926
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
927
- }, {})
928
- }, {});
124
+ yield eat(m`sigilToken: <*Keyword '^' />`);
929
125
  }
930
126
  *EndOfInputAssertion() {
931
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
932
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
933
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
934
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
935
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
936
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
937
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
938
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
939
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
940
- }, {}),
941
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
942
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
943
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
944
- content: _t.node(_l.CSTML, "Content", [_t.lit("$")], {}, {}),
945
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
946
- }, {}),
947
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
948
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
949
- }, {})
950
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
951
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
952
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
953
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
954
- }, {})],
955
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
956
- }, {})
957
- }, {});
127
+ yield eatMatch(m`sigilToken: <*Keyword '$' />`);
958
128
  }
959
129
  *WordBoundaryAssertion({
960
130
  ctx
961
131
  }) {
962
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
963
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
964
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
965
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
966
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
967
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
968
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
969
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
970
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
971
- }, {}),
972
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
973
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
974
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
975
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
976
- cooked: "\\"
977
- }))], {}, {}),
978
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
979
- }, {}),
980
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
981
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
982
- }, {})
983
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
984
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
985
- content: _t.node(_l.CSTML, "Content", [_t.lit("escapeToken")], {}, {}),
986
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
987
- }, {})],
988
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
989
- }, {})
990
- }, {});
991
- const m = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
992
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
993
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
994
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
995
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
996
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
997
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
998
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
999
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1000
- }, {}),
1001
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1002
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`], {
1003
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1004
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1005
- elements: [_t.node(_l.Regex, "Character", [_t.lit("b")], {}, {})]
1006
- }, {})],
1007
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1008
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
1009
- tokens: [_t.s_node(_l.Regex, "Keyword", "i")]
1010
- }, {
1011
- global: false,
1012
- ignoreCase: true,
1013
- multiline: false,
1014
- dotAll: false,
1015
- unicode: false,
1016
- sticky: false
1017
- })
1018
- }, {}),
1019
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1020
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1021
- }, {})
1022
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1023
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1024
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1025
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1026
- }, {})],
1027
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1028
- }, {})
1029
- }, {});
1030
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1031
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
1032
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(buildBoolean(ctx.sourceTextFor(m) === 'B'), _t.ref`values[]`), _t.ref`closeToken`], {
1033
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1034
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1035
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1036
- content: _t.node(_l.CSTML, "Content", [_t.lit("negate")], {}, {}),
1037
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1038
- }, {}), ..._interpolateArray(buildBoolean(ctx.sourceTextFor(m) === 'B'))],
1039
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1040
- }, {})
1041
- }, {});
132
+ yield eatMatch(m`escapeToken: <*Punctuator '\\' />`);
133
+ const m_ = yield eat(m`value: <*Keyword /b/i />`);
134
+ yield bindAttribute('negate', buildBoolean(ctx.sourceTextFor(m_) === 'B'));
1042
135
  }
1043
136
  *Gap() {
1044
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1045
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1046
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1047
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1048
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1049
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1050
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1051
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1052
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1053
- }, {}),
1054
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1055
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1056
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1057
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1058
- cooked: "\\"
1059
- }))], {}, {}),
1060
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1061
- }, {}),
1062
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1063
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1064
- }, {})
1065
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1066
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1067
- content: _t.node(_l.CSTML, "Content", [_t.lit("escapeToken")], {}, {}),
1068
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1069
- }, {})],
1070
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1071
- }, {})
1072
- }, {});
1073
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1074
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1075
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1076
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1077
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1078
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1079
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1080
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1081
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1082
- }, {}),
1083
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1084
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1085
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1086
- content: _t.node(_l.CSTML, "Content", [_t.lit("g")], {}, {}),
1087
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1088
- }, {}),
1089
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1090
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1091
- }, {})
1092
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1093
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1094
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1095
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1096
- }, {})],
1097
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1098
- }, {})
1099
- }, {});
137
+ yield eatMatch(m`escapeToken: <*Punctuator '\\' />`);
138
+ yield eat(m`value: <*Keyword 'g' />`);
1100
139
  }
1101
140
  *Character() {
1102
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1103
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
1104
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1105
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1106
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1107
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1108
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1109
- cooked: "\\"
1110
- }))], {}, {}),
1111
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1112
- }, {})],
1113
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1114
- }, {})
1115
- }, {})) {
1116
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1117
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1118
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1119
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1120
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1121
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1122
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1123
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`escapeToken`], {
1124
- escapeToken: _t.s_node(_l.CSTML, "Punctuator", "@")
1125
- }, {}),
1126
- type: _t.s_node(_l.Spamex, "Identifier", "EscapeSequence"),
1127
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1128
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1129
- }, {})
1130
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1131
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
1132
- }, {})],
1133
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1134
- }, {})
1135
- }, {});
141
+ if (yield match('\\')) {
142
+ yield eat(m`@: <EscapeSequence />`);
1136
143
  } else {
1137
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1138
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1139
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1140
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1141
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1142
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1143
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1144
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`negateToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1145
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1146
- negateToken: _t.s_node(_l.Regex, "Keyword", "^"),
1147
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\r")], {}, {
1148
- cooked: "\r"
1149
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\n")], {}, {
1150
- cooked: "\n"
1151
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\t")], {}, {
1152
- cooked: "\t"
1153
- }))], {}, {})],
1154
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1155
- }, {
1156
- negate: true
1157
- })]
1158
- }, {})],
1159
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1160
- }, {})],
1161
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1162
- }, {})
1163
- }, {});
144
+ yield eat(re`/[^\r\n\t]/`);
1164
145
  }
1165
146
  }
1166
147
  *CharacterClass() {
1167
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1168
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1169
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1170
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1171
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1172
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [14, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr()], [_t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
1173
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1174
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1175
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1176
- }, {}),
1177
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1178
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1179
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1180
- content: _t.node(_l.CSTML, "Content", [_t.lit("[")], {}, {}),
1181
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1182
- }, {}),
1183
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
1184
- key: _t.s_node(_l.Spamex, "Identifier", "balancedSpan"),
1185
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
1186
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1187
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1188
- content: _t.node(_l.CSTML, "Content", [_t.lit("CharacterClass")], {}, {}),
1189
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1190
- }, {})
1191
- }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
1192
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
1193
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
1194
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1195
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1196
- content: _t.node(_l.CSTML, "Content", [_t.lit("]")], {}, {}),
1197
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1198
- }, {})
1199
- }, {})],
1200
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1201
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1202
- }, {})
1203
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1204
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1205
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
1206
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1207
- }, {})],
1208
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1209
- }, {})
1210
- }, {});
1211
- let neg = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1212
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1213
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1214
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1215
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1216
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1217
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1218
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1219
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1220
- }, {}),
1221
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1222
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1223
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1224
- content: _t.node(_l.CSTML, "Content", [_t.lit("^")], {}, {}),
1225
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1226
- }, {}),
1227
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1228
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1229
- }, {})
1230
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1231
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1232
- content: _t.node(_l.CSTML, "Content", [_t.lit("negateToken")], {}, {}),
1233
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1234
- }, {})],
1235
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1236
- }, {})
1237
- }, {});
1238
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1239
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
1240
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(buildBoolean(neg), _t.ref`values[]`), _t.ref`closeToken`], {
1241
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1242
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1243
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1244
- content: _t.node(_l.CSTML, "Content", [_t.lit("negate")], {}, {}),
1245
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1246
- }, {}), ..._interpolateArray(buildBoolean(neg))],
1247
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1248
- }, {})
1249
- }, {});
1250
- while (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1251
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
1252
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1253
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1254
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`], {
1255
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1256
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1257
- elements: [_t.node(_l.Regex, "AnyCharacterSet", [_t.ref`sigilToken`], {
1258
- sigilToken: _t.s_node(_l.Regex, "Keyword", ".")
1259
- }, {})]
1260
- }, {})],
1261
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1262
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
1263
- tokens: [_t.s_node(_l.Regex, "Keyword", "s")]
1264
- }, {
1265
- global: false,
1266
- ignoreCase: false,
1267
- multiline: false,
1268
- dotAll: true,
1269
- unicode: false,
1270
- sticky: false
1271
- })
1272
- }, {})],
1273
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1274
- }, {})
1275
- }, {})) {
1276
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1277
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1278
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1279
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1280
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1281
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1282
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1283
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1284
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1285
- }, {}),
1286
- type: _t.s_node(_l.Spamex, "Identifier", "CharacterClassElement"),
1287
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1288
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1289
- }, {})
1290
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1291
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1292
- content: _t.node(_l.CSTML, "Content", [_t.lit("elements[]$")], {}, {}),
1293
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1294
- }, {})],
1295
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1296
- }, {})
1297
- }, {});
148
+ yield eat(m`openToken: <*Punctuator '[' { balancedSpan: 'CharacterClass', balanced: ']' } />`);
149
+ let negate = yield eatMatch(m`negateToken: <*Keyword '^' />`);
150
+ yield bindAttribute('negate', !!negate);
151
+ while (yield match(re`/./s`)) {
152
+ yield eat(m`elements[]+$: <CharacterClassElement />`);
1298
153
  }
1299
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1300
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1301
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1302
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1303
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1304
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
1305
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1306
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1307
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1308
- }, {}),
1309
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1310
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1311
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1312
- content: _t.node(_l.CSTML, "Content", [_t.lit("]")], {}, {}),
1313
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1314
- }, {}),
1315
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
1316
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
1317
- }, {})],
1318
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1319
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1320
- }, {})
1321
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1322
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1323
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
1324
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1325
- }, {})],
1326
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1327
- }, {})
1328
- }, {});
154
+ yield eat(m`closeToken: <*Punctuator ']' { balancer: true } />`);
1329
155
  }
1330
156
  *CharacterClassElement() {
1331
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1332
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1333
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`]]], {
1334
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1335
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1336
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1337
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1338
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1339
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
1340
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1341
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1342
- }, {})
1343
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1344
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
1345
- }, {}), _t.node(_l.Instruction, "Array", [11, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`]]], {
1346
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
1347
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1348
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1349
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1350
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1351
- type: _t.s_node(_l.Spamex, "Identifier", "CharacterSet"),
1352
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`, _t.ref`flags`], {
1353
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1354
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
1355
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
1356
- cooked: "\\"
1357
- }))], {}, {}), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1358
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1359
- elements: [_t.node(_l.Regex, "Character", [_t.lit("d")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("w")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("p")], {}, {})],
1360
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1361
- }, {
1362
- negate: false
1363
- })]
1364
- }, {})],
1365
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1366
- flags: _t.node(_l.Regex, "Flags", [_t.ref`tokens[]`, _t.arr(), _t.ref`tokens[]`], {
1367
- tokens: [_t.s_node(_l.Regex, "Keyword", "i")]
1368
- }, {
1369
- global: false,
1370
- ignoreCase: true,
1371
- multiline: false,
1372
- dotAll: false,
1373
- unicode: false,
1374
- sticky: false
1375
- })
1376
- }, {}),
1377
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1378
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1379
- }, {})
1380
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1381
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1382
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1383
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1384
- type: _t.s_node(_l.Spamex, "Identifier", "Gap"),
1385
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1386
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1387
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1388
- cooked: "\\"
1389
- })), _t.lit("g")], {}, {}),
1390
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1391
- }, {}),
1392
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1393
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1394
- }, {})
1395
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1396
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1397
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1398
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`, _t.ref`expressionToken`], {
1399
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*"),
1400
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1401
- }, {}),
1402
- type: _t.s_node(_l.Spamex, "Identifier", "Character"),
1403
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1404
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1405
- }, {})
1406
- }, {})],
1407
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
1408
- }, {})],
1409
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1410
- }, {})
1411
- }, {});
1412
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1413
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
1414
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1415
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1416
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1417
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1418
- content: _t.node(_l.CSTML, "Content", [_t.lit("-")], {}, {}),
1419
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1420
- }, {})],
1421
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1422
- }, {})
1423
- }, {})) {
1424
- return _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1425
- verb: _t.s_node(_l.Instruction, "Identifier", "holdForMatch"),
1426
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1427
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1428
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1429
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1430
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1431
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1432
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1433
- }, {}),
1434
- type: _t.s_node(_l.Spamex, "Identifier", "CharacterClassRange"),
1435
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1436
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1437
- }, {})
1438
- }, {})],
1439
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1440
- }, {})
1441
- }, {});
157
+ yield eat(m`<Any />`, [m`<CharacterSet /\\[dswp]/i />`, m`<Gap '\\g' />`, m`<*Character />`]);
158
+ if (yield match('-')) {
159
+ return holdForMatch(m`<CharacterClassRange />`);
1442
160
  }
1443
161
  }
1444
162
  *CharacterClassRange() {
1445
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1446
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1447
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1448
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1449
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1450
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1451
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1452
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`, _t.ref`expressionToken`], {
1453
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*"),
1454
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1455
- }, {}),
1456
- type: _t.s_node(_l.Spamex, "Identifier", "Character"),
1457
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1458
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1459
- }, {})
1460
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1461
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1462
- content: _t.node(_l.CSTML, "Content", [_t.lit("min$")], {}, {}),
1463
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1464
- }, {})],
1465
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1466
- }, {})
1467
- }, {});
1468
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1469
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1470
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1471
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1472
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1473
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1474
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1475
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1476
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1477
- }, {}),
1478
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1479
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1480
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1481
- content: _t.node(_l.CSTML, "Content", [_t.lit("-")], {}, {}),
1482
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1483
- }, {}),
1484
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1485
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1486
- }, {})
1487
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1488
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1489
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
1490
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1491
- }, {})],
1492
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1493
- }, {})
1494
- }, {});
1495
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1496
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1497
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1498
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1499
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1500
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1501
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1502
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`, _t.ref`expressionToken`], {
1503
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*"),
1504
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1505
- }, {}),
1506
- type: _t.s_node(_l.Spamex, "Identifier", "Character"),
1507
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1508
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1509
- }, {})
1510
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1511
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1512
- content: _t.node(_l.CSTML, "Content", [_t.lit("max$")], {}, {}),
1513
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1514
- }, {})],
1515
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1516
- }, {})
1517
- }, {});
163
+ yield eat(m`min+$: <*Character />`);
164
+ yield eat(m`sigilToken: <*Punctuator '-' />`);
165
+ yield eat(m`max+$: <*Character />`);
1518
166
  }
1519
167
  *CharacterSet() {
1520
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1521
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1522
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`]]], {
1523
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1524
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1525
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1526
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1527
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1528
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
1529
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1530
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1531
- }, {})
1532
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1533
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
1534
- }, {}), _t.node(_l.Instruction, "Array", [13, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`]]], {
1535
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
1536
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1537
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1538
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1539
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1540
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1541
- }, {}),
1542
- type: _t.s_node(_l.Spamex, "Identifier", "AnyCharacterSet"),
1543
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1544
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1545
- content: _t.node(_l.CSTML, "Content", [_t.lit(".")], {}, {}),
1546
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1547
- }, {}),
1548
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1549
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1550
- }, {})
1551
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1552
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1553
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1554
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1555
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1556
- }, {}),
1557
- type: _t.s_node(_l.Spamex, "Identifier", "DigitCharacterSet"),
1558
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1559
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1560
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
1561
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
1562
- cooked: "\\"
1563
- }))], {}, {}), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1564
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1565
- elements: [_t.node(_l.Regex, "Character", [_t.lit("d")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("D")], {}, {})],
1566
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1567
- }, {
1568
- negate: false
1569
- })]
1570
- }, {})],
1571
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1572
- }, {}),
1573
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1574
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1575
- }, {})
1576
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1577
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1578
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1579
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1580
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1581
- }, {}),
1582
- type: _t.s_node(_l.Spamex, "Identifier", "SpaceCharacterSet"),
1583
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1584
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1585
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
1586
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
1587
- cooked: "\\"
1588
- }))], {}, {}), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1589
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1590
- elements: [_t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("S")], {}, {})],
1591
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1592
- }, {
1593
- negate: false
1594
- })]
1595
- }, {})],
1596
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1597
- }, {}),
1598
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1599
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1600
- }, {})
1601
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1602
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1603
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1604
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1605
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1606
- }, {}),
1607
- type: _t.s_node(_l.Spamex, "Identifier", "WordCharacterSet"),
1608
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1609
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1610
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
1611
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
1612
- cooked: "\\"
1613
- }))], {}, {}), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1614
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1615
- elements: [_t.node(_l.Regex, "Character", [_t.lit("w")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("W")], {}, {})],
1616
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1617
- }, {
1618
- negate: false
1619
- })]
1620
- }, {})],
1621
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1622
- }, {}),
1623
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1624
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1625
- }, {})
1626
- }, {})],
1627
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
1628
- }, {})],
1629
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1630
- }, {})
1631
- }, {});
168
+ yield eat(m`<Any />`, [m`<AnyCharacterSet '.' />`, m`<DigitCharacterSet /\\[dD]/ />`, m`<SpaceCharacterSet /\\[sS]/ />`, m`<WordCharacterSet /\\[wW]/ />`]);
1632
169
  }
1633
170
  *AnyCharacterSet() {
1634
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1635
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1636
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1637
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1638
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1639
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1640
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1641
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1642
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1643
- }, {}),
1644
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1645
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1646
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1647
- content: _t.node(_l.CSTML, "Content", [_t.lit(".")], {}, {}),
1648
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1649
- }, {}),
1650
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1651
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1652
- }, {})
1653
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1654
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1655
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
1656
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1657
- }, {})],
1658
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1659
- }, {})
1660
- }, {});
171
+ yield eat(m`sigilToken: <*Keyword '.' />`);
1661
172
  }
1662
173
  *DigitCharacterSet({
1663
174
  ctx
1664
175
  }) {
1665
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1666
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1667
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1668
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1669
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1670
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1671
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1672
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1673
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1674
- }, {}),
1675
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1676
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1677
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1678
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1679
- cooked: "\\"
1680
- }))], {}, {}),
1681
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1682
- }, {}),
1683
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1684
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1685
- }, {})
1686
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1687
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1688
- content: _t.node(_l.CSTML, "Content", [_t.lit("escapeToken")], {}, {}),
1689
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1690
- }, {})],
1691
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1692
- }, {})
1693
- }, {});
1694
- let code = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1695
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1696
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1697
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1698
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1699
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1700
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1701
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1702
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1703
- }, {}),
1704
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1705
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1706
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1707
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1708
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1709
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1710
- elements: [_t.node(_l.Regex, "Character", [_t.lit("d")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("D")], {}, {})],
1711
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1712
- }, {
1713
- negate: false
1714
- })]
1715
- }, {})],
1716
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1717
- }, {}),
1718
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1719
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1720
- }, {})
1721
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1722
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1723
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1724
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1725
- }, {})],
1726
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1727
- }, {})
1728
- }, {});
1729
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1730
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
1731
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(buildBoolean(ctx.sourceTextFor(code) === 'D'), _t.ref`values[]`), _t.ref`closeToken`], {
1732
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1733
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1734
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1735
- content: _t.node(_l.CSTML, "Content", [_t.lit("negate")], {}, {}),
1736
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1737
- }, {}), ..._interpolateArray(buildBoolean(ctx.sourceTextFor(code) === 'D'))],
1738
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1739
- }, {})
1740
- }, {});
176
+ yield eat(m`escapeToken: <*Punctuator '\\' />`);
177
+ let code = yield eat(m`value: <*Keyword /[dD]/ />`);
178
+ yield bindAttribute('negate', buildBoolean(ctx.sourceTextFor(code) === 'D'));
1741
179
  }
1742
180
  *SpaceCharacterSet({
1743
181
  ctx
1744
182
  }) {
1745
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1746
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1747
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1748
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1749
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1750
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1751
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1752
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1753
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1754
- }, {}),
1755
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1756
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1757
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1758
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1759
- cooked: "\\"
1760
- }))], {}, {}),
1761
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1762
- }, {}),
1763
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1764
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1765
- }, {})
1766
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1767
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1768
- content: _t.node(_l.CSTML, "Content", [_t.lit("escapeToken")], {}, {}),
1769
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1770
- }, {})],
1771
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1772
- }, {})
1773
- }, {});
1774
- let code = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1775
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1776
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1777
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1778
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1779
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1780
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1781
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1782
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1783
- }, {}),
1784
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1785
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1786
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1787
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1788
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1789
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1790
- elements: [_t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("S")], {}, {})],
1791
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1792
- }, {
1793
- negate: false
1794
- })]
1795
- }, {})],
1796
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1797
- }, {}),
1798
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1799
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1800
- }, {})
1801
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1802
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1803
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1804
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1805
- }, {})],
1806
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1807
- }, {})
1808
- }, {});
1809
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1810
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
1811
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(buildBoolean(ctx.sourceTextFor(code) === 'S'), _t.ref`values[]`), _t.ref`closeToken`], {
1812
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1813
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1814
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1815
- content: _t.node(_l.CSTML, "Content", [_t.lit("negate")], {}, {}),
1816
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1817
- }, {}), ..._interpolateArray(buildBoolean(ctx.sourceTextFor(code) === 'S'))],
1818
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1819
- }, {})
1820
- }, {});
183
+ yield eat(m`escapeToken: <*Punctuator '\\' />`);
184
+ let code = yield eat(m`value: <*Keyword /[sS]/ />`);
185
+ yield bindAttribute('negate', buildBoolean(ctx.sourceTextFor(code) === 'S'));
1821
186
  }
1822
187
  *WordCharacterSet({
1823
188
  ctx
1824
189
  }) {
1825
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1826
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1827
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1828
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1829
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1830
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1831
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1832
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1833
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1834
- }, {}),
1835
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1836
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1837
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1838
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
1839
- cooked: "\\"
1840
- }))], {}, {}),
1841
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1842
- }, {}),
1843
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1844
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1845
- }, {})
1846
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1847
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1848
- content: _t.node(_l.CSTML, "Content", [_t.lit("escapeToken")], {}, {}),
1849
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1850
- }, {})],
1851
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1852
- }, {})
1853
- }, {});
1854
- let code = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1855
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1856
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1857
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1858
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1859
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1860
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1861
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1862
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1863
- }, {}),
1864
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1865
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1866
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1867
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1868
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1869
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1870
- elements: [_t.node(_l.Regex, "Character", [_t.lit("w")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("W")], {}, {})],
1871
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1872
- }, {
1873
- negate: false
1874
- })]
1875
- }, {})],
1876
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1877
- }, {}),
1878
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1879
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1880
- }, {})
1881
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1882
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1883
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1884
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1885
- }, {})],
1886
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1887
- }, {})
1888
- }, {});
1889
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1890
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
1891
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(buildBoolean(ctx.sourceTextFor(code) === 'W'), _t.ref`values[]`), _t.ref`closeToken`], {
1892
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1893
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1894
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1895
- content: _t.node(_l.CSTML, "Content", [_t.lit("negate")], {}, {}),
1896
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1897
- }, {}), ..._interpolateArray(buildBoolean(ctx.sourceTextFor(code) === 'W'))],
1898
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1899
- }, {})
1900
- }, {});
190
+ yield eat(m`escapeToken: <*Punctuator '\\' />`);
191
+ let code = yield eat(m`value: <*Keyword /[wW]/ />`);
192
+ yield bindAttribute('negate', ctx.sourceTextFor(code) === 'W');
1901
193
  }
1902
194
  *Quantifier({
1903
195
  ctx
1904
196
  }) {
1905
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1906
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1907
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1908
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1909
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1910
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1911
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1912
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`expressionToken`], {
1913
- expressionToken: _t.s_node(_l.CSTML, "Punctuator", "+")
1914
- }, {}),
1915
- type: _t.s_node(_l.Spamex, "Identifier", "Element"),
1916
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1917
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1918
- }, {})
1919
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1920
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1921
- content: _t.node(_l.CSTML, "Content", [_t.lit("element$")], {}, {}),
1922
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1923
- }, {})],
1924
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1925
- }, {})
1926
- }, {});
197
+ yield eat(m`element+$: <Element />`);
1927
198
  let attrs, sigil;
1928
- if (sigil = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1929
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1930
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1931
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1932
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1933
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1934
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1935
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1936
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1937
- }, {}),
1938
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1939
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1940
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1941
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1942
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1943
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1944
- elements: [_t.node(_l.Regex, "Character", [_t.lit("*")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("+")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("?")], {}, {})],
1945
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1946
- }, {
1947
- negate: false
1948
- })]
1949
- }, {})],
1950
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1951
- }, {}),
1952
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1953
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1954
- }, {})
1955
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1956
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1957
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
1958
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1959
- }, {})],
1960
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1961
- }, {})
1962
- }, {})) {
199
+ if (sigil = yield eatMatch(m`sigilToken: <*Keyword /[*+?]/ />`)) {
1963
200
  switch (ctx.sourceTextFor(sigil)) {
1964
201
  case '*':
1965
202
  attrs = {
@@ -1980,114 +217,11 @@ export const grammar = class RegexGrammar {
1980
217
  };
1981
218
  break;
1982
219
  }
1983
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1984
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1985
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
1986
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1987
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1988
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
1989
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1990
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1991
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1992
- }, {}),
1993
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1994
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1995
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1996
- content: _t.node(_l.CSTML, "Content", [_t.lit("{")], {}, {}),
1997
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1998
- }, {}),
1999
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
2000
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
2001
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
2002
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2003
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2004
- content: _t.node(_l.CSTML, "Content", [_t.lit("}")], {}, {}),
2005
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2006
- }, {})
2007
- }, {})],
2008
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2009
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2010
- }, {})
2011
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2012
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2013
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
2014
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2015
- }, {})],
2016
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2017
- }, {})
2018
- }, {})) {
220
+ } else if (yield eat(m`openToken: <*Punctuator '{' { balanced: '}' } />`)) {
2019
221
  let max;
2020
- let min = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2021
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2022
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2023
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2024
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2025
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2026
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2027
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2028
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2029
- }, {}),
2030
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
2031
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2032
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2033
- }, {})
2034
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2035
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2036
- content: _t.node(_l.CSTML, "Content", [_t.lit("min$")], {}, {}),
2037
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2038
- }, {})],
2039
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2040
- }, {})
2041
- }, {});
2042
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2043
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2044
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2045
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2046
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2047
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2048
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2049
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2050
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2051
- }, {}),
2052
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
2053
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2054
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2055
- content: _t.node(_l.CSTML, "Content", [_t.lit(",")], {}, {}),
2056
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2057
- }, {}),
2058
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2059
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2060
- }, {})
2061
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2062
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2063
- content: _t.node(_l.CSTML, "Content", [_t.lit("separator")], {}, {}),
2064
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2065
- }, {})],
2066
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2067
- }, {})
2068
- }, {})) {
2069
- max = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2070
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2071
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2072
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2073
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2074
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2075
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2076
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2077
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2078
- }, {}),
2079
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
2080
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2081
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2082
- }, {})
2083
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2084
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2085
- content: _t.node(_l.CSTML, "Content", [_t.lit("max$")], {}, {}),
2086
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2087
- }, {})],
2088
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2089
- }, {})
2090
- }, {});
222
+ let min = yield eat(m`min$: <*UnsignedInteger />`);
223
+ if (yield eatMatch(m`separator: <*Punctuator ',' />`)) {
224
+ max = yield eatMatch(m`max$: <*UnsignedInteger />`);
2091
225
  }
2092
226
  min = min && ctx.sourceTextFor(min);
2093
227
  max = max && ctx.sourceTextFor(max);
@@ -2097,87 +231,13 @@ export const grammar = class RegexGrammar {
2097
231
  min,
2098
232
  max
2099
233
  };
2100
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2101
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2102
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2103
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2104
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2105
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
2106
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2107
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2108
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2109
- }, {}),
2110
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
2111
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2112
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2113
- content: _t.node(_l.CSTML, "Content", [_t.lit("}")], {}, {}),
2114
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2115
- }, {}),
2116
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
2117
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
2118
- }, {})],
2119
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2120
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2121
- }, {})
2122
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2123
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2124
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
2125
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2126
- }, {})],
2127
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2128
- }, {})
2129
- }, {});
234
+ yield eat(m`closeToken: <*Punctuator '}' { balancer: true } />`);
2130
235
  }
2131
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2132
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
2133
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(attrs.min ? buildNumber(attrs.min) : buildNullTag(), _t.ref`values[]`), _t.ref`closeToken`], {
2134
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2135
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2136
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2137
- content: _t.node(_l.CSTML, "Content", [_t.lit("min")], {}, {}),
2138
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2139
- }, {}), ..._interpolateArray(attrs.min ? buildNumber(attrs.min) : buildNullTag())],
2140
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2141
- }, {})
2142
- }, {});
2143
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2144
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
2145
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), ..._interpolateFragmentChildren(attrs.max ? buildNumber(attrs.max) : buildNullTag(), _t.ref`values[]`), _t.ref`closeToken`], {
2146
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2147
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2148
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2149
- content: _t.node(_l.CSTML, "Content", [_t.lit("max")], {}, {}),
2150
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2151
- }, {}), ..._interpolateArray(attrs.max ? buildNumber(attrs.max) : buildNullTag())],
2152
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2153
- }, {})
2154
- }, {});
236
+ yield bindAttribute('min', attrs.min);
237
+ yield bindAttribute('max', attrs.max);
2155
238
  }
2156
239
  *UnsignedInteger() {
2157
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2158
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2159
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
2160
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2161
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2162
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2163
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2164
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
2165
- element: _t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
2166
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
2167
- value: _t.s_node(_l.Regex, "Keyword", "d")
2168
- }, {}),
2169
- value: _t.s_node(_l.Regex, "Keyword", "+")
2170
- }, {
2171
- min: 1,
2172
- max: Infinity,
2173
- greedy: true
2174
- })]
2175
- }, {})],
2176
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2177
- }, {})],
2178
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2179
- }, {})
2180
- }, {});
240
+ yield eat(re`/\d+/`);
2181
241
  }
2182
242
  *EscapeSequence({
2183
243
  state,
@@ -2185,497 +245,40 @@ export const grammar = class RegexGrammar {
2185
245
  value: props
2186
246
  }) {
2187
247
  const parentSpan = state.span;
2188
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2189
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2190
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2191
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2192
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2193
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
2194
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2195
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2196
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2197
- }, {}),
2198
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
2199
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2200
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2201
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
2202
- cooked: "\\"
2203
- }))], {}, {}),
2204
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2205
- }, {}),
2206
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
2207
- key: _t.s_node(_l.Spamex, "Identifier", "openSpan"),
2208
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
2209
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2210
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2211
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
2212
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2213
- }, {})
2214
- }, {})],
2215
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2216
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2217
- }, {})
2218
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2219
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2220
- content: _t.node(_l.CSTML, "Content", [_t.lit("escape")], {}, {}),
2221
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2222
- }, {})],
2223
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2224
- }, {})
2225
- }, {});
2226
- let match;
2227
- if (match = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2228
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
2229
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
2230
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2231
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2232
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2233
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2234
- elements: [_t.node(_l.Regex, "CharacterClass", [10, [[_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`]]], {
2235
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
2236
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
2237
- cooked: "\\"
2238
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("/")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("n")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("r")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("t")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("0")], {}, {})],
2239
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
2240
- }, {
2241
- negate: false
2242
- })]
2243
- }, {})],
2244
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2245
- }, {})],
2246
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2247
- }, {})
2248
- }, {})) {
2249
- const match_ = ctx.sourceTextFor(match);
2250
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2251
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2252
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2253
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2254
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2255
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
2256
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2257
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2258
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2259
- }, {}),
2260
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
2261
- intrinsicValue: buildString(match_),
2262
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
2263
- key: _t.s_node(_l.Spamex, "Identifier", "closeSpan"),
2264
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
2265
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2266
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2267
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
2268
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2269
- }, {})
2270
- }, {})],
2271
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2272
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2273
- }, {})
2274
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2275
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2276
- content: _t.node(_l.CSTML, "Content", [_t.lit("code")], {}, {}),
2277
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2278
- }, {})],
2279
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2280
- }, {})
2281
- }, {});
2282
- } else if (match = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2283
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
2284
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateFragmentChildren(getSpecialPattern(parentSpan, ctx.reifyExpression(props)), _t.ref`values[]`), _t.ref`closeToken`], {
2285
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2286
- values: [..._interpolateArray(getSpecialPattern(parentSpan, ctx.reifyExpression(props)))],
2287
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2288
- }, {})
2289
- }, {})) {
2290
- const match_ = ctx.sourceTextFor(match);
2291
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2292
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2293
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2294
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2295
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2296
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [12, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
2297
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2298
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2299
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2300
- }, {}),
2301
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
2302
- intrinsicValue: buildString(match_),
2303
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
2304
- key: _t.s_node(_l.Spamex, "Identifier", "closeSpan"),
2305
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
2306
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2307
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2308
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
2309
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2310
- }, {})
2311
- }, {})],
2312
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2313
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2314
- }, {})
2315
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2316
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2317
- content: _t.node(_l.CSTML, "Content", [_t.lit("code")], {}, {}),
2318
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2319
- }, {})],
2320
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2321
- }, {})
2322
- }, {});
2323
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2324
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
2325
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
2326
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2327
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2328
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2329
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2330
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
2331
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
2332
- elements: [_t.node(_l.Regex, "Character", [_t.lit("u")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("x")], {}, {})],
2333
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
2334
- }, {
2335
- negate: false
2336
- })]
2337
- }, {})],
2338
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2339
- }, {})],
2340
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2341
- }, {})
2342
- }, {})) {
2343
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2344
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2345
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2346
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2347
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2348
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [10, [[_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {}))], [_t.ref`attributes[]`, _t.arr(), _t.ref`attributes[]`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
2349
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2350
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
2351
- type: _t.s_node(_l.Spamex, "Identifier", "EscapeCode"),
2352
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
2353
- key: _t.s_node(_l.Spamex, "Identifier", "closeSpan"),
2354
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
2355
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2356
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2357
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
2358
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2359
- }, {})
2360
- }, {})],
2361
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2362
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2363
- }, {})
2364
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2365
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2366
- content: _t.node(_l.CSTML, "Content", [_t.lit("code")], {}, {}),
2367
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2368
- }, {})],
2369
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2370
- }, {})
2371
- }, {});
248
+ yield eat(m`escape: <*Punctuator '\\' { openSpan: 'Escape' } />`);
249
+ let m_;
250
+ if (m_ = yield match(re`/[\\/nrt0]/`)) {
251
+ const match_ = ctx.sourceTextFor(m_);
252
+ yield eat(m`code: <*Keyword ${buildString(match_)} { closeSpan: 'Escape' } />`);
253
+ } else if (m_ = yield match(getSpecialPattern(parentSpan))) {
254
+ const match_ = ctx.sourceTextFor(m_);
255
+ yield eat(m`code: <*Keyword ${buildString(match_)} { closeSpan: 'Escape' } />`);
256
+ } else if (yield match(re`/[ux]/`)) {
257
+ yield eat(m`code: <EscapeCode { closeSpan: 'Escape' } />`);
2372
258
  } else {
2373
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2374
- verb: _t.s_node(_l.Instruction, "Identifier", "fail"),
2375
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`closeToken`], {
2376
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2377
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2378
- }, {})
2379
- }, {});
259
+ yield fail();
2380
260
  }
2381
261
  }
2382
262
  *EscapeCode() {
2383
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2384
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2385
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2386
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2387
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2388
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2389
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2390
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2391
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2392
- }, {}),
2393
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
2394
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2395
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2396
- content: _t.node(_l.CSTML, "Content", [_t.lit("u")], {}, {}),
2397
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2398
- }, {}),
2399
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2400
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2401
- }, {})
2402
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2403
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2404
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
2405
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2406
- }, {})],
2407
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2408
- }, {})
2409
- }, {})) {
2410
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2411
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2412
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2413
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2414
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2415
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2416
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2417
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2418
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2419
- }, {}),
2420
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
2421
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2422
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2423
- content: _t.node(_l.CSTML, "Content", [_t.lit("{")], {}, {}),
2424
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2425
- }, {}),
2426
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2427
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2428
- }, {})
2429
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2430
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2431
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
2432
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2433
- }, {})],
2434
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2435
- }, {})
2436
- }, {})) {
2437
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2438
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2439
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2440
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2441
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2442
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2443
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2444
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2445
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2446
- }, {}),
2447
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
2448
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2449
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2450
- }, {})
2451
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2452
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2453
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
2454
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2455
- }, {})],
2456
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2457
- }, {})
2458
- }, {});
2459
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2460
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2461
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2462
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2463
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2464
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2465
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2466
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2467
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2468
- }, {}),
2469
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
2470
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2471
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2472
- content: _t.node(_l.CSTML, "Content", [_t.lit("}")], {}, {}),
2473
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2474
- }, {}),
2475
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2476
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2477
- }, {})
2478
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2479
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2480
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
2481
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2482
- }, {})],
2483
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2484
- }, {})
2485
- }, {});
263
+ if (yield eatMatch(m`type: <*Keyword 'u' />`)) {
264
+ if (yield eatMatch(m`openToken: <*Punctuator '{' />`)) {
265
+ yield eatMatch(m`value$: <*UnsignedInteger />`);
266
+ yield eat(m`closeToken: <*Punctuator '}' />`);
2486
267
  } else {
2487
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2488
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2489
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2490
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2491
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2492
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2493
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2494
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2495
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2496
- }, {}),
2497
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
2498
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2499
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2500
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2501
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`openToken`, _t.ref`min`, _t.ref`closeToken`], {
2502
- element: _t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
2503
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
2504
- value: _t.s_node(_l.Regex, "Keyword", "d")
2505
- }, {}),
2506
- openToken: _t.s_node(_l.Regex, "Punctuator", "{"),
2507
- min: _t.node(_l.Regex, "Number", [_t.lit("4")], {}, {}),
2508
- closeToken: _t.s_node(_l.Regex, "Punctuator", "}")
2509
- }, {
2510
- min: 4,
2511
- max: undefined,
2512
- greedy: true
2513
- })]
2514
- }, {})],
2515
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2516
- }, {}),
2517
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2518
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2519
- }, {})
2520
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2521
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2522
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
2523
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2524
- }, {})],
2525
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2526
- }, {})
2527
- }, {});
2528
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2529
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2530
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2531
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2532
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
2533
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
2534
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2535
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2536
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
2537
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2538
- }, {})],
2539
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2540
- }, {})
2541
- }, {});
268
+ yield eat(m`value$: <*UnsignedInteger /\d{4}/ />`);
269
+ yield eat(m`closeToken: null`);
2542
270
  }
2543
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2544
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2545
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2546
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2547
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2548
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2549
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2550
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2551
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2552
- }, {}),
2553
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
2554
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2555
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2556
- content: _t.node(_l.CSTML, "Content", [_t.lit("x")], {}, {}),
2557
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2558
- }, {}),
2559
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2560
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2561
- }, {})
2562
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2563
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2564
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
2565
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2566
- }, {})],
2567
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2568
- }, {})
2569
- }, {})) {
2570
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2571
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2572
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2573
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2574
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
2575
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
2576
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2577
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2578
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
2579
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2580
- }, {})],
2581
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2582
- }, {})
2583
- }, {});
2584
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2585
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2586
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2587
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2588
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2589
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2590
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2591
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2592
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2593
- }, {}),
2594
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
2595
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2596
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2597
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2598
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`openToken`, _t.ref`min`, _t.ref`closeToken`], {
2599
- element: _t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
2600
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
2601
- value: _t.s_node(_l.Regex, "Keyword", "d")
2602
- }, {}),
2603
- openToken: _t.s_node(_l.Regex, "Punctuator", "{"),
2604
- min: _t.node(_l.Regex, "Number", [_t.lit("2")], {}, {}),
2605
- closeToken: _t.s_node(_l.Regex, "Punctuator", "}")
2606
- }, {
2607
- min: 2,
2608
- max: undefined,
2609
- greedy: true
2610
- })]
2611
- }, {})],
2612
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2613
- }, {}),
2614
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2615
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2616
- }, {})
2617
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2618
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2619
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
2620
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2621
- }, {})],
2622
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2623
- }, {})
2624
- }, {});
2625
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2626
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2627
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
2628
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2629
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
2630
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
2631
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
2632
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
2633
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
2634
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
2635
- }, {})],
2636
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2637
- }, {})
2638
- }, {});
271
+ } else if (yield eatMatch(m`type: <*Keyword 'x' />`)) {
272
+ yield eat(m`openToken: null`);
273
+ yield eat(m`value$: <*UnsignedInteger /\d{2}/ />`);
274
+ yield eat(m`closeToken: null`);
2639
275
  }
2640
276
  }
2641
277
  *Digits() {
2642
- while (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2643
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
2644
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
2645
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2646
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
2647
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
2648
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
2649
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
2650
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
2651
- }, {}),
2652
- type: _t.s_node(_l.Spamex, "Identifier", "Digit"),
2653
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
2654
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
2655
- }, {})
2656
- }, {})],
2657
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2658
- }, {})
2659
- }, {}));
278
+ while (yield eatMatch(m`<*Digit />`));
2660
279
  }
2661
280
  *Digit() {
2662
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
2663
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
2664
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
2665
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
2666
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
2667
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
2668
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
2669
- elements: [_t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
2670
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
2671
- value: _t.s_node(_l.Regex, "Keyword", "d")
2672
- }, {})]
2673
- }, {})],
2674
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
2675
- }, {})],
2676
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
2677
- }, {})
2678
- }, {});
281
+ yield eat(re`/\d/`);
2679
282
  }
2680
283
  *Any() {}
2681
284
  *Keyword() {}