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