@bablr/language-en-spamex 0.3.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023 Conrad Buck
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @bablr/language-en-spamex
2
+
3
+ A BABLR language for match spamex: Structural Pattern Matcher Expressions
package/lib/grammar.js ADDED
@@ -0,0 +1,787 @@
1
+ /* @macrome
2
+ * @generatedby @bablr/macrome-generator-bablr
3
+ * @generatedfrom ./grammar.macro.js#6b39cdf5f891cd30ee8febf0552c121fa76a3c6a
4
+ * This file is autogenerated. Please do not edit it directly.
5
+ * When editing run `npx macrome watch` then change the file this is generated from.
6
+ */
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, _BooleanAttributeDecs, _MappingAttributeDecs, _StringMatcherDecs, _StringDecs, _RegexDecs, _ListDecs, _PunctuatorDecs, _AnyDecs;
12
+ import { Node, CoveredBy, InjectFrom } from '@bablr/helpers/decorators';
13
+ import * as productions from '@bablr/helpers/productions';
14
+ import * as Regex from '@bablr/language-en-regex-vm-pattern';
15
+ import * as CSTML from '@bablr/language-en-cstml';
16
+ import * as Space from '@bablr/language-en-blank-space';
17
+ export const canonicalURL = 'https://bablr.org/languages/core/en/spamex';
18
+ export const dependencies = {
19
+ Regex,
20
+ CSTML,
21
+ Space
22
+ };
23
+ const {
24
+ eatMatchTrivia
25
+ } = CSTML;
26
+ export const grammar = class SpamexGrammar {
27
+ static {
28
+ [_initProto] = _applyDecs(this, [[_MatcherDecs, 2, "Matcher"], [_NodeMatcherDecs, 2, "NodeMatcher"], [_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;
29
+ }
30
+ constructor() {
31
+ _initProto(this);
32
+ }
33
+ *[(_MatcherDecs = CoveredBy('Expression'), _NodeMatcherDecs = [CoveredBy('Matcher'), CoveredBy('Expression'), Node], _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), "Matcher")]() {
34
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
35
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
36
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
37
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
38
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
39
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
40
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
41
+ type: _t.s_node(_l.Spamex, "Identifier", "Any"),
42
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
43
+ }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
44
+ sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
45
+ }, {}), _t.node(_l.Instruction, "Array", [_t.ref`openToken`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`elements[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`], {
46
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "["),
47
+ elements: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.ref`closeToken`], {
48
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
49
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
50
+ type: _t.s_node(_l.Spamex, "Identifier", "NodeMatcher"),
51
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
52
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
53
+ content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
54
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
55
+ }, {}),
56
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
57
+ }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.ref`closeToken`], {
58
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
59
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
60
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
61
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
62
+ type: _t.s_node(_l.Spamex, "Identifier", "String"),
63
+ intrinsicValue: _t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.ref`closeToken`], {
64
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
65
+ alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`], {
66
+ elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
67
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
68
+ elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
69
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
70
+ }, {
71
+ negate: false
72
+ })]
73
+ }, {})],
74
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
75
+ }, {}),
76
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
77
+ }, {}), _t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.ref`closeToken`], {
78
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
79
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
80
+ language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
81
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
82
+ type: _t.s_node(_l.Spamex, "Identifier", "Pattern"),
83
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
84
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
85
+ content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
86
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
87
+ }, {}),
88
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
89
+ }, {})],
90
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "]")
91
+ }, {})],
92
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
93
+ }, {})
94
+ }, {});
95
+ }
96
+ *NodeMatcher() {
97
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
98
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
99
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
100
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
101
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.ref`closeToken`], {
102
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
103
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
104
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
105
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
106
+ }, {}),
107
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
108
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
109
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
110
+ content: _t.node(_l.CSTML, "Content", [_t.lit("<")], {}, {}),
111
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
112
+ }, {}),
113
+ attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
114
+ key: _t.node(_l.Spamex, "Literal", [_t.lit("balancedSpan")], {}, {}),
115
+ mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
116
+ value: _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("Tag")], {}, {}),
119
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
120
+ }, {})
121
+ }, {}), _t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
122
+ key: _t.node(_l.Spamex, "Literal", [_t.lit("balanced")], {}, {}),
123
+ mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
124
+ value: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
125
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
126
+ content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
127
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
128
+ }, {})
129
+ }, {})],
130
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
131
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
132
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
133
+ content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
134
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
135
+ }, {})],
136
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
137
+ }, {})
138
+ }, {});
139
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
140
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
141
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
142
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
143
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
144
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
145
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
146
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
147
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
148
+ type: _t.s_node(_l.Spamex, "Identifier", "Flags"),
149
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
150
+ }, {})],
151
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
152
+ }, {})
153
+ }, {});
154
+ if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
155
+ verb: _t.s_node(_l.Instruction, "Identifier", "match"),
156
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
157
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
158
+ values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.ref`closeToken`], {
159
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
160
+ alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.ref`elements[]`], {
161
+ elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
162
+ element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
163
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
164
+ elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
165
+ min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
166
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
167
+ max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
168
+ }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
169
+ min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
170
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
171
+ max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
172
+ }, {})],
173
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
174
+ }, {
175
+ negate: false
176
+ }),
177
+ value: _t.s_i_node(_l.Regex, "Keyword", "+")
178
+ }, {
179
+ min: 1,
180
+ max: Infinity,
181
+ greedy: true
182
+ }), _t.node(_l.Regex, "Character", [_t.lit(":")], {}, {})]
183
+ }, {})],
184
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
185
+ }, {})],
186
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
187
+ }, {})
188
+ }, {})) {
189
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
190
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
191
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
192
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
193
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
194
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
195
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
196
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
197
+ }, {}),
198
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
199
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
200
+ type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
201
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
202
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
203
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
204
+ content: _t.node(_l.CSTML, "Content", [_t.lit("language")], {}, {}),
205
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
206
+ }, {})],
207
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
208
+ }, {})
209
+ }, {});
210
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
211
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
212
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
213
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
214
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.ref`closeToken`], {
215
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
216
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
217
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
218
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
219
+ }, {}),
220
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
221
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
222
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
223
+ content: _t.node(_l.CSTML, "Content", [_t.lit(":")], {}, {}),
224
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
225
+ }, {}),
226
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
227
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
228
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
229
+ content: _t.node(_l.CSTML, "Content", [_t.lit("namespaceOperator")], {}, {}),
230
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
231
+ }, {})],
232
+ closeToken: _t.s_i_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.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
238
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
239
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
240
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
241
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
242
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
243
+ }, {}),
244
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
245
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
246
+ type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
247
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
248
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
249
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
250
+ content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
251
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
252
+ }, {})],
253
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
254
+ }, {})
255
+ }, {});
256
+ } else {
257
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
258
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
259
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
260
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
261
+ values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
262
+ sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
263
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
264
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
265
+ content: _t.node(_l.CSTML, "Content", [_t.lit("language")], {}, {}),
266
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
267
+ }, {})],
268
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
269
+ }, {})
270
+ }, {});
271
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
272
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
273
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
274
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
275
+ values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
276
+ sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
277
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
278
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
279
+ content: _t.node(_l.CSTML, "Content", [_t.lit("namespaceOperator")], {}, {}),
280
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
281
+ }, {})],
282
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
283
+ }, {})
284
+ }, {});
285
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
286
+ verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
287
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
288
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
289
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
290
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
291
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
292
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
293
+ }, {}),
294
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
295
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
296
+ type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
297
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
298
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
299
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
300
+ content: _t.node(_l.CSTML, "Content", [_t.lit("type")], {}, {}),
301
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
302
+ }, {})],
303
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
304
+ }, {})
305
+ }, {});
306
+ }
307
+ let sp = yield* eatMatchTrivia();
308
+ if (sp && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
309
+ verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
310
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
311
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
312
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
313
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
314
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
315
+ type: _t.s_node(_l.Spamex, "Identifier", "StringMatcher"),
316
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
317
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
318
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
319
+ content: _t.node(_l.CSTML, "Content", [_t.lit("intrinsicValue")], {}, {}),
320
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
321
+ }, {})],
322
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
323
+ }, {})
324
+ }, {}))) {
325
+ sp = yield* eatMatchTrivia();
326
+ }
327
+ while (sp && (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
328
+ verb: _t.s_node(_l.Instruction, "Identifier", "match"),
329
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
330
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
331
+ values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.ref`closeToken`], {
332
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
333
+ alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.ref`elements[]`], {
334
+ elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
335
+ element: _t.node(_l.Regex, "Character", [_t.lit("!")], {}, {}),
336
+ value: _t.s_i_node(_l.Regex, "Keyword", "?")
337
+ }, {
338
+ min: 0,
339
+ max: 1,
340
+ greedy: true
341
+ }), _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
342
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
343
+ elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
344
+ min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
345
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
346
+ max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
347
+ }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
348
+ min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
349
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
350
+ max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
351
+ }, {})],
352
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
353
+ }, {
354
+ negate: false
355
+ })]
356
+ }, {})],
357
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
358
+ }, {})],
359
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
360
+ }, {})
361
+ }, {}))) {
362
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
363
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
364
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
365
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
366
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
367
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
368
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
369
+ type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
370
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
371
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
372
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
373
+ content: _t.node(_l.CSTML, "Content", [_t.lit("attributes[]")], {}, {}),
374
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
375
+ }, {})],
376
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
377
+ }, {})
378
+ }, {});
379
+ sp = yield* eatMatchTrivia();
380
+ }
381
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
382
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
383
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
384
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
385
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.ref`closeToken`], {
386
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
387
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
388
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
389
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
390
+ }, {}),
391
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
392
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
393
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
394
+ content: _t.node(_l.CSTML, "Content", [_t.lit(">")], {}, {}),
395
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
396
+ }, {}),
397
+ attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
398
+ key: _t.node(_l.Spamex, "Literal", [_t.lit("balancer")], {}, {})
399
+ }, {})],
400
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
401
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
402
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
403
+ content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
404
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
405
+ }, {})],
406
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
407
+ }, {})
408
+ }, {});
409
+ }
410
+ *Attributes() {
411
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
412
+ verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
413
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
414
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
415
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
416
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
417
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
418
+ type: _t.s_node(_l.Spamex, "Identifier", "List"),
419
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
420
+ }, {}), _t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
421
+ sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
422
+ }, {}), _t.node(_l.Instruction, "Object", [_t.ref`openToken`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`properties[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`properties[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit("\n ")], {}, {})), _t.ref`closeToken`], {
423
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "{"),
424
+ properties: [_t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
425
+ key: _t.node(_l.Instruction, "Literal", [_t.lit("element")], {}, {}),
426
+ mapToken: _t.s_i_node(_l.Instruction, "Punctuator", ":"),
427
+ value: _t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
428
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
429
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
430
+ type: _t.s_node(_l.Spamex, "Identifier", "Attribute"),
431
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
432
+ }, {})
433
+ }, {}), _t.node(_l.Instruction, "Property", [_t.ref`key`, _t.ref`mapToken`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`value`], {
434
+ key: _t.node(_l.Instruction, "Literal", [_t.lit("allowTrailingSeparator")], {}, {}),
435
+ mapToken: _t.s_i_node(_l.Instruction, "Punctuator", ":"),
436
+ value: _t.node(_l.Instruction, "Boolean", [_t.ref`sigilToken`], {
437
+ sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "false")
438
+ }, {})
439
+ }, {})],
440
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "}")
441
+ }, {})],
442
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
443
+ }, {})
444
+ }, {});
445
+ }
446
+ *Attribute() {
447
+ if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
448
+ verb: _t.s_node(_l.Instruction, "Identifier", "match"),
449
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
450
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
451
+ values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.ref`closeToken`], {
452
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
453
+ alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`, _t.ref`elements[]`, _t.ref`elements[]`], {
454
+ elements: [_t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
455
+ element: _t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
456
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
457
+ elements: [_t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
458
+ min: _t.node(_l.Regex, "Character", [_t.lit("a")], {}, {}),
459
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
460
+ max: _t.node(_l.Regex, "Character", [_t.lit("z")], {}, {})
461
+ }, {}), _t.node(_l.Regex, "CharacterClassRange", [_t.ref`min`, _t.ref`rangeToken`, _t.ref`max`], {
462
+ min: _t.node(_l.Regex, "Character", [_t.lit("A")], {}, {}),
463
+ rangeToken: _t.s_i_node(_l.Regex, "Punctuator", "-"),
464
+ max: _t.node(_l.Regex, "Character", [_t.lit("Z")], {}, {})
465
+ }, {})],
466
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
467
+ }, {
468
+ negate: false
469
+ }),
470
+ value: _t.s_i_node(_l.Regex, "Keyword", "+")
471
+ }, {
472
+ min: 1,
473
+ max: Infinity,
474
+ greedy: true
475
+ }), _t.node(_l.Regex, "Quantifier", [_t.ref`element`, _t.ref`value`], {
476
+ element: _t.node(_l.Regex, "SpaceCharacterSet", [_t.ref`escapeToken`, _t.ref`value`], {
477
+ escapeToken: _t.s_i_node(_l.Regex, "Punctuator", "\\"),
478
+ value: _t.s_i_node(_l.Regex, "Keyword", "s")
479
+ }, {}),
480
+ value: _t.s_i_node(_l.Regex, "Keyword", "*")
481
+ }, {
482
+ min: 0,
483
+ max: Infinity,
484
+ greedy: true
485
+ }), _t.node(_l.Regex, "Character", [_t.lit("=")], {}, {})]
486
+ }, {})],
487
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
488
+ }, {})],
489
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
490
+ }, {})
491
+ }, {})) {
492
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
493
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
494
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
495
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
496
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
497
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
498
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
499
+ type: _t.s_node(_l.Spamex, "Identifier", "MappingAttribute"),
500
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
501
+ }, {})],
502
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
503
+ }, {})
504
+ }, {});
505
+ } else {
506
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
507
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
508
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
509
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
510
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.ref`closeToken`], {
511
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
512
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
513
+ type: _t.s_node(_l.Spamex, "Identifier", "BooleanAttribute"),
514
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
515
+ }, {})],
516
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
517
+ }, {})
518
+ }, {});
519
+ }
520
+ }
521
+ *BooleanAttribute() {
522
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
523
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
524
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
525
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
526
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
527
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
528
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
529
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
530
+ }, {}),
531
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
532
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
533
+ type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
534
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
535
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
536
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
537
+ content: _t.node(_l.CSTML, "Content", [_t.lit("key")], {}, {}),
538
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
539
+ }, {})],
540
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
541
+ }, {})
542
+ }, {});
543
+ }
544
+ *MappingAttribute() {
545
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
546
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
547
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
548
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
549
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
550
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
551
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`tokenToken`], {
552
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
553
+ }, {}),
554
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
555
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
556
+ type: _t.s_node(_l.Spamex, "Identifier", "Identifier"),
557
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
558
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
559
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
560
+ content: _t.node(_l.CSTML, "Content", [_t.lit("key")], {}, {}),
561
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
562
+ }, {})],
563
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
564
+ }, {})
565
+ }, {});
566
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
567
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
568
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
569
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
570
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.ref`closeToken`], {
571
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
572
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
573
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
574
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
575
+ }, {}),
576
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
577
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
578
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
579
+ content: _t.node(_l.CSTML, "Content", [_t.lit("=")], {}, {}),
580
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
581
+ }, {}),
582
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
583
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
584
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
585
+ content: _t.node(_l.CSTML, "Content", [_t.lit("mapOperator")], {}, {}),
586
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
587
+ }, {})],
588
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
589
+ }, {})
590
+ }, {});
591
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
592
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
593
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
594
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
595
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
596
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
597
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
598
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
599
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
600
+ type: _t.s_node(_l.Spamex, "Identifier", "AttributeValue"),
601
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
602
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
603
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
604
+ content: _t.node(_l.CSTML, "Content", [_t.lit("value")], {}, {}),
605
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
606
+ }, {})],
607
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
608
+ }, {})
609
+ }, {});
610
+ }
611
+ *StringMatcher() {
612
+ if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
613
+ verb: _t.s_node(_l.Instruction, "Identifier", "match"),
614
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
615
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
616
+ values: [_t.node(_l.Regex, "Pattern", [_t.ref`openToken`, _t.ref`alternatives[]`, _t.ref`closeToken`], {
617
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "/"),
618
+ alternatives: [_t.node(_l.Regex, "Alternative", [_t.ref`elements[]`], {
619
+ elements: [_t.node(_l.Regex, "CharacterClass", [_t.ref`openToken`, _t.ref`elements[]`, _t.ref`elements[]`, _t.ref`closeToken`], {
620
+ openToken: _t.s_i_node(_l.Regex, "Punctuator", "["),
621
+ elements: [_t.node(_l.Regex, "Character", [_t.lit("'")], {}, {}), _t.node(_l.Regex, "Character", [_t.lit("\"")], {}, {})],
622
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "]")
623
+ }, {
624
+ negate: false
625
+ })]
626
+ }, {})],
627
+ closeToken: _t.s_i_node(_l.Regex, "Punctuator", "/")
628
+ }, {})],
629
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
630
+ }, {})
631
+ }, {})) {
632
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
633
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
634
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
635
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
636
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
637
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
638
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
639
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
640
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
641
+ type: _t.s_node(_l.Spamex, "Identifier", "String"),
642
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
643
+ }, {})],
644
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
645
+ }, {})
646
+ }, {});
647
+ } else {
648
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
649
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
650
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
651
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
652
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
653
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
654
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
655
+ language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
656
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
657
+ type: _t.s_node(_l.Spamex, "Identifier", "Pattern"),
658
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
659
+ }, {})],
660
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
661
+ }, {})
662
+ }, {});
663
+ }
664
+ }
665
+ *String() {
666
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
667
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
668
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.ref`closeToken`], {
669
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
670
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
671
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
672
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
673
+ language: _t.s_node(_l.Spamex, "Identifier", "CSTML"),
674
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
675
+ type: _t.s_node(_l.Spamex, "Identifier", "String"),
676
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
677
+ }, {})],
678
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
679
+ }, {})
680
+ }, {});
681
+ }
682
+ *Regex() {
683
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
684
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
685
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
686
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
687
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.ref`closeToken`], {
688
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
689
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
690
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
691
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
692
+ }, {}),
693
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
694
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
695
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
696
+ content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
697
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
698
+ }, {}),
699
+ attributes: [_t.node(_l.Spamex, "MappingAttribute", [_t.ref`key`, _t.ref`mapToken`, _t.ref`value`], {
700
+ key: _t.node(_l.Spamex, "Literal", [_t.lit("balanced")], {}, {}),
701
+ mapToken: _t.s_i_node(_l.Spamex, "Punctuator", "="),
702
+ value: _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
+ }, {})],
708
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
709
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
710
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
711
+ content: _t.node(_l.CSTML, "Content", [_t.lit("open")], {}, {}),
712
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
713
+ }, {})],
714
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
715
+ }, {})
716
+ }, {});
717
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
718
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
719
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
720
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
721
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
722
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
723
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
724
+ language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
725
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
726
+ type: _t.s_node(_l.Spamex, "Identifier", "Alternatives"),
727
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
728
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
729
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
730
+ content: _t.node(_l.CSTML, "Content", [_t.lit("alternatives[]")], {}, {}),
731
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
732
+ }, {})],
733
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
734
+ }, {})
735
+ }, {});
736
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
737
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
738
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
739
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
740
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`type`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`intrinsicValue`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`attributes[]`, _t.ref`closeToken`], {
741
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
742
+ flags: _t.node(_l.CSTML, "Flags", [_t.ref`intrinsicToken`, _t.ref`tokenToken`], {
743
+ intrinsicToken: _t.s_i_node(_l.CSTML, "Punctuator", "~"),
744
+ tokenToken: _t.s_i_node(_l.CSTML, "Punctuator", "*")
745
+ }, {}),
746
+ type: _t.s_node(_l.Spamex, "Identifier", "Punctuator"),
747
+ intrinsicValue: _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
748
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
749
+ content: _t.node(_l.CSTML, "Content", [_t.lit("/")], {}, {}),
750
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
751
+ }, {}),
752
+ attributes: [_t.node(_l.Spamex, "BooleanAttribute", [_t.ref`key`], {
753
+ key: _t.node(_l.Spamex, "Literal", [_t.lit("balancer")], {}, {})
754
+ }, {})],
755
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
756
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
757
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
758
+ content: _t.node(_l.CSTML, "Content", [_t.lit("close")], {}, {}),
759
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
760
+ }, {})],
761
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
762
+ }, {})
763
+ }, {});
764
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
765
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
766
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
767
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
768
+ values: [_t.node(_l.Spamex, "NodeMatcher", [_t.ref`openToken`, _t.ref`flags`, _t.ref`language`, _t.ref`namespaceSeparatorToken`, _t.ref`type`, _t.ref`closeToken`], {
769
+ openToken: _t.s_i_node(_l.Spamex, "Punctuator", "<"),
770
+ flags: _t.node(_l.CSTML, "Flags", [], {}, {}),
771
+ language: _t.s_node(_l.Spamex, "Identifier", "Regex"),
772
+ namespaceSeparatorToken: _t.s_i_node(_l.Spamex, "Punctuator", ":"),
773
+ type: _t.s_node(_l.Spamex, "Identifier", "Flags"),
774
+ closeToken: _t.s_i_node(_l.Spamex, "Punctuator", ">")
775
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
776
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
777
+ content: _t.node(_l.CSTML, "Content", [_t.lit("flags")], {}, {}),
778
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
779
+ }, {})],
780
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
781
+ }, {})
782
+ }, {});
783
+ }
784
+ List() {}
785
+ Punctuator() {}
786
+ Any() {}
787
+ };
@@ -0,0 +1,119 @@
1
+ import { i } from '@bablr/boot/shorthand.macro';
2
+ import { Node, CoveredBy, InjectFrom } from '@bablr/helpers/decorators';
3
+ import * as productions from '@bablr/helpers/productions';
4
+ import * as Regex from '@bablr/language-en-regex-vm-pattern';
5
+ import * as CSTML from '@bablr/language-en-cstml';
6
+ import * as Space from '@bablr/language-en-blank-space';
7
+
8
+ export const canonicalURL = 'https://bablr.org/languages/core/en/spamex';
9
+
10
+ export const dependencies = { Regex, CSTML, Space };
11
+
12
+ const { eatMatchTrivia } = CSTML;
13
+
14
+ export const grammar = class SpamexGrammar {
15
+ @CoveredBy('Expression')
16
+ *Matcher() {
17
+ yield i`eat(<Any> null [
18
+ <NodeMatcher '<'>
19
+ <CSTML:String /['"]/>
20
+ <Regex:Pattern '/'>
21
+ ])`;
22
+ }
23
+
24
+ @CoveredBy('Matcher')
25
+ @CoveredBy('Expression')
26
+ @Node
27
+ *NodeMatcher() {
28
+ yield i`eat(<~*Punctuator '<' balancedSpan='Tag' balanced='>'> 'open')`;
29
+ yield i`eat(<CSTML:Flags>)`;
30
+ if (yield i`match(/[a-zA-Z]+:/)`) {
31
+ yield i`eat(<*CSTML:Identifier> 'language')`;
32
+ yield i`eat(<~*Punctuator ':'> 'namespaceOperator')`;
33
+ yield i`eat(<*CSTML:Identifier> 'type')`;
34
+ } else {
35
+ yield i`eat(null 'language')`;
36
+ yield i`eat(null 'namespaceOperator')`;
37
+ yield i`eatMatch(<*CSTML:Identifier> 'type')`;
38
+ }
39
+ let sp = yield* eatMatchTrivia();
40
+
41
+ if (sp && (yield i`eatMatch(<StringMatcher> 'intrinsicValue')`)) {
42
+ sp = yield* eatMatchTrivia();
43
+ }
44
+
45
+ while (sp && (yield i`match(/!?[a-zA-Z]/)`)) {
46
+ yield i`eat(<Attribute> 'attributes[]')`;
47
+ sp = yield* eatMatchTrivia();
48
+ }
49
+ yield i`eat(<~*Punctuator '>' balancer> 'close')`;
50
+ }
51
+
52
+ *Attributes() {
53
+ yield i`eatMatch(<List> null {
54
+ element: <Attribute>
55
+ allowTrailingSeparator: false
56
+ })`;
57
+ }
58
+
59
+ *Attribute() {
60
+ if (yield i`match(/[a-zA-Z]+\s*=/)`) {
61
+ yield i`eat(<MappingAttribute>)`;
62
+ } else {
63
+ yield i`eat(<BooleanAttribute>)`;
64
+ }
65
+ }
66
+
67
+ @CoveredBy('Attribute')
68
+ @Node
69
+ *BooleanAttribute() {
70
+ yield i`eat(<*CSTML:Identifier> 'key')`;
71
+ }
72
+
73
+ @CoveredBy('Attribute')
74
+ @Node
75
+ *MappingAttribute() {
76
+ yield i`eat(<*CSTML:Identifier> 'key')`;
77
+ yield i`eat(<~*Punctuator '='> 'mapOperator')`;
78
+ yield i`eat(<CSTML:AttributeValue> 'value')`;
79
+ }
80
+
81
+ @CoveredBy('Matcher')
82
+ @CoveredBy('Expression')
83
+ *StringMatcher() {
84
+ if (yield i`match(/['"]/)`) {
85
+ yield i`eat(<CSTML:String>)`;
86
+ } else {
87
+ yield i`eat(<Regex:Pattern>)`;
88
+ }
89
+ }
90
+
91
+ @CoveredBy('StringMatcher')
92
+ @CoveredBy('Matcher')
93
+ @CoveredBy('Expression')
94
+ @Node
95
+ *String() {
96
+ yield i`eat(<CSTML:String>)`;
97
+ }
98
+
99
+ @CoveredBy('StringMatcher')
100
+ @CoveredBy('Matcher')
101
+ @CoveredBy('Expression')
102
+ @Node
103
+ *Regex() {
104
+ yield i`eat(<~*Punctuator '/' balanced='/'> 'open')`;
105
+ yield i`eat(<Regex:Alternatives> 'alternatives[]')`;
106
+ yield i`eat(<~*Punctuator '/' balancer> 'close')`;
107
+ yield i`eat(<Regex:Flags> 'flags')`;
108
+ }
109
+
110
+ @InjectFrom(productions)
111
+ List() {}
112
+
113
+ @Node
114
+ @InjectFrom(productions)
115
+ Punctuator() {}
116
+
117
+ @InjectFrom(productions)
118
+ Any() {}
119
+ };
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@bablr/language-en-spamex",
3
+ "version": "0.3.0",
4
+ "description": "A BABLR language for SPAM Expressions",
5
+ "engines": {
6
+ "node": ">=12.0.0"
7
+ },
8
+ "type": "module",
9
+ "exports": {
10
+ ".": "./lib/grammar.js",
11
+ "./package.json": "./package.json"
12
+ },
13
+ "files": [
14
+ "lib/**/*.js"
15
+ ],
16
+ "sideEffects": false,
17
+ "scripts": {
18
+ "build": "macrome build",
19
+ "watch": "macrome watch",
20
+ "clean": "macrome clean",
21
+ "test": "mocha"
22
+ },
23
+ "dependencies": {
24
+ "@babel/runtime": "^7.23.2",
25
+ "@bablr/agast-helpers": "0.2.0",
26
+ "@bablr/agast-vm-helpers": "0.2.0",
27
+ "@bablr/helpers": "0.17.0",
28
+ "@bablr/language-en-blank-space": "0.2.0",
29
+ "@bablr/language-en-cstml": "0.4.0",
30
+ "@bablr/language-en-regex-vm-pattern": "0.3.0"
31
+ },
32
+ "devDependencies": {
33
+ "@bablr/boot": "0.3.0",
34
+ "@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#49f5952efed27f94ee9b94340eb1563c440bf64e",
35
+ "@bablr/macrome": "0.1.3",
36
+ "@bablr/macrome-generator-bablr": "0.3.1",
37
+ "enhanced-resolve": "^5.12.0",
38
+ "eslint": "^7.32.0",
39
+ "eslint-import-resolver-enhanced-resolve": "^1.0.5",
40
+ "eslint-plugin-import": "^2.27.5",
41
+ "expect": "^29.6.2",
42
+ "prettier": "^2.0.5",
43
+ "mocha": "^10.2.0"
44
+ },
45
+ "keywords": [
46
+ "bablr-language",
47
+ "grammar",
48
+ "english",
49
+ "spamex"
50
+ ],
51
+ "repository": "git@github.com:bablr-lang/language-en-spamex.git",
52
+ "homepage": "https://github.com/bablr-lang/language-en-spamex",
53
+ "author": "Conrad Buck <conartist6@gmail.com>",
54
+ "license": "MIT"
55
+ }