@bablr/language-en-json 0.8.0 → 0.10.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,769 +1,126 @@
1
1
  /* @macrome
2
2
  * @generatedby @bablr/macrome-generator-bablr
3
- * @generatedfrom ./grammar.macro.js#76717d3b386eef642b8bd2cc010acf945f610094
3
+ * @generatedfrom ./grammar.macro.js#4b2e4ce356a3a29eb03d3816de446f8e8e0adfa1
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
- let _initProto, _ExpressionDecs, _ArrayDecs, _ObjectDecs, _StringDecs, _NumberDecs, _BooleanDecs, _NullDecs, _KeywordDecs, _PunctuatorDecs, _ListDecs, _AnyDecs;
8
+ let _initProto, _ExpressionDecs, _ArrayDecs, _ObjectDecs, _StringDecs, _NumberDecs, _InfinityDecs, _BooleanDecs, _NullDecs, _KeywordDecs, _PunctuatorDecs, _ListDecs, _AnyDecs, _AllDecs;
9
+ import { re, spam as m } from '@bablr/boot';
12
10
  import { triviaEnhancer } from '@bablr/helpers/trivia';
13
11
  import * as productions from '@bablr/helpers/productions';
14
- import { buildString, buildBoolean } from '@bablr/helpers/builders';
15
- import { Node, CoveredBy, AllowEmpty, InjectFrom, UnboundAttributes } from '@bablr/helpers/decorators';
12
+ import { o, eat, eatMatch, match, fail } from '@bablr/helpers/grammar';
13
+ import { buildString, buildIdentifier } from '@bablr/helpers/builders';
14
+ import { Node, CoveredBy, AllowEmpty, InjectFrom, Literal } from '@bablr/helpers/decorators';
16
15
  import * as Space from '@bablr/language-en-blank-space';
17
16
  export const dependencies = {
18
17
  Space
19
18
  };
20
- export const canonicalURL = 'https://github.com/bablr-lang/language-en-json';
21
- export const escapables = new Map(Object.entries({
19
+ export const canonicalURL = 'https://bablr.org/languages/core/en/json';
20
+ const escapables = new Map(Object.entries({
22
21
  b: '\b',
22
+ // these two escapes are antiquated
23
23
  f: '\f',
24
+ // but giving their meaning away could be confusing
24
25
  n: '\n',
25
26
  r: '\r',
26
27
  t: '\t',
27
- '\\': '\\',
28
- '/': '/'
28
+ 0: '\0'
29
29
  }));
30
+ function first(iter) {
31
+ for (let value of iter) return value;
32
+ }
30
33
  export const getCooked = (escapeNode, span, ctx) => {
31
34
  let cooked;
32
35
  const codeNode = escapeNode.get('code');
33
- const type = ctx.sourceTextFor(codeNode.get('typeToken'));
34
- const value = ctx.sourceTextFor(codeNode.get('value'));
35
- if (!span.startsWith('String')) {
36
- throw new Error('not implemented');
37
- }
38
- if (!type) {
36
+ if (first(codeNode.children)?.value.flags.token) {
39
37
  const match_ = ctx.sourceTextFor(codeNode);
40
38
  cooked = escapables.get(match_) || match_;
41
- } else if (type === 'u') {
42
- cooked = parseInt(value, 16);
43
39
  } else {
44
- throw new Error();
40
+ const type = ctx.sourceTextFor(codeNode.get('typeToken'));
41
+ const value = ctx.sourceTextFor(codeNode.get('value'));
42
+ if (!span.startsWith('String')) {
43
+ throw new Error('not implemented');
44
+ }
45
+ if (type === 'u') {
46
+ cooked = String.fromCharCode(parseInt(value, 16));
47
+ } else {
48
+ throw new Error();
49
+ }
45
50
  }
46
51
  return cooked.toString(10);
47
52
  };
48
53
  export const grammar = triviaEnhancer({
49
54
  triviaIsAllowed: s => s.span === 'Bare',
50
- *eatMatchTrivia() {
51
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
52
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
53
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
54
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
55
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
56
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
57
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
58
- 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`], {
59
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
60
- elements: [_t.node(_l.Regex, "Character", [_t.lit(" ")], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\n")], {}, {
61
- cooked: "\n"
62
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\r")], {}, {
63
- cooked: "\r"
64
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\t")], {}, {
65
- cooked: "\t"
66
- }))], {}, {})],
67
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
68
- }, {
69
- negate: false
70
- })]
71
- }, {})],
72
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
73
- }, {})],
74
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
75
- }, {})
76
- }, {})) {
77
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
78
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
79
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
80
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
81
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
82
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
83
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
84
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`triviaToken`, _t.ref`tokenToken`], {
85
- triviaToken: _t.s_node(_l.CSTML, "Punctuator", "#"),
86
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
87
- }, {}),
88
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
89
- segments: [_t.s_node(_l.CSTML, "Identifier", "Space")]
90
- }, {}),
91
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
92
- type: _t.s_node(_l.CSTML, "Identifier", "Space"),
93
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
94
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
95
- }, {})
96
- }, {})],
97
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
98
- }, {})
99
- }, {});
100
- }
101
- }
55
+ triviaMatcher: m`#: <*Space:Space /[ \n\r\t]/ />`
102
56
  }, class JSONGrammar {
103
57
  static {
104
- [_initProto] = _applyDecs(this, [[_ExpressionDecs, 2, "Expression"], [_ArrayDecs, 2, "Array"], [_ObjectDecs, 2, "Object"], [Node, 2, "Property"], [_StringDecs, 2, "String"], [[AllowEmpty, Node], 2, "StringContent"], [Node, 2, "EscapeSequence"], [Node, 2, "EscapeCode"], [_NumberDecs, 2, "Number"], [Node, 2, "Integer"], [Node, 2, "UnsignedInteger"], [_BooleanDecs, 2, "Boolean"], [_NullDecs, 2, "Null"], [_KeywordDecs, 2, "Keyword"], [_PunctuatorDecs, 2, "Punctuator"], [_ListDecs, 2, "List"], [_AnyDecs, 2, "Any"]], []).e;
58
+ [_initProto] = _applyDecs(this, [[_ExpressionDecs, 2, "Expression"], [_ArrayDecs, 2, "Array"], [_ObjectDecs, 2, "Object"], [Node, 2, "Property"], [Node, 2, "Identifier"], [_StringDecs, 2, "String"], [[AllowEmpty, Node], 2, "StringContent"], [Node, 2, "EscapeSequence"], [Node, 2, "EscapeCode"], [_NumberDecs, 2, "Number"], [Node, 2, "Integer"], [Node, 2, "UnsignedInteger"], [Node, 2, "UnsignedHexInteger"], [_InfinityDecs, 2, "Infinity"], [_BooleanDecs, 2, "Boolean"], [_NullDecs, 2, "Null"], [_KeywordDecs, 2, "Keyword"], [_PunctuatorDecs, 2, "Punctuator"], [_ListDecs, 2, "List"], [_AnyDecs, 2, "Any"], [_AllDecs, 2, "All"]], []).e;
105
59
  }
106
60
  constructor() {
107
61
  _initProto(this);
108
62
  }
109
- *[(_ExpressionDecs = CoveredBy('Element'), _ArrayDecs = [CoveredBy('Expression'), Node], _ObjectDecs = [CoveredBy('Expression'), Node], _StringDecs = [CoveredBy('Language'), Node], _NumberDecs = [CoveredBy('Expression'), Node], _BooleanDecs = [CoveredBy('Expression'), Node], _NullDecs = [CoveredBy('Expression'), Node], _KeywordDecs = [Node, InjectFrom(productions)], _PunctuatorDecs = [Node, InjectFrom(productions)], _ListDecs = [AllowEmpty, InjectFrom(productions)], _AnyDecs = InjectFrom(productions), Symbol.for('@bablr/fragment'))]() {
63
+ *[(_ExpressionDecs = CoveredBy('Element'), _ArrayDecs = [CoveredBy('Expression'), Node], _ObjectDecs = [CoveredBy('Expression'), Node], _StringDecs = [CoveredBy('Expression'), Node], _NumberDecs = [CoveredBy('Expression'), Node], _InfinityDecs = [CoveredBy('Expression'), Node], _BooleanDecs = [CoveredBy('Expression'), Node], _NullDecs = [CoveredBy('Expression'), Node], _KeywordDecs = [Literal, Node, InjectFrom(productions)], _PunctuatorDecs = [Literal, Node, InjectFrom(productions)], _ListDecs = [AllowEmpty, InjectFrom(productions)], _AnyDecs = InjectFrom(productions), _AllDecs = InjectFrom(productions), Symbol.for('@bablr/fragment'))]({
64
+ props: {
65
+ rootMatcher
66
+ }
67
+ }) {
110
68
  // needed for the trivia plugin
111
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
112
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
113
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
114
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
115
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
116
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
117
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
118
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
119
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
120
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
121
- }, {})
122
- }, {})],
123
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
124
- }, {})
125
- }, {});
69
+ yield eat(rootMatcher);
126
70
  }
127
71
  *Expression() {
128
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
129
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
130
- arguments: _t.node(_l.Instruction, "Tuple", [11, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
131
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
132
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
133
- 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`], {
134
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
135
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
136
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
137
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
138
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
139
- }, {})
140
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
141
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
142
- }, {}), _t.node(_l.Instruction, "Array", [19, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.ref`separators[]`, _t.arr(), _t.ref`separators[]`], [_t.ref`elements[]`, _t.ref`separators[]`, _t.ref`elements[]`, _t.ref`separators[]`], [_t.ref`elements[]`, _t.ref`separators[]`, _t.ref`elements[]`, _t.ref`separators[]`, _t.ref`elements[]`, _t.ref`separators[]`, _t.ref`closeToken`]]], {
143
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
144
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
145
- 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`], {
146
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
147
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
148
- type: _t.s_node(_l.Spamex, "Identifier", "Array"),
149
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
150
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
151
- content: _t.node(_l.CSTML, "Content", [_t.lit("[")], {}, {}),
152
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
153
- }, {}),
154
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
155
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
156
- }, {})
157
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
158
- 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`], {
159
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
160
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
161
- type: _t.s_node(_l.Spamex, "Identifier", "Object"),
162
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
163
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
164
- content: _t.node(_l.CSTML, "Content", [_t.lit("{")], {}, {}),
165
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
166
- }, {}),
167
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
168
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
169
- }, {})
170
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
171
- 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`], {
172
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
173
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
174
- type: _t.s_node(_l.Spamex, "Identifier", "String"),
175
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
176
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
177
- content: _t.node(_l.CSTML, "Content", [_t.lit("\"")], {}, {}),
178
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
179
- }, {}),
180
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
181
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
182
- }, {})
183
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
184
- 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`]]], {
185
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
186
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
187
- type: _t.s_node(_l.Spamex, "Identifier", "Number"),
188
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
189
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
190
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
191
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
192
- element: _t.node(_l.Regex, "Character", [_t.lit("-")], {}, {}),
193
- value: _t.s_node(_l.Regex, "Keyword", "?")
194
- }, {
195
- min: 0,
196
- max: 1,
197
- greedy: true
198
- }), _t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
199
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
200
- value: _t.s_node(_l.Regex, "Keyword", "d")
201
- }, {})]
202
- }, {})],
203
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
204
- }, {}),
205
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
206
- key: _t.s_node(_l.Spamex, "Identifier", "span"),
207
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
208
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
209
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
210
- content: _t.node(_l.CSTML, "Content", [_t.lit("Number")], {}, {}),
211
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
212
- }, {})
213
- }, {})],
214
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
215
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
216
- }, {})
217
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
218
- 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`], {
219
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
220
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
221
- type: _t.s_node(_l.Spamex, "Identifier", "Null"),
222
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
223
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
224
- content: _t.node(_l.CSTML, "Content", [_t.lit("null")], {}, {}),
225
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
226
- }, {}),
227
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
228
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
229
- }, {})
230
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
231
- 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`], {
232
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
233
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
234
- type: _t.s_node(_l.Spamex, "Identifier", "Boolean"),
235
- intrinsicValue: _t.node(_l.Regex, "Pattern", [9, [[_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`]]], {
236
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
237
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
238
- elements: [_t.node(_l.Regex, "Character", [_t.lit("t")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("r")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("u")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("e")], {}, {})]
239
- }, {}), _t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
240
- elements: [_t.node(_l.Regex, "Character", [_t.lit("f")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("l")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("e")], {}, {})]
241
- }, {})],
242
- separators: [_t.s_node(_l.Regex, "Punctuator", "|")],
243
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
244
- }, {}),
245
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
246
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
247
- }, {})
248
- }, {})],
249
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {})],
250
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
251
- }, {})],
252
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
253
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
254
- }, {})
255
- }, {});
72
+ yield eat(m`<_Any />`, [m`<Array '[' />`, m`<Object '{' />`, m`<String /['"]/ />`, m`<Number /\d|-[\d\g]/ {span: 'Number'} />`, m`<Infinity /-?Infinity/ />`, m`<Null 'null' />`, m`<Boolean /true|false/ />`]);
256
73
  }
257
74
  *Array() {
258
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
259
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
260
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
261
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
262
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
263
- 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`]]], {
264
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
265
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
266
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
267
- }, {}),
268
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
269
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
270
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
271
- content: _t.node(_l.CSTML, "Content", [_t.lit("[")], {}, {}),
272
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
273
- }, {}),
274
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
275
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
276
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
277
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
278
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
279
- content: _t.node(_l.CSTML, "Content", [_t.lit("]")], {}, {}),
280
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
281
- }, {})
282
- }, {})],
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("openToken")], {}, {}),
289
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
290
- }, {})],
291
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
292
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
293
- }, {})
294
- }, {});
295
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
296
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
297
- arguments: _t.node(_l.Instruction, "Tuple", [11, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
298
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
299
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
300
- 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`], {
301
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
302
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
303
- type: _t.s_node(_l.Spamex, "Identifier", "List"),
304
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
305
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
306
- }, {})
307
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
308
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
309
- content: _t.node(_l.CSTML, "Content", [_t.lit("elements[]$")], {}, {}),
310
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
311
- }, {}), _t.node(_l.Instruction, "Object", [13, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`properties[]`, _t.arr()], [_t.ref`properties[]`, _t.ref`separators[]`, _t.arr(), _t.ref`separators[]`], [_t.ref`properties[]`, _t.ref`separators[]`, _t.ref`properties[]`, _t.ref`separators[]`, _t.ref`closeToken`]]], {
312
- openToken: _t.s_node(_l.Instruction, "Punctuator", "{"),
313
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
314
- key: _t.node(_l.Instruction, "Literal", [_t.lit("element")], {}, {}),
315
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
316
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
317
- 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`], {
318
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
319
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
320
- type: _t.s_node(_l.Spamex, "Identifier", "Expression"),
321
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
322
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
323
- }, {})
324
- }, {})
325
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
326
- key: _t.node(_l.Instruction, "Literal", [_t.lit("separator")], {}, {}),
327
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
328
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
329
- 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`], {
330
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
331
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
332
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
333
- }, {}),
334
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
335
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
336
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
337
- content: _t.node(_l.CSTML, "Content", [_t.lit(",")], {}, {}),
338
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
339
- }, {}),
340
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
341
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
342
- }, {})
343
- }, {})
344
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
345
- key: _t.node(_l.Instruction, "Literal", [_t.lit("allowTrailingSeparator")], {}, {}),
346
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
347
- value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
348
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "false")
349
- }, {})
350
- }, {})],
351
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {})],
352
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "}")
353
- }, {})],
354
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
355
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
356
- }, {})
357
- }, {});
358
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
359
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
360
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
361
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
362
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
363
- 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`]]], {
364
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
365
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
366
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
367
- }, {}),
368
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
369
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
370
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
371
- content: _t.node(_l.CSTML, "Content", [_t.lit("]")], {}, {}),
372
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
373
- }, {}),
374
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
375
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
376
- }, {})],
377
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
378
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
379
- }, {})
380
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
381
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
382
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
383
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
384
- }, {})],
385
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
386
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
387
- }, {})
388
- }, {});
75
+ yield eat(m`openToken: <*Punctuator '[' { balanced: ']' } />`);
76
+ yield eat(m`<_List />`, o({
77
+ element: m`elements[]+$: <__Expression />`,
78
+ separator: m`separatorTokens[]: <*Punctuator ',' />`,
79
+ allowTrailingSeparator: false
80
+ }));
81
+ yield eat(m`closeToken: <*Punctuator ']' { balancer: true } />`);
389
82
  }
390
83
  *Object() {
391
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
392
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
393
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
394
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
395
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
396
- 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`]]], {
397
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
398
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
399
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
400
- }, {}),
401
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
402
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
403
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
404
- content: _t.node(_l.CSTML, "Content", [_t.lit("{")], {}, {}),
405
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
406
- }, {}),
407
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
408
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
409
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
410
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
411
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
412
- content: _t.node(_l.CSTML, "Content", [_t.lit("}")], {}, {}),
413
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
414
- }, {})
415
- }, {})],
416
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
417
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
418
- }, {})
419
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
420
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
421
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
422
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
423
- }, {})],
424
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
425
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
426
- }, {})
427
- }, {});
428
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
429
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
430
- arguments: _t.node(_l.Instruction, "Tuple", [11, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
431
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
432
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
433
- 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`], {
434
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
435
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
436
- type: _t.s_node(_l.Spamex, "Identifier", "List"),
437
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
438
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
439
- }, {})
440
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
441
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
442
- content: _t.node(_l.CSTML, "Content", [_t.lit("properties[]$")], {}, {}),
443
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
444
- }, {}), _t.node(_l.Instruction, "Object", [13, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`properties[]`, _t.arr()], [_t.ref`properties[]`, _t.ref`separators[]`, _t.arr(), _t.ref`separators[]`], [_t.ref`properties[]`, _t.ref`separators[]`, _t.ref`properties[]`, _t.ref`separators[]`, _t.ref`closeToken`]]], {
445
- openToken: _t.s_node(_l.Instruction, "Punctuator", "{"),
446
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
447
- key: _t.node(_l.Instruction, "Literal", [_t.lit("element")], {}, {}),
448
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
449
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
450
- 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`], {
451
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
452
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
453
- type: _t.s_node(_l.Spamex, "Identifier", "Property"),
454
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
455
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
456
- }, {})
457
- }, {})
458
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
459
- key: _t.node(_l.Instruction, "Literal", [_t.lit("separator")], {}, {}),
460
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
461
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
462
- 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`], {
463
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
464
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
465
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
466
- }, {}),
467
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
468
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
469
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
470
- content: _t.node(_l.CSTML, "Content", [_t.lit(",")], {}, {}),
471
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
472
- }, {}),
473
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
474
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
475
- }, {})
476
- }, {})
477
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
478
- key: _t.node(_l.Instruction, "Literal", [_t.lit("allowTrailingSeparator")], {}, {}),
479
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
480
- value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
481
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "false")
482
- }, {})
483
- }, {})],
484
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {}))], {}, {})],
485
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "}")
486
- }, {})],
487
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
488
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
489
- }, {})
490
- }, {});
491
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
492
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
493
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
494
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
495
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
496
- 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`]]], {
497
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
498
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
499
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
500
- }, {}),
501
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
502
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
503
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
504
- content: _t.node(_l.CSTML, "Content", [_t.lit("}")], {}, {}),
505
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
506
- }, {}),
507
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
508
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
509
- }, {})],
510
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
511
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
512
- }, {})
513
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
514
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
515
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
516
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
517
- }, {})],
518
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
519
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
520
- }, {})
521
- }, {});
84
+ yield eat(m`openToken: <*Punctuator '{' { balanced: '}' } />`);
85
+ let sep = true;
86
+ yield eatMatch(m`separatorTokens[]: []`);
87
+ yield eatMatch(m`properties[]$: []`);
88
+ while (sep && (yield match(re`/.|\g/s`))) {
89
+ let suppressGap = !!(yield match(m`<_All />`, [m`key: <//>`, m`sigilToken: <*Punctuator ':' />`]));
90
+ yield eat(m`properties[]$: <Property />`, null, o({
91
+ suppressGap
92
+ }));
93
+ sep = yield eatMatch(m`separatorTokens[]: <*Punctuator ',' />`);
94
+ }
95
+ yield eat(m`closeToken: <*Punctuator '}' { balancer: true } />`);
522
96
  }
523
97
  *Property() {
524
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
525
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
526
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
527
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
528
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
529
- 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`], {
530
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
531
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
532
- type: _t.s_node(_l.Spamex, "Identifier", "String"),
533
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
534
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
535
- }, {})
536
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
537
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
538
- content: _t.node(_l.CSTML, "Content", [_t.lit("key$")], {}, {}),
539
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
540
- }, {})],
541
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
542
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
543
- }, {})
544
- }, {});
545
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
546
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
547
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
548
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
549
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
550
- 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`], {
551
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
552
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
553
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
554
- }, {}),
555
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
556
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
557
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
558
- content: _t.node(_l.CSTML, "Content", [_t.lit(":")], {}, {}),
559
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
560
- }, {}),
561
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
562
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
563
- }, {})
564
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
565
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
566
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
567
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
568
- }, {})],
569
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
570
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
571
- }, {})
572
- }, {});
573
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
574
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
575
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
576
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
577
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
578
- 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`], {
579
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
580
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
581
- type: _t.s_node(_l.Spamex, "Identifier", "Expression"),
582
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
583
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
584
- }, {})
585
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
586
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
587
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
588
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
589
- }, {})],
590
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
591
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
592
- }, {})
593
- }, {});
98
+ yield eat(m`key$: <*Identifier />`);
99
+ yield eat(m`sigilToken: <*Punctuator ':' />`);
100
+ yield eat(m`value+$: <__Expression />`);
594
101
  }
595
- *String() {
596
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
597
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
598
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
599
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
600
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
601
- 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`]]], {
602
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
603
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
604
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
605
- }, {}),
606
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
607
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
608
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
609
- content: _t.node(_l.CSTML, "Content", [_t.lit("\"")], {}, {}),
610
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
611
- }, {}),
612
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
613
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
614
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
615
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
616
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
617
- content: _t.node(_l.CSTML, "Content", [_t.lit("\"")], {}, {}),
618
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
619
- }, {})
620
- }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
621
- key: _t.s_node(_l.Spamex, "Identifier", "balancedSpan"),
622
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
623
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
624
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
625
- content: _t.node(_l.CSTML, "Content", [_t.lit("String")], {}, {}),
626
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
627
- }, {})
628
- }, {})],
629
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
630
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
631
- }, {})
632
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
633
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
634
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
635
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
636
- }, {})],
637
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
638
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
639
- }, {})
640
- }, {});
641
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
642
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
643
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
644
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
645
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
646
- 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`], {
647
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
648
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
649
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
650
- }, {}),
651
- type: _t.s_node(_l.Spamex, "Identifier", "StringContent"),
652
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
653
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
654
- }, {})
655
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
656
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
657
- content: _t.node(_l.CSTML, "Content", [_t.lit("content")], {}, {}),
658
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
659
- }, {})],
660
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
661
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
662
- }, {})
663
- }, {});
664
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
665
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
666
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
667
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
668
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
669
- 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`]]], {
670
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
671
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
672
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
673
- }, {}),
674
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
675
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
676
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
677
- content: _t.node(_l.CSTML, "Content", [_t.lit("\"")], {}, {}),
678
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
679
- }, {}),
680
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
681
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
682
- }, {})],
683
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
684
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
685
- }, {})
686
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
687
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
688
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
689
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
690
- }, {})],
691
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
692
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
693
- }, {})
694
- }, {});
102
+ *Identifier() {
103
+ yield eat(re`/[a-zA-Z][a-zA-Z_-]*/`);
695
104
  }
696
- *StringContent() {
105
+ *String({
106
+ ctx
107
+ }) {
108
+ let q = yield match(re`/['"]/`);
109
+ if (!q) yield fail();
110
+ const q_ = ctx.sourceTextFor(q);
111
+ yield q_ === "'" ? eat(m`openToken: <*Punctuator "'" { balanced: "'", balancedSpan: 'String:Single' } />`) : eat(m`openToken: <*Punctuator '"' { balanced: '"', balancedSpan: 'String:Double' } />`);
112
+ yield eat(m`content$: <*StringContent />`);
113
+ yield q_ === "'" ? eat(m`closeToken: <*Punctuator "'" { balancer: true } />`) : eat(m`closeToken: <*Punctuator '"' { balancer: true } />`);
114
+ }
115
+ *StringContent({
116
+ state: {
117
+ span
118
+ }
119
+ }) {
697
120
  let esc, lit;
698
121
  do {
699
- esc = (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
700
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
701
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
702
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
703
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
704
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
705
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
706
- cooked: "\\"
707
- }))], {}, {}),
708
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
709
- }, {})],
710
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
711
- }, {})
712
- }, {})) && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
713
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
714
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
715
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
716
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
717
- 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`], {
718
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
719
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`escapeToken`], {
720
- escapeToken: _t.s_node(_l.CSTML, "Punctuator", "@")
721
- }, {}),
722
- type: _t.s_node(_l.Spamex, "Identifier", "EscapeSequence"),
723
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
724
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
725
- }, {})
726
- }, {})],
727
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
728
- }, {})
729
- }, {}));
730
- lit = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
731
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
732
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
733
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
734
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
735
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
736
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
737
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
738
- element: _t.node(_l.Regex, "CharacterClass", [10, [[_t.ref`openToken`, _t.ref`negateToken`, _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`]]], {
739
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
740
- negateToken: _t.s_node(_l.Regex, "Keyword", "^"),
741
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\r")], {}, {
742
- cooked: "\r"
743
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\n")], {}, {
744
- cooked: "\n"
745
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
746
- cooked: "\\"
747
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {}), _t.node(_l.Regex, "Gap", [_t.ref`escapeToken`, _t.ref`value`], {
748
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
749
- value: _t.s_node(_l.Regex, "Keyword", "g")
750
- }, {})],
751
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
752
- }, {
753
- negate: true
754
- }),
755
- value: _t.s_node(_l.Regex, "Keyword", "+")
756
- }, {
757
- min: 1,
758
- max: Infinity,
759
- greedy: true
760
- })]
761
- }, {})],
762
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
763
- }, {})],
764
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
765
- }, {})
766
- }, {});
122
+ esc = (yield match('\\')) && (yield eat(m`@: <EscapeSequence />`));
123
+ lit = span === 'String:Single' ? yield eatMatch(re`/[^\r\n\\'\g]+/`) : yield eatMatch(re`/[^\r\n\\"\g]+/`);
767
124
  } while (esc || lit);
