@bablr/language-en-spamex 0.5.0 → 0.7.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,24 +1,25 @@
1
1
  /* @macrome
2
2
  * @generatedby @bablr/macrome-generator-bablr
3
- * @generatedfrom ./grammar.macro.js#947c1c880e407496daeaf713698fdd425fcfa3dd
3
+ * @generatedfrom ./grammar.macro.js#fba5948385285e93eab4ec54f33e3401a5ef7a12
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, interpolateArrayChildren as _interpolateArrayChildren, 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, _MatcherDecs, _NodeMatcherDecs, _CloseNodeMatcherDecs, _BooleanAttributeDecs, _MappingAttributeDecs, _StringMatcherDecs, _StringDecs, _RegexDecs, _ListDecs, _PunctuatorDecs, _AnyDecs;
12
- import { Node, CoveredBy, InjectFrom } from '@bablr/helpers/decorators';
8
+ let _initProto, _MatcherDecs, _GapNodeMatcherDecs, _ArrayNodeMatcherDecs, _NullNodeMatcherDecs, _PropertyMatcherDecs, _BasicNodeMatcherDecs, _CloseNodeMatcherDecs, _StringMatcherDecs, _StringDecs, _RegexDecs, _ListDecs, _PunctuatorDecs, _AnyDecs;
9
+ import { re, spam as m } from '@bablr/boot';
10
+ import { Node, CoveredBy, InjectFrom, UnboundAttributes } from '@bablr/helpers/decorators';
13
11
  import * as productions from '@bablr/helpers/productions';
12
+ import { o, eat, eatMatch, match, bindAttribute, fail } from '@bablr/helpers/grammar';
14
13
  import * as Regex from '@bablr/language-en-regex-vm-pattern';
15
14
  import * as CSTML from '@bablr/language-en-cstml';
15
+ import * as JSON from '@bablr/language-en-cstml-json';
16
16
  import * as Space from '@bablr/language-en-blank-space';
17
17
  import { notNull } from '@bablr/agast-helpers/tree';
18
18
  export const canonicalURL = 'https://bablr.org/languages/core/en/spamex';
19
19
  export const dependencies = {
20
20
  Regex,
21
21
  CSTML,
22
+ JSON,
22
23
  Space
23
24
  };
24
25
  const {
@@ -26,1203 +27,102 @@ const {
26
27
  } = CSTML;
27
28
  export const grammar = class SpamexGrammar {
28
29
  static {
29
- [_initProto] = _applyDecs(this, [[Node, 2, "Pattern"], [_MatcherDecs, 2, "Matcher"], [_NodeMatcherDecs, 2, "NodeMatcher"], [Node, 2, "OpenNodeMatcher"], [_CloseNodeMatcherDecs, 2, "CloseNodeMatcher"], [_BooleanAttributeDecs, 2, "BooleanAttribute"], [_MappingAttributeDecs, 2, "MappingAttribute"], [_StringMatcherDecs, 2, "StringMatcher"], [_StringDecs, 2, "String"], [_RegexDecs, 2, "Regex"], [_ListDecs, 2, "List"], [_PunctuatorDecs, 2, "Punctuator"], [_AnyDecs, 2, "Any"]], []).e;
30
+ [_initProto] = _applyDecs(this, [[_MatcherDecs, 2, "Matcher"], [_GapNodeMatcherDecs, 2, "GapNodeMatcher"], [_ArrayNodeMatcherDecs, 2, "ArrayNodeMatcher"], [_NullNodeMatcherDecs, 2, "NullNodeMatcher"], [_PropertyMatcherDecs, 2, "PropertyMatcher"], [Node, 2, "ReferenceMatcher"], [_BasicNodeMatcherDecs, 2, "BasicNodeMatcher"], [Node, 2, "OpenNodeMatcher"], [_CloseNodeMatcherDecs, 2, "CloseNodeMatcher"], [_StringMatcherDecs, 2, "StringMatcher"], [_StringDecs, 2, "String"], [_RegexDecs, 2, "Regex"], [_ListDecs, 2, "List"], [_PunctuatorDecs, 2, "Punctuator"], [_AnyDecs, 2, "Any"]], []).e;
30
31
  }
31
32
  constructor() {
32
33
  _initProto(this);
33
34
  }
34
- *[(_MatcherDecs = CoveredBy('Expression'), _NodeMatcherDecs = [Node, CoveredBy('Matcher')], _CloseNodeMatcherDecs = [Node, CoveredBy('Matcher')], _BooleanAttributeDecs = [CoveredBy('Attribute'), Node], _MappingAttributeDecs = [CoveredBy('Attribute'), Node], _StringMatcherDecs = [CoveredBy('Matcher'), CoveredBy('Expression')], _StringDecs = [CoveredBy('StringMatcher'), CoveredBy('Matcher'), CoveredBy('Expression'), Node], _RegexDecs = [CoveredBy('StringMatcher'), CoveredBy('Matcher'), CoveredBy('Expression'), Node], _ListDecs = InjectFrom(productions), _PunctuatorDecs = [Node, InjectFrom(productions)], _AnyDecs = InjectFrom(productions), "Pattern")]() {
35
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
36
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
37
- 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`], {
38
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
39
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
40
- 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`], {
41
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
42
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
43
- type: _t.s_node(_l.Spamex, "Identifier", "Matcher"),
44
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
45
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
46
- }, {})
47
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
48
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
49
- content: _t.node(_l.CSTML, "Content", [_t.lit("matcher")], {}, {}),
50
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
51
- }, {})],
52
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
53
- }, {})
54
- }, {});
55
- }
56
- *Matcher() {
57
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
58
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
59
- 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`]]], {
60
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
61
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
62
- 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`], {
63
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
64
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
65
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
66
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
67
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
68
- }, {})
69
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
70
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
71
- }, {}), _t.node(_l.Instruction, "Array", [11, [[_t.ref`openToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.arr()], [_t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`]]], {
72
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "["),
73
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
74
- 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`], {
75
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
76
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
77
- type: _t.s_node(_l.Spamex, "Identifier", "NodeMatcher"),
78
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
79
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
80
- content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
81
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
82
- }, {}),
83
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
84
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
85
- }, {})
86
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
87
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [10, [[_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`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
88
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
89
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
90
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
91
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
92
- type: _t.s_node(_l.Spamex, "Identifier", "String"),
93
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
94
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
95
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
96
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
97
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
98
- elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
99
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
100
- }, {
101
- negate: false
102
- })]
103
- }, {})],
104
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
105
- }, {}),
106
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
107
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
108
- }, {})
109
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
110
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [10, [[_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`intrinsicValue`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`]]], {
111
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
112
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
113
- language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
114
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
115
- type: _t.s_node(_l.Spamex, "Identifier", "Pattern"),
116
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
117
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
118
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
119
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
120
- }, {}),
121
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
122
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
123
- }, {})
124
- }, {})],
125
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "]")
126
- }, {})],
127
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
128
- }, {})
129
- }, {});
35
+ *[(_MatcherDecs = CoveredBy('Expression'), _GapNodeMatcherDecs = [Node, CoveredBy('NodeMatcher')], _ArrayNodeMatcherDecs = [Node, CoveredBy('NodeMatcher')], _NullNodeMatcherDecs = [Node, CoveredBy('NodeMatcher')], _PropertyMatcherDecs = [Node, CoveredBy('Matcher')], _BasicNodeMatcherDecs = [Node, CoveredBy('NodeMatcher')], _CloseNodeMatcherDecs = [Node, CoveredBy('Matcher')], _StringMatcherDecs = [CoveredBy('Matcher'), CoveredBy('Expression')], _StringDecs = [CoveredBy('StringMatcher'), CoveredBy('Matcher'), CoveredBy('Expression'), Node], _RegexDecs = [CoveredBy('StringMatcher'), CoveredBy('Matcher'), CoveredBy('Expression'), Node], _ListDecs = InjectFrom(productions), _PunctuatorDecs = [Node, InjectFrom(productions)], _AnyDecs = InjectFrom(productions), "Matcher")]() {
36
+ yield eat(m`<Any />`, [m`<PropertyMatcher /[a-zA-Z.@#<]/ />`, m`<StringMatcher /[/'"]/ />`]);
130
37
  }
131
38
  *NodeMatcher() {
132
- let open = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
133
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
134
- 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`], {
135
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
136
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
137
- 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`], {
138
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
139
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
140
- type: _t.s_node(_l.Spamex, "Identifier", "OpenNodeMatcher"),
141
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
142
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
143
- }, {})
144
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
145
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
146
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
147
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
148
- }, {})],
149
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
150
- }, {})
151
- }, {});
152
-
153
- // Problem: not handling gaps
154
- // gaps have a non-nullish representation
155
- //
156
- const {
157
- selfClosingTagToken
158
- } = open.properties;
159
- const selfClosing = notNull(selfClosingTagToken);
39
+ yield eat(m`<Any />`, [m`<GapNodeMatcher '<//>' />`, m`<BasicNodeMatcher '<' />`, m`<ArrayNodeMatcher '[' />`, m`<NullNodeMatcher 'null' />`]);
40
+ }
41
+ *GapNodeMatcher() {
42
+ yield eat(m`sigilToken: <*Punctuator '<//>' />`);
43
+ }
44
+ *ArrayNodeMatcher() {
45
+ yield eat(m`sigilToken: <*Punctuator '[]' />`);
46
+ }
47
+ *NullNodeMatcher() {
48
+ yield eat(m`sigilToken: <*Punctuator 'null' />`);
49
+ }
50
+ *PropertyMatcher() {
51
+ yield eatMatch(m`refMatcher: <ReferenceMatcher />`);
52
+ yield* eatMatchTrivia();
53
+ yield eat(m`nodeMatcher: <NodeMatcher />`);
54
+ }
55
+ *ReferenceMatcher() {
56
+ let name;
57
+ if (yield match(re`/[.#@]/`)) {
58
+ name = yield eatMatch(m`name$: <*Punctuator /[.#@]/ />`);
59
+ } else {
60
+ name = yield eatMatch(m`name$: <*CSTML:Identifier />`);
61
+ }
62
+ if (name && (yield eatMatch(m`openIndexToken: <*Punctuator '[' { balanced: ']' } />`))) {
63
+ yield* eatMatchTrivia();
64
+ yield eatMatch(m`closeIndexToken: <*Punctuator ']' { balancer: true } />`);
65
+ } else {
66
+ yield eatMatch(m`closeIndexToken: null`);
67
+ }
68
+ yield* eatMatchTrivia();
69
+ yield eatMatch(m`flags: <CSTML:ReferenceFlags />`);
70
+ yield* eatMatchTrivia();
71
+ yield eat(m`sigilToken: <*Punctuator ':' />`);
72
+ }
73
+ *BasicNodeMatcher() {
74
+ let open = yield eat(m`open: <OpenNodeMatcher />`);
75
+ const selfClosing = notNull(open.get('selfClosingTagToken'));
160
76
  if (selfClosing) {
161
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
162
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
163
- 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`], {
164
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
165
- values: [_t.node(_l.Instruction, "Array", [_t.ref`openToken`, _t.ref`closeToken`], {
166
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "["),
167
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "]")
168
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
169
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
170
- content: _t.node(_l.CSTML, "Content", [_t.lit("children[]")], {}, {}),
171
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
172
- }, {})],
173
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
174
- }, {})
175
- }, {});
176
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
177
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
178
- 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`], {
179
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
180
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
181
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
182
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
183
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
184
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
185
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
186
- }, {})],
187
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
188
- }, {})
189
- }, {});
77
+ yield eat(m`children[]$: []`);
78
+ yield eat(m`close: null`);
190
79
  } else {
191
80
  // TODO
192
81
  yield* eatMatchTrivia();
193
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
194
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
195
- 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`], {
196
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
197
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
198
- 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`], {
199
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
200
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
201
- type: _t.s_node(_l.Spamex, "Identifier", "CloseNodeMatcher"),
202
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
203
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
204
- }, {})
205
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
206
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
207
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
208
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
209
- }, {})],
210
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
211
- }, {})
212
- }, {});
82
+ yield eat(m`close: <CloseNodeMatcher />`);
213
83
  }
214
84
  }
215
85
  *OpenNodeMatcher() {
216
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
217
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
218
- 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`], {
219
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
220
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
221
- 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`]]], {
222
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
223
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
224
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
225
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
226
- }, {}),
227
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
228
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
229
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
230
- content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
231
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
232
- }, {}),
233
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
234
- key: _t.s_node(_l.Spamex, "Identifier", "balancedSpan"),
235
- mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
236
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
237
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
238
- content: _t.node(_l.CSTML, "Content", [_t.lit("Tag")], {}, {}),
239
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
240
- }, {})
241
- }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
242
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
243
- mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
244
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
245
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
246
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
247
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
248
- }, {})
249
- }, {})],
250
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
251
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
252
- }, {})
253
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
254
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
255
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
256
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
257
- }, {})],
258
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
259
- }, {})
260
- }, {});
261
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
262
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
263
- 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`], {
264
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
265
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
266
- 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`], {
267
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
268
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
269
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
270
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
271
- type: _t.s_node(_l.Spamex, "Identifier", "Flags"),
272
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
273
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
274
- }, {})
275
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
276
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
277
- content: _t.node(_l.CSTML, "Content", [_t.lit("flags")], {}, {}),
278
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
279
- }, {})],
280
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
281
- }, {})
282
- }, {});
283
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
284
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
285
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
286
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
287
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
288
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
289
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
290
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
291
- element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
292
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
293
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
294
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
295
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
296
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
297
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
298
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
299
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
300
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
301
- }, {})],
302
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
303
- }, {
304
- negate: false
305
- }),
306
- value: _t.s_i_node(_l.Regex, "Keyword", "+")
307
- }, {
308
- min: 1,
309
- max: Infinity,
310
- greedy: true
311
- }), _t.node(_l.Regex, "Character", [_t.lit(":")], {}, {})]
312
- }, {})],
313
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
314
- }, {})],
315
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
316
- }, {})
317
- }, {})) {
318
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
319
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
320
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
321
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
322
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
323
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
324
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
325
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
326
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
327
- }, {}),
328
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
329
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
330
- type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
331
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
332
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
333
- }, {})
334
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
335
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
336
- content: _t.node(_l.CSTML, "Content", [_t.lit("language")], {}, {}),
337
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
338
- }, {})],
339
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
340
- }, {})
341
- }, {});
342
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
343
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
344
- 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`], {
345
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
346
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
347
- 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`], {
348
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
349
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
350
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
351
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
352
- }, {}),
353
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
354
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
355
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
356
- content: _t.node(_l.CSTML, "Content", [_t.lit(":")], {}, {}),
357
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
358
- }, {}),
359
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
360
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
361
- }, {})
362
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
363
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
364
- content: _t.node(_l.CSTML, "Content", [_t.lit("namespaceOperator")], {}, {}),
365
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
366
- }, {})],
367
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
368
- }, {})
369
- }, {});
370
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
371
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
372
- 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`], {
373
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
374
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
375
- 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`], {
376
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
377
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
378
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
379
- }, {}),
380
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
381
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
382
- type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
383
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
384
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
385
- }, {})
386
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
387
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
388
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
389
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
390
- }, {})],
391
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
392
- }, {})
393
- }, {});
394
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
395
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
396
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
397
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
398
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
399
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
400
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
401
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
402
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
403
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
404
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
405
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
406
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
407
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
408
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
409
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
410
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
411
- }, {})],
412
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
413
- }, {
414
- negate: false
415
- })]
416
- }, {})],
417
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
418
- }, {})],
419
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
420
- }, {})
421
- }, {})) {
422
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
423
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
424
- 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`], {
425
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
426
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
427
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
428
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
429
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
430
- content: _t.node(_l.CSTML, "Content", [_t.lit("language")], {}, {}),
431
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
432
- }, {})],
433
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
434
- }, {})
435
- }, {});
436
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
437
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
438
- 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`], {
439
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
440
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
441
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
442
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
443
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
444
- content: _t.node(_l.CSTML, "Content", [_t.lit("namespaceOperator")], {}, {}),
445
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
446
- }, {})],
447
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
448
- }, {})
449
- }, {});
450
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
451
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
452
- 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`], {
453
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
454
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
455
- 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`], {
456
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
457
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
458
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
459
- }, {}),
460
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
461
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
462
- type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
463
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
464
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
465
- }, {})
466
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
467
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
468
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
469
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
470
- }, {})],
471
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
472
- }, {})
473
- }, {});
474
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
475
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
476
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
477
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
478
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
479
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
480
- content: _t.node(_l.CSTML, "Content", [_t.lit("?")], {}, {}),
481
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
482
- }, {})],
483
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
484
- }, {})
485
- }, {})) {
486
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
487
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
488
- 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`], {
489
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
490
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
491
- 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`], {
492
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
493
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
494
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
495
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
496
- }, {}),
497
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
498
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
499
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
500
- content: _t.node(_l.CSTML, "Content", [_t.lit("?")], {}, {}),
501
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
502
- }, {}),
503
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
504
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
505
- }, {})
506
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
507
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
508
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
509
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
510
- }, {})],
511
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
512
- }, {})
513
- }, {});
514
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
515
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
516
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
517
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
518
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
519
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
520
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
521
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
522
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
523
- elements: [_t.node(_l.Regex, "Character", [_t.lit(" ")], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\t")], {}, {
524
- cooked: "\t"
525
- }))], {}, {})],
526
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
527
- }, {
528
- negate: false
529
- })]
530
- }, {})],
531
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
532
- }, {})],
533
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
534
- }, {})
535
- }, {})) {
536
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
537
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
538
- 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`], {
539
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
540
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
541
- 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`], {
542
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
543
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
544
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
545
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
546
- }, {}),
547
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
548
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
549
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
550
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
551
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
552
- element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
553
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
554
- elements: [_t.node(_l.Regex, "Character", [_t.lit(" ")], {}, {}), _t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\t")], {}, {
555
- cooked: "\t"
556
- }))], {}, {})],
557
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
558
- }, {
559
- negate: false
560
- }),
561
- value: _t.s_i_node(_l.Regex, "Keyword", "+")
562
- }, {
563
- min: 1,
564
- max: Infinity,
565
- greedy: true
566
- })]
567
- }, {})],
568
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
569
- }, {}),
570
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
571
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
572
- }, {})
573
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
574
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
575
- content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
576
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
577
- }, {})],
578
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
579
- }, {})
580
- }, {});
86
+ yield eat(m`open: <*Punctuator '<' { balancedSpan: 'Tag', balanced: '>' } />`);
87
+ yield eat(m`flags: <CSTML:NodeFlags />`);
88
+ if (yield eatMatch(m`<CSTML:TagType /[a-zA-Z'"\g]/ />`)) {
89
+ // continue
90
+ } else if (yield eatMatch(m`type$: <*Punctuator /[ \t]+|?/ />`)) {
91
+ // continue
92
+ } else {
93
+ yield fail();
581
94
  }
582
95
  let sp = yield* eatMatchTrivia();
583
- if (sp && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
584
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
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_i_node(_l.Instruction, "Punctuator", "("),
587
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
588
- 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`], {
589
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
590
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
591
- type: _t.s_node(_l.Spamex, "Identifier", "StringMatcher"),
592
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
593
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
594
- }, {})
595
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
596
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
597
- content: _t.node(_l.CSTML, "Content", [_t.lit("intrinsicValue")], {}, {}),
598
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
599
- }, {})],
600
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
601
- }, {})
602
- }, {}))) {
96
+ if (sp && !(yield match(re`/\/$/`)) && (yield eatMatch(m`intrinsicValue$: <StringMatcher />`))) {
603
97
  sp = yield* eatMatchTrivia();
604
98
  }
605
- while (sp && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
606
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
607
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
608
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
609
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
610
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
611
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
612
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
613
- element: _t.node(_l.Regex, "Character", [_t.lit("!")], {}, {}),
614
- value: _t.s_i_node(_l.Regex, "Keyword", "?")
615
- }, {
616
- min: 0,
617
- max: 1,
618
- greedy: true
619
- }), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
620
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
621
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
622
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
623
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
624
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
625
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
626
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
627
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
628
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
629
- }, {})],
630
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
631
- }, {
632
- negate: false
633
- })]
634
- }, {})],
635
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
636
- }, {})],
637
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
638
- }, {})
639
- }, {}))) {
640
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
641
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
642
- 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`], {
643
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
644
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
645
- 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`], {
646
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
647
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
648
- type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
649
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
650
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
651
- }, {})
652
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
653
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
654
- content: _t.node(_l.CSTML, "Content", [_t.lit("attributes[]")], {}, {}),
655
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
656
- }, {})],
657
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
658
- }, {})
659
- }, {});
99
+ while (sp && (yield match('{'))) {
100
+ yield eat(m`attributes: <JSON:Object />`);
660
101
  sp = yield* eatMatchTrivia();
661
102
  }
662
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
663
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
664
- 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`], {
665
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
666
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
667
- 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`], {
668
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
669
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
670
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
671
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
672
- }, {}),
673
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
674
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
675
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
676
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
677
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
678
- }, {}),
679
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
680
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
681
- }, {})
682
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
683
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
684
- content: _t.node(_l.CSTML, "Content", [_t.lit("selfClosingTagToken")], {}, {}),
685
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
686
- }, {})],
687
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
688
- }, {})
689
- }, {});
690
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
691
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
692
- 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`], {
693
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
694
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
695
- 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`]]], {
696
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
697
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
698
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
699
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
700
- }, {}),
701
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
702
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
703
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
704
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
705
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
706
- }, {}),
707
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
708
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
709
- }, {})],
710
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
711
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
712
- }, {})
713
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
714
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
715
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
716
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
717
- }, {})],
718
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
719
- }, {})
720
- }, {});
103
+ yield eatMatch(m`selfClosingTagToken: <*Punctuator '/' />`);
104
+ yield eat(m`close: <*Punctuator '>' { balancer: true } />`);
721
105
  }
722
106
  *CloseNodeMatcher() {
723
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
724
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
725
- 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`], {
726
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
727
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
728
- 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`]]], {
729
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
730
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
731
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
732
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
733
- }, {}),
734
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
735
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
736
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
737
- content: _t.node(_l.CSTML, "Content", [_t.lit("</")], {}, {}),
738
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
739
- }, {}),
740
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
741
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
742
- mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
743
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
744
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
745
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
746
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
747
- }, {})
748
- }, {})],
749
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
750
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
751
- }, {})
752
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
753
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
754
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
755
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
756
- }, {})],
757
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
758
- }, {})
759
- }, {});
760
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
761
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
762
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
763
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
764
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
765
- 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`], {
766
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
767
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
768
- type: _t.s_node(_l.Spamex, "Identifier", "TagType"),
769
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
770
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
771
- }, {})
772
- }, {})],
773
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
774
- }, {})
775
- }, {});
776
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
777
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
778
- 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`], {
779
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
780
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
781
- 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`]]], {
782
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
783
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
784
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
785
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
786
- }, {}),
787
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
788
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
789
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
790
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
791
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
792
- }, {}),
793
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
794
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
795
- }, {})],
796
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
797
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
798
- }, {})
799
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
800
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
801
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
802
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
803
- }, {})],
804
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
805
- }, {})
806
- }, {});
807
- }
808
- *Attributes() {
809
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
810
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
811
- 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`]]], {
812
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
813
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
814
- 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`], {
815
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
816
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
817
- type: _t.s_node(_l.Spamex, "Identifier", "List"),
818
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
819
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
820
- }, {})
821
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
822
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
823
- }, {}), _t.node(_l.Instruction, "Object", [9, [[_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`closeToken`]]], {
824
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "{"),
825
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
826
- key: _t.node(_l.Instruction, "Literal", [_t.lit("element")], {}, {}),
827
- mapToken: _t.s_i_node(_l.Instruction, "Punctuator", ":"),
828
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
829
- 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`], {
830
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
831
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
832
- type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
833
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
834
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
835
- }, {})
836
- }, {})
837
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
838
- key: _t.node(_l.Instruction, "Literal", [_t.lit("allowTrailingSeparator")], {}, {}),
839
- mapToken: _t.s_i_node(_l.Instruction, "Punctuator", ":"),
840
- value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
841
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "false")
842
- }, {})
843
- }, {})],
844
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "}")
845
- }, {})],
846
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
847
- }, {})
848
- }, {});
849
- }
850
- *Attribute() {
851
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
852
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
853
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
854
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
855
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
856
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
857
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
858
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
859
- element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
860
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
861
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
862
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
863
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
864
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
865
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
866
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
867
- rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
868
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
869
- }, {})],
870
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
871
- }, {
872
- negate: false
873
- }),
874
- value: _t.s_i_node(_l.Regex, "Keyword", "+")
875
- }, {
876
- min: 1,
877
- max: Infinity,
878
- greedy: true
879
- }), _t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
880
- element: _t.node(_l.Regex, "SpaceCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
881
- escapeToken: _t.s_i_node(_l.Regex, "Punctuator", "\\"),
882
- value: _t.s_i_node(_l.Regex, "Keyword", "s")
883
- }, {}),
884
- value: _t.s_i_node(_l.Regex, "Keyword", "*")
885
- }, {
886
- min: 0,
887
- max: Infinity,
888
- greedy: true
889
- }), _t.node(_l.Regex, "Character", [_t.lit("=")], {}, {})]
890
- }, {})],
891
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
892
- }, {})],
893
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
894
- }, {})
895
- }, {})) {
896
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
897
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
898
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
899
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
900
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
901
- 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`], {
902
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
903
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
904
- type: _t.s_node(_l.Spamex, "Identifier", "MappingAttribute"),
905
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
906
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
907
- }, {})
908
- }, {})],
909
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
910
- }, {})
911
- }, {});
912
- } else {
913
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
914
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
915
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
916
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
917
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
918
- 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`], {
919
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
920
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
921
- type: _t.s_node(_l.Spamex, "Identifier", "BooleanAttribute"),
922
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
923
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
924
- }, {})
925
- }, {})],
926
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
927
- }, {})
928
- }, {});
929
- }
930
- }
931
- *BooleanAttribute() {
932
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
933
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
934
- 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`], {
935
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
936
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
937
- 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`], {
938
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
939
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
940
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
941
- }, {}),
942
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
943
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
944
- type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
945
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
946
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
947
- }, {})
948
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
949
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
950
- content: _t.node(_l.CSTML, "Content", [_t.lit("key")], {}, {}),
951
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
952
- }, {})],
953
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
954
- }, {})
955
- }, {});
956
- }
957
- *MappingAttribute() {
958
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
959
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
960
- 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`], {
961
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
962
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
963
- 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`], {
964
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
965
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
966
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
967
- }, {}),
968
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
969
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
970
- type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
971
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
972
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
973
- }, {})
974
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
975
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
976
- content: _t.node(_l.CSTML, "Content", [_t.lit("key")], {}, {}),
977
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
978
- }, {})],
979
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
980
- }, {})
981
- }, {});
982
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
983
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
984
- 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`], {
985
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
986
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
987
- 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`], {
988
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
989
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
990
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
991
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
992
- }, {}),
993
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
994
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
995
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
996
- content: _t.node(_l.CSTML, "Content", [_t.lit("=")], {}, {}),
997
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
998
- }, {}),
999
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1000
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1001
- }, {})
1002
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1003
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1004
- content: _t.node(_l.CSTML, "Content", [_t.lit("mapOperator")], {}, {}),
1005
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1006
- }, {})],
1007
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1008
- }, {})
1009
- }, {});
1010
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1011
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1012
- 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`], {
1013
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1014
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1015
- 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`], {
1016
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1017
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1018
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
1019
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1020
- type: _t.s_node(_l.Spamex, "Identifier", "AttributeValue"),
1021
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1022
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1023
- }, {})
1024
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1025
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1026
- content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
1027
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1028
- }, {})],
1029
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1030
- }, {})
1031
- }, {});
107
+ yield eat(m`openToken: <*Punctuator '</' { balanced: '>' } />`);
108
+ yield eat(m`closeToken: <*Punctuator '>' { balancer: true } />`);
1032
109
  }
1033
110
  *StringMatcher() {
1034
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1035
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
1036
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1037
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1038
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
1039
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
1040
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
1041
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
1042
- openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
1043
- elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
1044
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
1045
- }, {
1046
- negate: false
1047
- })]
1048
- }, {})],
1049
- closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
1050
- }, {})],
1051
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1052
- }, {})
1053
- }, {})) {
1054
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1055
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1056
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1057
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1058
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1059
- 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`], {
1060
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1061
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1062
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
1063
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1064
- type: _t.s_node(_l.Spamex, "Identifier", "String"),
1065
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1066
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1067
- }, {})
1068
- }, {})],
1069
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1070
- }, {})
1071
- }, {});
111
+ if (yield match(re`/['"]/`)) {
112
+ yield eat(m`<String />`);
1072
113
  } else {
1073
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1074
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1075
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1076
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1077
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1078
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
1079
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1080
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1081
- language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
1082
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1083
- type: _t.s_node(_l.Spamex, "Identifier", "Pattern"),
1084
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1085
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1086
- }, {})
1087
- }, {})],
1088
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1089
- }, {})
1090
- }, {});
114
+ yield eat(m`<Regex />`);
1091
115
  }
1092
116
  }
1093
117
  *String() {
1094
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1095
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1096
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
1097
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1098
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1099
- 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`], {
1100
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1101
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1102
- language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
1103
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1104
- type: _t.s_node(_l.Spamex, "Identifier", "String"),
1105
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1106
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1107
- }, {})
1108
- }, {})],
1109
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1110
- }, {})
1111
- }, {});
118
+ yield eat(m`<JSON:String />`, null, o({
119
+ suppressNode: true
120
+ }));
1112
121
  }
1113
122
  *Regex() {
1114
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1115
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1116
- 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`], {
1117
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1118
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1119
- 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`]]], {
1120
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1121
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
1122
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
1123
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
1124
- }, {}),
1125
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1126
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1127
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1128
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
1129
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1130
- }, {}),
1131
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
1132
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
1133
- mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
1134
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1135
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1136
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
1137
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1138
- }, {})
1139
- }, {})],
1140
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1141
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1142
- }, {})
1143
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1144
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1145
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
1146
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1147
- }, {})],
1148
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1149
- }, {})
1150
- }, {});
1151
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1152
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1153
- 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`], {
1154
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1155
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1156
- 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`], {
1157
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1158
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1159
- language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
1160
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1161
- type: _t.s_node(_l.Spamex, "Identifier", "Alternatives"),
1162
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1163
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1164
- }, {})
1165
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1166
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1167
- content: _t.node(_l.CSTML, "Content", [_t.lit("alternatives[]")], {}, {}),
1168
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1169
- }, {})],
1170
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1171
- }, {})
1172
- }, {});
1173
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1174
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1175
- arguments: _t.node(_l.Instruction, "Tuple", [_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`], {
1176
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1177
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1178
- 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`]]], {
1179
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1180
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
1181
- intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
1182
- tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
1183
- }, {}),
1184
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1185
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1186
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1187
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
1188
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1189
- }, {}),
1190
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
1191
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
1192
- }, {})],
1193
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1194
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1195
- }, {})
1196
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1197
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1198
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
1199
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1200
- }, {})],
1201
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1202
- }, {})
1203
- }, {});
1204
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1205
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1206
- 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`], {
1207
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
1208
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1209
- 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`], {
1210
- openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
1211
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1212
- language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
1213
- namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
1214
- type: _t.s_node(_l.Spamex, "Identifier", "Flags"),
1215
- selfClosingTagToken: _t.s_i_node(_l.Spamex, "Punctuator", "/"),
1216
- closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
1217
- }, {})
1218
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1219
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
1220
- content: _t.node(_l.CSTML, "Content", [_t.lit("flags")], {}, {}),
1221
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
1222
- }, {})],
1223
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
1224
- }, {})
1225
- }, {});
123
+ yield eat(m`<Regex:Pattern />`, null, o({
124
+ suppressNode: true
125
+ }));
1226
126
  }
1227
127
  List() {}
1228
128
  Punctuator() {}