@bablr/language-en-spamex 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/grammar.js CHANGED
@@ -1,24 +1,25 @@
1
1
  /* @macrome
2
2
  * @generatedby @bablr/macrome-generator-bablr
3
- * @generatedfrom ./grammar.macro.js#504bb9fbdbabe4d9286f5687e8ce2e2d71e82fa2
3
+ * @generatedfrom ./grammar.macro.js#9ab9bbc4fe3575128046794948beb9a3e1ef7178
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, _MatcherDecs, _NodeMatcherDecs, _CloseNodeMatcherDecs, _BooleanAttributeDecs, _MappingAttributeDecs, _StringMatcherDecs, _StringDecs, _RegexDecs, _ListDecs, _PunctuatorDecs, _AnyDecs;
12
- import { Node, CoveredBy, InjectFrom, UnboundAttributes } 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, Literal } from '@bablr/helpers/decorators';
13
11
  import * as productions from '@bablr/helpers/productions';
12
+ import { eat, eatMatch, match, 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,1057 +27,98 @@ const {
26
27
  } = CSTML;
27
28
  export const grammar = class SpamexGrammar {
28
29
  static {
29
- [_initProto] = _applyDecs(this, [[_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 = [UnboundAttributes(['true']), Node, CoveredBy('Attribute')], _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), "Matcher")]() {
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", [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`]]], {
38
- openToken: _t.s_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_node(_l.Spamex, "Punctuator", "<"),
42
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
43
- type: _t.s_node(_l.Spamex, "Identifier", "Any"),
44
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
45
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
46
- }, {})
47
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
48
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
49
- }, {}), _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`]]], {
50
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
51
- elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
52
- 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`], {
53
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
54
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
55
- type: _t.s_node(_l.Spamex, "Identifier", "NodeMatcher"),
56
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
57
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
58
- content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
59
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
60
- }, {}),
61
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
62
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
63
- }, {})
64
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
65
- 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`]]], {
66
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
67
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
68
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
69
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
70
- }, {}),
71
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
72
- type: _t.s_node(_l.CSTML, "Identifier", "String"),
73
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
74
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
75
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
76
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
77
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
78
- elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
79
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
80
- }, {
81
- negate: false
82
- })]
83
- }, {})],
84
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
85
- }, {}),
86
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
87
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
88
- }, {})
89
- }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
90
- 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`]]], {
91
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
92
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
93
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
94
- segments: [_t.s_node(_l.CSTML, "Identifier", "Regex")]
95
- }, {}),
96
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
97
- type: _t.s_node(_l.CSTML, "Identifier", "Pattern"),
98
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
99
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
100
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
101
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
102
- }, {}),
103
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
104
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
105
- }, {})
106
- }, {})],
107
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
108
- }, {})],
109
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
110
- }, {})
111
- }, {});
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 = [Literal, Node, InjectFrom(productions)], _AnyDecs = InjectFrom(productions), "Matcher")]() {
36
+ yield eat(m`<_Any />`, [m`<PropertyMatcher /[a-zA-Z.@#<]/ />`, m`<__StringMatcher /[/'"]/ />`]);
112
37
  }
113
38
  *NodeMatcher() {
114
- let open = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
115
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
116
- 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`], {
117
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
118
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
119
- 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`], {
120
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
121
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
122
- type: _t.s_node(_l.Spamex, "Identifier", "OpenNodeMatcher"),
123
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
124
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
125
- }, {})
126
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
127
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
128
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
129
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
130
- }, {})],
131
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
132
- }, {})
133
- }, {});
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 />`);
134
75
  const selfClosing = notNull(open.get('selfClosingTagToken'));
135
76
  if (selfClosing) {
136
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
137
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
138
- 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`], {
139
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
140
- values: [_t.node(_l.Instruction, "Array", [_t.ref`openToken`, _t.ref`closeToken`], {
141
- openToken: _t.s_node(_l.Instruction, "Punctuator", "["),
142
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "]")
143
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
144
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
145
- content: _t.node(_l.CSTML, "Content", [_t.lit("children[]$")], {}, {}),
146
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
147
- }, {})],
148
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
149
- }, {})
150
- }, {});
151
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
152
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
153
- 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`], {
154
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
155
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
156
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
157
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
158
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
159
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
160
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
161
- }, {})],
162
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
163
- }, {})
164
- }, {});
77
+ yield eat(m`children[]$: []`);
78
+ yield eat(m`close: null`);
165
79
  } else {
166
80
  // TODO
167
81
  yield* eatMatchTrivia();
168
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
169
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
170
- 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`], {
171
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
172
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
173
- 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`], {
174
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
175
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
176
- type: _t.s_node(_l.Spamex, "Identifier", "CloseNodeMatcher"),
177
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
178
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
179
- }, {})
180
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
181
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
182
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
183
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
184
- }, {})],
185
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
186
- }, {})
187
- }, {});
82
+ yield eat(m`close: <CloseNodeMatcher />`);
188
83
  }
189
84
  }
190
85
  *OpenNodeMatcher() {
191
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
192
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
193
- 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`], {
194
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
195
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
196
- 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`]]], {
197
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
198
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
199
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
200
- }, {}),
201
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
202
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
203
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
204
- content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
205
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
206
- }, {}),
207
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
208
- key: _t.s_node(_l.Spamex, "Identifier", "balancedSpan"),
209
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
210
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
211
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
212
- content: _t.node(_l.CSTML, "Content", [_t.lit("Tag")], {}, {}),
213
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
214
- }, {})
215
- }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
216
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
217
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
218
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
219
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
220
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
221
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
222
- }, {})
223
- }, {})],
224
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
225
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
226
- }, {})
227
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
228
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
229
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
230
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
231
- }, {})],
232
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
233
- }, {})
234
- }, {});
235
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
236
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
237
- 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`], {
238
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
239
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
240
- 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`], {
241
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
242
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
243
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
244
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
245
- }, {}),
246
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
247
- type: _t.s_node(_l.CSTML, "Identifier", "Flags"),
248
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
249
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
250
- }, {})
251
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
252
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
253
- content: _t.node(_l.CSTML, "Content", [_t.lit("flags")], {}, {}),
254
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
255
- }, {})],
256
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
257
- }, {})
258
- }, {});
259
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
260
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
261
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
262
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
263
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
264
- 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`]]], {
265
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
266
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
267
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
268
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
269
- }, {}),
270
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
271
- type: _t.s_node(_l.CSTML, "Identifier", "TagType"),
272
- intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
273
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
274
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
275
- elements: [_t.node(_l.Regex, "CharacterClass", [9, [[_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`closeToken`]]], {
276
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
277
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
278
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
279
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
280
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
281
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
282
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
283
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
284
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
285
- }, {}), _t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {}), _t.node(_l.Regex, "Gap", [_t.ref`escapeToken`, _t.ref`value`], {
286
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
287
- value: _t.s_node(_l.Regex, "Keyword", "g")
288
- }, {})],
289
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
290
- }, {
291
- negate: false
292
- })]
293
- }, {})],
294
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
295
- }, {}),
296
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
297
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
298
- }, {})
299
- }, {})],
300
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
301
- }, {})
302
- }, {})) {
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]/ />`)) {
303
89
  // continue
304
- } else if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
305
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
306
- 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`], {
307
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
308
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
309
- 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`], {
310
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
311
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
312
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
313
- }, {}),
314
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
315
- 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`]]], {
316
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
317
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
318
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
319
- element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
320
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
321
- 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")], {}, {
322
- cooked: "\t"
323
- }))], {}, {})],
324
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
325
- }, {
326
- negate: false
327
- }),
328
- value: _t.s_node(_l.Regex, "Keyword", "+")
329
- }, {
330
- min: 1,
331
- max: Infinity,
332
- greedy: true
333
- })]
334
- }, {}), _t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
335
- elements: [_t.node(_l.Regex, "Character", [_t.lit("?")], {}, {})]
336
- }, {})],
337
- separators: [_t.s_node(_l.Regex, "Punctuator", "|")],
338
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
339
- }, {}),
340
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
341
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
342
- }, {})
343
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
344
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
345
- content: _t.node(_l.CSTML, "Content", [_t.lit("type$")], {}, {}),
346
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
347
- }, {})],
348
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
349
- }, {})
350
- }, {})) {
90
+ } else if (yield eatMatch(m`type$: <*Punctuator /[ \t]+|?/ />`)) {
351
91
  // continue
92
+ } else {
93
+ yield fail();
352
94
  }
353
95
  let sp = yield* eatMatchTrivia();
354
- if (sp && !(yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
355
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
356
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
357
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
358
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
359
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
360
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
361
- elements: [_t.node(_l.Regex, "Character", [_t.embedded(_t.s_e_node(_l.Regex, "Escape", [_t.lit("\\/")], {}, {
362
- cooked: "/"
363
- }))], {}, {}), _t.node(_l.Regex, "EndOfInputAssertion", [_t.ref`sigilToken`], {
364
- sigilToken: _t.s_node(_l.Regex, "Keyword", "$")
365
- }, {})]
366
- }, {})],
367
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
368
- }, {})],
369
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
370
- }, {})
371
- }, {})) && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
372
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
373
- 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`], {
374
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
375
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
376
- 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`], {
377
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
378
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
379
- type: _t.s_node(_l.Spamex, "Identifier", "StringMatcher"),
380
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
381
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
382
- }, {})
383
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
384
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
385
- content: _t.node(_l.CSTML, "Content", [_t.lit("intrinsicValue$")], {}, {}),
386
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
387
- }, {})],
388
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
389
- }, {})
390
- }, {}))) {
96
+ if (sp && !(yield match(re`/\/$/`)) && (yield eatMatch(m`intrinsicValue$: <__StringMatcher />`))) {
391
97
  sp = yield* eatMatchTrivia();
392
98
  }
393
- while (sp && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
394
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
395
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
396
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
397
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
398
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
399
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`], {
400
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
401
- element: _t.node(_l.Regex, "Character", [_t.lit("!")], {}, {}),
402
- value: _t.s_node(_l.Regex, "Keyword", "?")
403
- }, {
404
- min: 0,
405
- max: 1,
406
- greedy: true
407
- }), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
408
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
409
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
410
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
411
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
412
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
413
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
414
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
415
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
416
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
417
- }, {})],
418
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
419
- }, {
420
- negate: false
421
- })]
422
- }, {})],
423
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
424
- }, {})],
425
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
426
- }, {})
427
- }, {}))) {
428
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
429
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
430
- arguments: _t.node(_l.Instruction, "Tuple", [_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`], {
431
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
432
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
433
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
434
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
435
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
436
- type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
437
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
438
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
439
- }, {})
440
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
441
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
442
- content: _t.node(_l.CSTML, "Content", [_t.lit("attributes[]")], {}, {}),
443
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
444
- }, {})],
445
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
446
- }, {})
447
- }, {});
99
+ while (sp && (yield match('{'))) {
100
+ yield eat(m`attributes: <JSON:Object />`);
448
101
  sp = yield* eatMatchTrivia();
449
102
  }
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_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`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
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
470
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
471
- content: _t.node(_l.CSTML, "Content", [_t.lit("selfClosingTagToken")], {}, {}),
472
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
473
- }, {})],
474
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
475
- }, {})
476
- }, {});
477
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
478
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
479
- 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`], {
480
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
481
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
482
- 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`]]], {
483
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
484
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
485
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
486
- }, {}),
487
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
488
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
489
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
490
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
491
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
492
- }, {}),
493
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
494
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
495
- }, {})],
496
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
497
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
498
- }, {})
499
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
500
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
501
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
502
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
503
- }, {})],
504
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
505
- }, {})
506
- }, {});
103
+ yield eatMatch(m`selfClosingTagToken: <*Punctuator '/' />`);
104
+ yield eat(m`close: <*Punctuator '>' { balancer: true } />`);
507
105
  }
508
106
  *CloseNodeMatcher() {
509
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
510
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
511
- 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`], {
512
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
513
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
514
- 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`]]], {
515
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
516
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
517
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
518
- }, {}),
519
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
520
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
521
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
522
- content: _t.node(_l.CSTML, "Content", [_t.lit("</")], {}, {}),
523
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
524
- }, {}),
525
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
526
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
527
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
528
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
529
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
530
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
531
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
532
- }, {})
533
- }, {})],
534
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
535
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
536
- }, {})
537
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
538
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
539
- content: _t.node(_l.CSTML, "Content", [_t.lit("openToken")], {}, {}),
540
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
541
- }, {})],
542
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
543
- }, {})
544
- }, {});
545
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
546
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
547
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
548
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
549
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
550
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.node(_l.Spamex, "Space", [_t.lit(" ")], {}, {})), _t.ref`selfClosingTagToken`, _t.ref`closeToken`], {
551
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
552
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
553
- type: _t.s_node(_l.Spamex, "Identifier", "TagType"),
554
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
555
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
556
- }, {})
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", [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`]]], {
567
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
568
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
569
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
570
- }, {}),
571
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
572
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
573
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
574
- content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
575
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
576
- }, {}),
577
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
578
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
579
- }, {})],
580
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
581
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
582
- }, {})
583
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
584
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
585
- content: _t.node(_l.CSTML, "Content", [_t.lit("closeToken")], {}, {}),
586
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
587
- }, {})],
588
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
589
- }, {})
590
- }, {});
591
- }
592
- *Attributes() {
593
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
594
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
595
- 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`]]], {
596
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
597
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
598
- 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`], {
599
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
600
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
601
- type: _t.s_node(_l.Spamex, "Identifier", "List"),
602
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
603
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
604
- }, {})
605
- }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
606
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "null")
607
- }, {}), _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`]]], {
608
- openToken: _t.s_node(_l.Instruction, "Punctuator", "{"),
609
- properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
610
- key: _t.node(_l.Instruction, "Literal", [_t.lit("element")], {}, {}),
611
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
612
- value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
613
- 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`], {
614
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
615
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
616
- type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
617
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
618
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
619
- }, {})
620
- }, {})
621
- }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
622
- key: _t.node(_l.Instruction, "Literal", [_t.lit("allowTrailingSeparator")], {}, {}),
623
- mapToken: _t.s_node(_l.Instruction, "Punctuator", ":"),
624
- value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
625
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "false")
626
- }, {})
627
- }, {})],
628
- closeToken: _t.s_node(_l.Instruction, "Punctuator", "}")
629
- }, {})],
630
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
631
- }, {})
632
- }, {});
633
- }
634
- *Attribute() {
635
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
636
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
637
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
638
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
639
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
640
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
641
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
642
- elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
643
- element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
644
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
645
- elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
646
- min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
647
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
648
- max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
649
- }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
650
- min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
651
- rangeToken: _t.s_node(_l.Regex, "Punctuator", "-"),
652
- max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
653
- }, {})],
654
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
655
- }, {
656
- negate: false
657
- }),
658
- value: _t.s_node(_l.Regex, "Keyword", "+")
659
- }, {
660
- min: 1,
661
- max: Infinity,
662
- greedy: true
663
- }), _t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
664
- element: _t.node(_l.Regex, "SpaceCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
665
- escapeToken: _t.s_node(_l.Regex, "Punctuator", "\\"),
666
- value: _t.s_node(_l.Regex, "Keyword", "s")
667
- }, {}),
668
- value: _t.s_node(_l.Regex, "Keyword", "*")
669
- }, {
670
- min: 0,
671
- max: Infinity,
672
- greedy: true
673
- }), _t.node(_l.Regex, "Character", [_t.lit("=")], {}, {})]
674
- }, {})],
675
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
676
- }, {})],
677
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
678
- }, {})
679
- }, {})) {
680
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
681
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
682
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
683
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
684
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
685
- 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`], {
686
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
687
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
688
- type: _t.s_node(_l.Spamex, "Identifier", "MappingAttribute"),
689
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
690
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
691
- }, {})
692
- }, {})],
693
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
694
- }, {})
695
- }, {});
696
- } else {
697
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
698
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
699
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
700
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
701
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
702
- 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`], {
703
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
704
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
705
- type: _t.s_node(_l.Spamex, "Identifier", "BooleanAttribute"),
706
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
707
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
708
- }, {})
709
- }, {})],
710
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
711
- }, {})
712
- }, {});
713
- }
714
- }
715
- *BooleanAttribute() {
716
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
717
- verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
718
- 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`], {
719
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
720
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
721
- 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`], {
722
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
723
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
724
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
725
- }, {}),
726
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
727
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
728
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
729
- content: _t.node(_l.CSTML, "Content", [_t.lit("!")], {}, {}),
730
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
731
- }, {}),
732
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
733
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
734
- }, {})
735
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
736
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
737
- content: _t.node(_l.CSTML, "Content", [_t.lit("negateToken")], {}, {}),
738
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
739
- }, {})],
740
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
741
- }, {})
742
- }, {})) {
743
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
744
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
745
- 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`], {
746
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
747
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
748
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
749
- content: _t.node(_l.CSTML, "Content", [_t.lit("true")], {}, {}),
750
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
751
- }, {}), _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
752
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "false")
753
- }, {})],
754
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
755
- }, {})
756
- }, {});
757
- } else {
758
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
759
- verb: _t.s_node(_l.Instruction, "Identifier", "bindAttribute"),
760
- 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`], {
761
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
762
- values: [_t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
763
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
764
- content: _t.node(_l.CSTML, "Content", [_t.lit("true")], {}, {}),
765
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
766
- }, {}), _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
767
- sigilToken: _t.s_node(_l.Instruction, "Keyword", "true")
768
- }, {})],
769
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
770
- }, {})
771
- }, {});
772
- }
773
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
774
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
775
- 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`], {
776
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
777
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
778
- 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`], {
779
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
780
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
781
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
782
- }, {}),
783
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
784
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
785
- }, {}),
786
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
787
- type: _t.s_node(_l.CSTML, "Identifier", "Identifier"),
788
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
789
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
790
- }, {})
791
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
792
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
793
- content: _t.node(_l.CSTML, "Content", [_t.lit("key$")], {}, {}),
794
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
795
- }, {})],
796
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
797
- }, {})
798
- }, {});
799
- }
800
- *MappingAttribute() {
801
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
802
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
803
- 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`], {
804
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
805
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
806
- 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`], {
807
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
808
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
809
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
810
- }, {}),
811
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
812
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
813
- }, {}),
814
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
815
- type: _t.s_node(_l.CSTML, "Identifier", "Identifier"),
816
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
817
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
818
- }, {})
819
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
820
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
821
- content: _t.node(_l.CSTML, "Content", [_t.lit("key$")], {}, {}),
822
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
823
- }, {})],
824
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
825
- }, {})
826
- }, {});
827
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
828
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
829
- 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`], {
830
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
831
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
832
- 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`], {
833
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
834
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
835
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
836
- }, {}),
837
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
838
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
839
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
840
- content: _t.node(_l.CSTML, "Content", [_t.lit("=")], {}, {}),
841
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
842
- }, {}),
843
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
844
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
845
- }, {})
846
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
847
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
848
- content: _t.node(_l.CSTML, "Content", [_t.lit("mapOperator")], {}, {}),
849
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
850
- }, {})],
851
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
852
- }, {})
853
- }, {});
854
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
855
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
856
- 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`], {
857
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
858
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
859
- 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`], {
860
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
861
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
862
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
863
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
864
- }, {}),
865
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
866
- type: _t.s_node(_l.CSTML, "Identifier", "AttributeValue"),
867
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
868
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
869
- }, {})
870
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
871
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
872
- content: _t.node(_l.CSTML, "Content", [_t.lit("value$")], {}, {}),
873
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
874
- }, {})],
875
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
876
- }, {})
877
- }, {});
107
+ yield eat(m`openToken: <*Punctuator '</' { balanced: '>' } />`);
108
+ yield eat(m`closeToken: <*Punctuator '>' { balancer: true } />`);
878
109
  }
879
110
  *StringMatcher() {
880
- if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
881
- verb: _t.s_node(_l.Instruction, "Identifier", "match"),
882
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
883
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
884
- values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.arr(), _t.ref`alternatives[]`, _t.ref`closeToken`], {
885
- openToken: _t.s_node(_l.Regex, "Punctuator", "/"),
886
- alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.arr(), _t.ref`elements[]`], {
887
- elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.arr(), _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
888
- openToken: _t.s_node(_l.Regex, "Punctuator", "["),
889
- elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
890
- closeToken: _t.s_node(_l.Regex, "Punctuator", "]")
891
- }, {
892
- negate: false
893
- })]
894
- }, {})],
895
- closeToken: _t.s_node(_l.Regex, "Punctuator", "/")
896
- }, {})],
897
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
898
- }, {})
899
- }, {})) {
900
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
901
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
902
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
903
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
904
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
905
- 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`], {
906
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
907
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
908
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
909
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
910
- }, {}),
911
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
912
- type: _t.s_node(_l.CSTML, "Identifier", "String"),
913
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
914
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
915
- }, {})
916
- }, {})],
917
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
918
- }, {})
919
- }, {});
111
+ if (yield match(re`/['"]/`)) {
112
+ yield eat(m`<String />`);
920
113
  } else {
921
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
922
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
923
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
924
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
925
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
926
- 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`], {
927
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
928
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
929
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
930
- segments: [_t.s_node(_l.CSTML, "Identifier", "Regex")]
931
- }, {}),
932
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
933
- type: _t.s_node(_l.CSTML, "Identifier", "Pattern"),
934
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
935
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
936
- }, {})
937
- }, {})],
938
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
939
- }, {})
940
- }, {});
114
+ yield eat(m`<Regex />`);
941
115
  }
942
116
  }
943
117
  *String() {
944
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
945
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
946
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.ref`closeToken`], {
947
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
948
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
949
- 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`], {
950
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
951
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
952
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
953
- segments: [_t.s_node(_l.CSTML, "Identifier", "CSTML")]
954
- }, {}),
955
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
956
- type: _t.s_node(_l.CSTML, "Identifier", "String"),
957
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
958
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
959
- }, {})
960
- }, {})],
961
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
962
- }, {})
963
- }, {});
118
+ yield eat(m`<_JSON:String />`);
964
119
  }
965
120
  *Regex() {
966
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
967
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
968
- 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`], {
969
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
970
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
971
- 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`]]], {
972
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
973
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
974
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
975
- }, {}),
976
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
977
- intrinsicValue: _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("/")], {}, {}),
980
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
981
- }, {}),
982
- attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
983
- key: _t.s_node(_l.Spamex, "Identifier", "balanced"),
984
- mapToken: _t.s_node(_l.Spamex, "Punctuator", "="),
985
- value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
986
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
987
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
988
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
989
- }, {})
990
- }, {})],
991
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
992
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
993
- }, {})
994
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
995
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
996
- content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
997
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
998
- }, {})],
999
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1000
- }, {})
1001
- }, {});
1002
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1003
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1004
- 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`], {
1005
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1006
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1007
- 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`], {
1008
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1009
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1010
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
1011
- segments: [_t.s_node(_l.CSTML, "Identifier", "Regex")]
1012
- }, {}),
1013
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
1014
- type: _t.s_node(_l.CSTML, "Identifier", "Alternatives"),
1015
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1016
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1017
- }, {})
1018
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1019
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1020
- content: _t.node(_l.CSTML, "Content", [_t.lit("alternatives[]$")], {}, {}),
1021
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1022
- }, {})],
1023
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1024
- }, {})
1025
- }, {});
1026
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1027
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1028
- 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`], {
1029
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1030
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1031
- open: _t.node(_l.Spamex, "OpenNodeMatcher", [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`]]], {
1032
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1033
- flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
1034
- tokenToken: _t.s_node(_l.CSTML, "Punctuator", "*")
1035
- }, {}),
1036
- type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
1037
- intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1038
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1039
- content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
1040
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1041
- }, {}),
1042
- attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
1043
- key: _t.s_node(_l.Spamex, "Identifier", "balancer")
1044
- }, {})],
1045
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1046
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1047
- }, {})
1048
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1049
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1050
- content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
1051
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1052
- }, {})],
1053
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1054
- }, {})
1055
- }, {});
1056
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
1057
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
1058
- 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`], {
1059
- openToken: _t.s_node(_l.Instruction, "Punctuator", "("),
1060
- values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`open`], {
1061
- 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`], {
1062
- openToken: _t.s_node(_l.Spamex, "Punctuator", "<"),
1063
- flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
1064
- language: _t.node(_l.CSTML, "IdentifierPath", [_t.ref`segments[]`, _t.arr(), _t.ref`segments[]`], {
1065
- segments: [_t.s_node(_l.CSTML, "Identifier", "Regex")]
1066
- }, {}),
1067
- namespaceSeparatorToken: _t.s_node(_l.CSTML, "Punctuator", ":"),
1068
- type: _t.s_node(_l.CSTML, "Identifier", "Flags"),
1069
- selfClosingTagToken: _t.s_node(_l.Spamex, "Punctuator", "/"),
1070
- closeToken: _t.s_node(_l.Spamex, "Punctuator", ">")
1071
- }, {})
1072
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
1073
- openToken: _t.s_node(_l.CSTML, "Punctuator", "'"),
1074
- content: _t.node(_l.CSTML, "Content", [_t.lit("flags$")], {}, {}),
1075
- closeToken: _t.s_node(_l.CSTML, "Punctuator", "'")
1076
- }, {})],
1077
- closeToken: _t.s_node(_l.Instruction, "Punctuator", ")")
1078
- }, {})
1079
- }, {});
121
+ yield eat(m`<_Regex:Pattern />`);
1080
122
  }
1081
123
  List() {}
1082
124
  Punctuator() {}