768
125
  }
769
126
  *EscapeSequence({
@@ -773,617 +130,102 @@ export const grammar = triviaEnhancer({
773
130
  ctx
774
131
  }) {
775
132
  if (!span.startsWith('String')) {
776
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
777
- verb: _t.s_node(_l.Instruction, "Identifier", "fail"),
778
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`closeToken`], {
779
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
780
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
781
- }, {})
782
- }, {});
133
+ yield fail();
783
134
  }
784
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
785
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
786
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
787
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
788
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
789
- 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`]]], {
790
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
791
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
792
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
793
- }, {}),
794
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
795
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
796
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
797
- content: _t.node(_l.CSTML, "Content", [_t.embedded(_t.s_e_node(_l.CSTML, "Escape", [_t.lit("\\\\")], {}, {
798
- cooked: "\\"
799
- }))], {}, {}),
800
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
801
- }, {}),
802
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
803
- key: _t.s_node(_l.Spamex, "Identifier", "openSpan"),
804
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
805
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
806
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
807
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
808
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
809
- }, {})
810
- }, {})],
811
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
812
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
813
- }, {})
814
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
815
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
816
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
817
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
818
- }, {})],
819
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
820
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
821
- }, {})
822
- }, {});
823
- let match;
824
- if (match = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
825
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
826
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
827
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
828
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
829
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
830
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
831
- elements: [_t.node(_l.Regex, "CharacterClass", [12, [[_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`closeToken`]]], {
832
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
833
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\\\")], {}, {
834
- cooked: "\\"
835
- }))], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("/")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("b")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("f")], {}, {}), _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("\"")], {}, {})],
836
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
837
- }, {
838
- negate: false
839
- })]
840
- }, {})],
841
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
842
- }, {})],
843
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
844
- }, {})
845
- }, {})) {
846
- const match_ = ctx.sourceTextFor(match);
847
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
848
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
849
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
850
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
851
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
852
- 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`]]], {
853
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
854
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
855
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
856
- }, {}),
857
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
858
- intrinsicValue: buildString(match_),
859
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
860
- key: _t.s_node(_l.Spamex, "Identifier", "closeSpan"),
861
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
862
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
863
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
864
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
865
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
866
- }, {})
867
- }, {})],
868
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
869
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
870
- }, {})
871
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
872
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
873
- content: _t.node(_l.CSTML, "Content", [_t.lit("code")], {}, {}),
874
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
875
- }, {})],
876
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
877
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
878
- }, {})
879
- }, {});
880
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
881
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
882
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
883
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
884
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
885
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
886
- content: _t.node(_l.CSTML, "Content", [_t.lit("u")], {}, {}),
887
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
888
- }, {})],
889
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
890
- }, {})
891
- }, {})) {
892
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
893
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
894
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
895
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
896
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
897
- 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`]]], {
898
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
899
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
900
- type: _t.s_node(_l.Spamex, "Identifier", "EscapeCode"),
901
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
902
- key: _t.s_node(_l.Spamex, "Identifier", "closeSpan"),
903
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
904
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
905
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
906
- content: _t.node(_l.CSTML, "Content", [_t.lit("Escape")], {}, {}),
907
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
908
- }, {})
909
- }, {})],
910
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
911
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
912
- }, {})
913
- }, {}), _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("code")], {}, {}),
916
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
917
- }, {})],
918
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
919
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
920
- }, {})
921
- }, {});
135
+ yield eat(m`sigilToken: <*Punctuator '\\' { openSpan: 'Escape' } />`);
136
+ let match_;
137
+ if (match_ = span === 'String:Single' ? yield match(re`/[\\/nrt0']/`) : yield match(re`/[\\/nrt0"]/`)) {
138
+ const matchText = ctx.sourceTextFor(match_);
139
+ yield eat(m`code: <*Keyword ${buildString(matchText)} { closeSpan: 'Escape' } />`);
140
+ } else if (yield match('u')) {
141
+ yield eat(m`code: <EscapeCode { closeSpan: 'Escape' } />`);
922
142
  } else {
923
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
924
- verb: _t.s_node(_l.Instruction, "Identifier", "fail"),
925
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`closeToken`], {
926
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
927
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
928
- }, {})
929
- }, {});
143
+ yield fail();
930
144
  }
931
145
  }
932
146
  *EscapeCode() {
933
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
934
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
935
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
936
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
937
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
938
- 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`], {
939
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
940
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
941
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
942
- }, {}),
943
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
944
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
945
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
946
- content: _t.node(_l.CSTML, "Content", [_t.lit("u")], {}, {}),
947
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
948
- }, {}),
949
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
950
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
951
- }, {})
952
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
953
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
954
- content: _t.node(_l.CSTML, "Content", [_t.lit("typeToken")], {}, {}),
955
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
956
- }, {})],
957
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
958
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
959
- }, {})
960
- }, {});
961
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
962
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
963
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
964
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
965
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
966
- 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`], {
967
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
968
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
969
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
970
- }, {}),
971
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
972
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
973
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
974
- }, {})
975
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
976
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
977
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
978
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
979
- }, {})],
980
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
981
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
982
- }, {})
983
- }, {});
147
+ if (yield eatMatch(m`typeToken: <*Keyword 'u' />`)) {
148
+ if (yield eatMatch(m`openToken: <*Punctuator '{' { balanced: '}' } />`, null, o({
149
+ bind: true
150
+ }))) {
151
+ yield eat(m`value$: <*UnsignedHexInteger />`);
152
+ yield eat(m`closeToken: <*Punctuator '}' { balancer: true } />`);
153
+ } else {
154
+ yield eat(m`value$: <*UnsignedHexInteger /[\da-fA-F]{4}/ />`);
155
+ yield eat(m`closeToken: null`);
156
+ }
157
+ }
984
158
  }
985
159
  *Number() {
986
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
987
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
988
- arguments: _t.node(_l.Instruction, "Tuple", [11, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
989
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
990
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
991
- 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`], {
992
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
993
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
994
- type: _t.s_node(_l.Spamex, "Identifier", "Integer"),
995
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
996
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
997
- }, {})
998
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
999
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1000
- content: _t.node(_l.CSTML, "Content", [_t.lit("wholePart")], {}, {}),
1001
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1002
- }, {}), _t.node(_l.Instruction, "Object", [11, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`properties[]`, _t.arr()], [_t.ref`properties[]`, _t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`properties[]`, _t.ref`separators[]`, _t.ref`closeToken`]]], {
1003
- openToken: _t.s_node(_l.Instruction, "Punctuator", "{"),
1004
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
1005
- key: _t.node(_l.Instruction, "Literal", [_t.lit("noDoubleZero")], {}, {}),
1006
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
1007
- value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
1008
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "true")
1009
- }, {})
1010
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
1011
- key: _t.node(_l.Instruction, "Literal", [_t.lit("matchSign")], {}, {}),
1012
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
1013
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1014
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1015
- content: _t.node(_l.CSTML, "Content", [_t.lit("-")], {}, {}),
1016
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1017
- }, {})
1018
- }, {})],
1019
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1020
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "}")
1021
- }, {})],
1022
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1023
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1024
- }, {})
1025
- }, {});
1026
- let fs = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1027
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1028
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1029
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1030
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1031
- 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`], {
1032
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1033
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1034
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1035
- }, {}),
1036
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1037
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1038
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1039
- content: _t.node(_l.CSTML, "Content", [_t.lit(".")], {}, {}),
1040
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1041
- }, {}),
1042
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1043
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1044
- }, {})
1045
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1046
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1047
- content: _t.node(_l.CSTML, "Content", [_t.lit("fractionalSeparatorToken")], {}, {}),
1048
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1049
- }, {})],
1050
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1051
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1052
- }, {})
1053
- }, {});
160
+ yield eat(m`wholePart$: <Integer />`, o({
161
+ noDoubleZero: true,
162
+ matchSign: '-'
163
+ }));
164
+ let fs = yield eatMatch(m`fractionalSeparatorToken: <*Punctuator '.' />`, null, o({
165
+ bind: true
166
+ }));
1054
167
  if (fs) {
1055
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1056
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1057
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1058
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1059
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1060
- 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`], {
1061
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1062
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1063
- type: _t.s_node(_l.Spamex, "Identifier", "Integer"),
1064
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1065
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1066
- }, {})
1067
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1068
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1069
- content: _t.node(_l.CSTML, "Content", [_t.lit("fractionalPart")], {}, {}),
1070
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1071
- }, {})],
1072
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1073
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1074
- }, {})
1075
- }, {});
168
+ yield eat(m`fractionalPart$: <*UnsignedInteger />`);
1076
169
  } else {
1077
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1078
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1079
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1080
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1081
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1082
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
1083
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1084
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1085
- content: _t.node(_l.CSTML, "Content", [_t.lit("fractionalPart")], {}, {}),
1086
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1087
- }, {})],
1088
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1089
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1090
- }, {})
1091
- }, {});
170
+ yield eat(m`fractionalPart$: null`);
1092
171
  }
1093
- let es = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1094
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1095
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1096
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1097
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1098
- 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`], {
1099
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1100
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1101
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1102
- }, {}),
1103
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1104
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1105
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1106
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1107
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1108
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1109
- elements: [_t.node(_l.Regex, "Character", [_t.lit("e")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("E")], {}, {})],
1110
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1111
- }, {
1112
- negate: false
1113
- })]
1114
- }, {})],
1115
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1116
- }, {}),
1117
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1118
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1119
- }, {})
1120
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1121
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1122
- content: _t.node(_l.CSTML, "Content", [_t.lit("exponentSeparatorToken")], {}, {}),
1123
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1124
- }, {})],
1125
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1126
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1127
- }, {})
1128
- }, {});
172
+ let es = yield eatMatch(m`exponentSeparatorToken: <*Punctuator /[eE]/ />`, null, o({
173
+ bind: true
174
+ }));
1129
175
  if (es) {
1130
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1131
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1132
- arguments: _t.node(_l.Instruction, "Tuple", [11, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1133
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1134
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1135
- 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`], {
1136
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1137
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1138
- type: _t.s_node(_l.Spamex, "Identifier", "Integer"),
1139
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1140
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1141
- }, {})
1142
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1143
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1144
- content: _t.node(_l.CSTML, "Content", [_t.lit("exponentPart")], {}, {}),
1145
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1146
- }, {}), _t.node(_l.Instruction, "Object", [9, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`properties[]`, _t.arr()], [_t.ref`properties[]`, _t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`closeToken`]]], {
1147
- openToken: _t.s_node(_l.Instruction, "Punctuator", "{"),
1148
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
1149
- key: _t.node(_l.Instruction, "Literal", [_t.lit("matchSign")], {}, {}),
1150
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
1151
- value: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1152
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1153
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1154
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1155
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
1156
- elements: [_t.node(_l.Regex, "Character", [_t.lit("+")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("-")], {}, {})],
1157
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
1158
- }, {
1159
- negate: false
1160
- })]
1161
- }, {})],
1162
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1163
- }, {})
1164
- }, {})],
1165
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1166
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "}")
1167
- }, {})],
1168
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {}), _t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1169
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1170
- }, {})
1171
- }, {});
176
+ yield eat(m`exponentPart$: <Integer />`, {
177
+ matchSign: /[+-]/
178
+ });
1172
179
  } else {
1173
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1174
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1175
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1176
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1177
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1178
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
1179
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1180
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1181
- content: _t.node(_l.CSTML, "Content", [_t.lit("exponentPart")], {}, {}),
1182
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1183
- }, {})],
1184
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1185
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1186
- }, {})
1187
- }, {});
180
+ yield eat(m`exponentPart$: null`);
1188
181
  }
1189
182
  }
1190
183
  *Integer({
1191
- value: props,
1192
- ctx
1193
- }) {
1194
- const {
184
+ props: {
1195
185
  matchSign = null,
1196
186
  noDoubleZero = false
1197
- } = props && ctx.unbox(props) || {};
187
+ }
188
+ }) {
1198
189
  if (matchSign) {
1199
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1200
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1201
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1202
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1203
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1204
- 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`], {
1205
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1206
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1207
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1208
- }, {}),
1209
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1210
- intrinsicValue: matchSign,
1211
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1212
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1213
- }, {})
1214
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1215
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1216
- content: _t.node(_l.CSTML, "Content", [_t.lit("signToken")], {}, {}),
1217
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1218
- }, {})],
1219
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1220
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1221
- }, {})
1222
- }, {});
190
+ yield eatMatch(m`signToken: <*Punctuator ${buildString(matchSign)} />`, null, o({
191
+ bind: true
192
+ }));
1223
193
  } else {
1224
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1225
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1226
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1227
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1228
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
1229
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
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("signToken")], {}, {}),
1233
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1234
- }, {})],
1235
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1236
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1237
- }, {})
1238
- }, {});
194
+ yield eat(m`signToken: null`);
1239
195
  }
1240
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1241
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1242
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1243
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1244
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1245
- 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`]]], {
1246
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1247
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1248
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1249
- }, {}),
1250
- type: _t.s_node(_l.Spamex, "Identifier", "UnsignedInteger"),
1251
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
1252
- key: _t.s_node(_l.Spamex, "Identifier", "noDoubleZero"),
1253
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
1254
- value: buildBoolean(noDoubleZero)
1255
- }, {})],
1256
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1257
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1258
- }, {})
1259
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1260
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1261
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1262
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1263
- }, {})],
1264
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1265
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1266
- }, {})
1267
- }, {});
196
+ yield eat(m`value$: <*UnsignedInteger />`, o({
197
+ noDoubleZero
198
+ }));
1268
199
  }
1269
200
  *UnsignedInteger({
1270
- value: props,
201
+ props: {
202
+ noDoubleZero = false
203
+ },
1271
204
  ctx
1272
205
  }) {
1273
- const {
1274
- noDoubleZero = false
1275
- } = props && ctx.unbox(props) || {};
1276
- let [firstDigit] = ctx.allTagsFor(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.ref`closeToken`], {
1279
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1280
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1281
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1282
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1283
- elements: [_t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
1284
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
1285
- value: _t.s_node(_l.Regex, "Keyword", "d")
1286
- }, {})]
1287
- }, {})],
1288
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1289
- }, {})],
1290
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1291
- }, {})
1292
- }, {}));
206
+ let firstDigit = ctx.sourceTextFor(yield eat(re`/\d/`));
1293
207
  if (!noDoubleZero || firstDigit.value !== '0') {
1294
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1295
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
1296
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1297
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1298
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1299
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1300
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1301
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
1302
- element: _t.node(_l.Regex, "DigitCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
1303
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
1304
- value: _t.s_node(_l.Regex, "Keyword", "d")
1305
- }, {}),
1306
- value: _t.s_node(_l.Regex, "Keyword", "+")
1307
- }, {
1308
- min: 1,
1309
- max: Infinity,
1310
- greedy: true
1311
- })]
1312
- }, {})],
1313
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1314
- }, {})],
1315
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1316
- }, {})
1317
- }, {});
208
+ yield eatMatch(re`/\d+/`);
1318
209
  }
1319
210
  }
211
+ *UnsignedHexInteger() {
212
+ yield eatMatch(re`/[\da-fA-F]+/`);
213
+ }
214
+ *Infinity() {
215
+ yield eatMatch(m`signToken: <*Punctuator '-' />`, null, o({
216
+ bind: true
217
+ }));
218
+ yield eat(m`sigilToken: <*Keyword 'Infinity' />`);
219
+ }
1320
220
  *Boolean() {
1321
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1322
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1323
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1324
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1325
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1326
- 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`], {
1327
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1328
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1329
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1330
- }, {}),
1331
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1332
- intrinsicValue: _t.node(_l.Regex, "Pattern", [9, [[_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`]]], {
1333
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
1334
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
1335
- elements: [_t.node(_l.Regex, "Character", [_t.lit("t")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("r")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("u")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("e")], {}, {})]
1336
- }, {}), _t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
1337
- elements: [_t.node(_l.Regex, "Character", [_t.lit("f")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("l")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("s")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("e")], {}, {})]
1338
- }, {})],
1339
- separators: [_t.s_node(_l.Regex, "Punctuator", "|")],
1340
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
1341
- }, {}),
1342
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1343
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1344
- }, {})
1345
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1346
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1347
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
1348
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1349
- }, {})],
1350
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1351
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1352
- }, {})
1353
- }, {});
221
+ yield eat(m`sigilToken: <*Keyword /true|false/ />`);
1354
222
  }
1355
223
  *Null() {
1356
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1357
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1358
- arguments: _t.node(_l.Instruction, "Tuple", [9, [[_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`], [_t.ref`separators[]`, _t.arr(), _t.ref`separators[]`, _t.ref`values[]`, _t.ref`closeToken`]]], {
1359
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1360
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1361
- 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`], {
1362
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1363
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1364
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1365
- }, {}),
1366
- type: _t.s_node(_l.Spamex, "Identifier", "Keyword"),
1367
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1368
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1369
- content: _t.node(_l.CSTML, "Content", [_t.lit("null")], {}, {}),
1370
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1371
- }, {}),
1372
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1373
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1374
- }, {})
1375
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1376
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1377
- content: _t.node(_l.CSTML, "Content", [_t.lit("sigilToken")], {}, {}),
1378
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1379
- }, {})],
1380
- separators: [_t.node(_l.Instruction, "Separator", [_t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {}))], {}, {})],
1381
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1382
- }, {})
1383
- }, {});
224
+ yield eat(m`sigilToken: <*Keyword 'null' />`);
1384
225
  }
1385
226
  *Keyword() {}
1386
227
  *Punctuator() {}
1387
228
  *List() {}
1388
229
  *Any() {}
230
+ *All() {}
1389
231
  });