1use crate::{
2 err,
3 lexer::PtxToken,
4 parser::{ParseErrorKind, PtxParseError, PtxTokenStream, Span},
5 span,
6};
7
8#[macro_export]
19macro_rules! mapc {
20 ($parser:expr, $ty:path { $($fields:tt)* }) => {{
21 $crate::parser::util::map($parser, $crate::cclosure!($ty { $($fields)* }))
22 }};
23}
24
25#[macro_export]
27macro_rules! try_mapc {
28 ($parser:expr, $ty:path { $($fields:tt)* }) => {{
29 $crate::parser::util::try_map($parser, $crate::okmap!($ty { $($fields)* }))
30 }};
31}
32
33pub fn parse_unsigned_integer(
38 lit: &str,
39 span: Span,
40 min: u128,
41 max: u128,
42) -> Result<u128, PtxParseError> {
43 let trimmed = lit.trim_end_matches('U').trim_end_matches('u');
44 let (radix, digits) = if let Some(rest) = trimmed
45 .strip_prefix("0x")
46 .or_else(|| trimmed.strip_prefix("0X"))
47 {
48 (16, rest)
49 } else if let Some(rest) = trimmed
50 .strip_prefix("0b")
51 .or_else(|| trimmed.strip_prefix("0B"))
52 {
53 (2, rest)
54 } else if trimmed.starts_with('0') && trimmed.len() > 1 {
55 (8, trimmed.strip_prefix('0').unwrap_or(""))
56 } else {
57 (10, trimmed)
58 };
59 let value = u128::from_str_radix(digits, radix).map_err(|_| PtxParseError {
60 kind: ParseErrorKind::InvalidLiteral(format!("invalid integer literal: {lit}")),
61 span,
62 })?;
63 if value < min || value > max {
64 return Err(PtxParseError {
65 kind: ParseErrorKind::InvalidLiteral(format!("integer literal out of range: {lit}")),
66 span,
67 });
68 }
69 Ok(value)
70}
71
72pub fn parse_signed_integer(
73 lit: &str,
74 span: Span,
75 min: i128,
76 max: i128,
77) -> Result<i128, PtxParseError> {
78 let trimmed = lit.trim_end_matches('U').trim_end_matches('u');
79 let (sign, body) = if let Some(rest) = trimmed.strip_prefix('-') {
80 (-1i32, rest)
81 } else if let Some(rest) = trimmed.strip_prefix('+') {
82 (1i32, rest)
83 } else {
84 (1i32, trimmed)
85 };
86 let limit = if sign < 0 {
87 abs_limit(min)
88 } else {
89 max as u128
90 };
91 let magnitude = parse_unsigned_integer(body, span, 0, limit)? as i128;
92 let value = if sign < 0 { -magnitude } else { magnitude };
93 if value < min || value > max {
94 return Err(PtxParseError {
95 kind: ParseErrorKind::InvalidLiteral(format!("integer literal out of range: {lit}")),
96 span,
97 });
98 }
99 Ok(value)
100}
101
102pub fn parse_u32_literal(lit: &str, span: Span) -> Result<u32, PtxParseError> {
103 parse_unsigned_integer(lit, span, 0, u32::MAX as u128).map(|v| v as u32)
104}
105
106pub fn parse_u64_literal(lit: &str, span: Span) -> Result<u64, PtxParseError> {
107 parse_unsigned_integer(lit, span, 0, u64::MAX as u128).map(|v| v as u64)
108}
109
110pub fn parse_index_suffix(
111 digits: &str,
112 max: u8,
113 label: &str,
114 span: Span,
115) -> Result<u8, PtxParseError> {
116 if digits.is_empty() {
117 return err!(ParseErrorKind::InvalidLiteral(format!(
118 "missing index for {label}"
119 )));
120 }
121 let value = digits.parse::<u8>().map_err(|_| PtxParseError {
122 kind: ParseErrorKind::InvalidLiteral(format!("invalid index for {label}: {digits}")),
123 span,
124 })?;
125 if value > max {
126 return err!(ParseErrorKind::InvalidLiteral(format!(
127 "{label} index out of range: {value}"
128 )));
129 }
130 Ok(value)
131}
132
133fn abs_limit(min: i128) -> u128 {
134 if min == i128::MIN {
135 (i128::MAX as u128) + 1
136 } else {
137 (-min) as u128
138 }
139}
140
141pub fn string_p(
147 expected: impl Into<String>,
148) -> impl Fn(&mut PtxTokenStream) -> Result<((), Span), PtxParseError> {
149 let expected = expected.into();
150 move |stream| {
151 stream.try_with_span(|stream| {
152 stream.with_partial_token_mode(|stream| stream.expect_string(&expected))?;
153 Ok(())
154 })
155 }
156}
157
158macro_rules! define_token_parser {
160 ($name:ident, $token:expr, $doc:expr) => {
161 #[doc = $doc]
162 pub fn $name() -> impl Fn(&mut PtxTokenStream) -> Result<((), Span), PtxParseError> {
163 move |stream| {
164 stream.try_with_span(|stream| {
165 stream.expect(&$token)?;
166 Ok(())
167 })
168 }
169 }
170 };
171}
172
173define_token_parser!(
175 comma_p,
176 PtxToken::Comma,
177 "Parser that expects a comma token."
178);
179define_token_parser!(
180 semicolon_p,
181 PtxToken::Semicolon,
182 "Parser that expects a semicolon token."
183);
184define_token_parser!(
185 colon_p,
186 PtxToken::Colon,
187 "Parser that expects a colon token."
188);
189define_token_parser!(plus_p, PtxToken::Plus, "Parser that expects a plus token.");
190define_token_parser!(
191 minus_p,
192 PtxToken::Minus,
193 "Parser that expects a minus token."
194);
195define_token_parser!(
196 lparen_p,
197 PtxToken::LParen,
198 "Parser that expects a left parenthesis token."
199);
200define_token_parser!(
201 rparen_p,
202 PtxToken::RParen,
203 "Parser that expects a right parenthesis token."
204);
205define_token_parser!(
206 lbracket_p,
207 PtxToken::LBracket,
208 "Parser that expects a left bracket token."
209);
210define_token_parser!(
211 rbracket_p,
212 PtxToken::RBracket,
213 "Parser that expects a right bracket token."
214);
215define_token_parser!(
216 lbrace_p,
217 PtxToken::LBrace,
218 "Parser that expects a left brace token."
219);
220define_token_parser!(
221 rbrace_p,
222 PtxToken::RBrace,
223 "Parser that expects a right brace token."
224);
225define_token_parser!(
226 langle_p,
227 PtxToken::LAngle,
228 "Parser that expects a left angle bracket token."
229);
230define_token_parser!(
231 rangle_p,
232 PtxToken::RAngle,
233 "Parser that expects a right angle bracket token."
234);
235define_token_parser!(
236 equals_p,
237 PtxToken::Equals,
238 "Parser that expects an equals token."
239);
240define_token_parser!(at_p, PtxToken::At, "Parser that expects an @ token.");
241define_token_parser!(
242 exclamation_p,
243 PtxToken::Exclaim,
244 "Parser that expects an exclamation mark token."
245);
246define_token_parser!(pipe_p, PtxToken::Pipe, "Parser that expects a pipe token.");
247
248pub fn integer_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
250 move |stream| {
251 stream.try_with_span(|stream| {
252 let (token, token_span) = stream.consume()?;
253
254 match token {
255 PtxToken::DecimalInteger(s)
256 | PtxToken::HexInteger(s)
257 | PtxToken::BinaryInteger(s)
258 | PtxToken::OctalInteger(s) => Ok(s.clone()),
259 _ => Err(crate::unexpected_token!(
260 *token_span,
261 &["integer literal".to_string()],
262 format!("{:?}", token)
263 )),
264 }
265 })
266 }
267}
268
269pub fn identifier_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
271 move |stream| {
272 stream.try_with_span(|stream| {
273 let (name, _) = stream.expect_identifier()?;
274 Ok(name)
275 })
276 }
277}
278
279pub fn directive_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
281 move |stream| {
282 stream.try_with_span(|stream| {
283 let (dir, _) = stream.expect_directive()?;
284 Ok(dir)
285 })
286 }
287}
288
289pub fn directive_exact_p(
291 expected: impl Into<String>,
292) -> impl Fn(&mut PtxTokenStream) -> Result<((), Span), PtxParseError> {
293 let expected = expected.into();
294 move |stream| {
295 let (dir, span) = directive_p()(stream)?;
296 if dir == expected {
297 Ok(((), span))
298 } else {
299 Err(crate::unexpected_value!(
300 span,
301 &[&format!(".{expected}")],
302 format!(".{dir}")
303 ))
304 }
305 }
306}
307
308pub fn register_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
310 move |stream| {
311 stream.try_with_span(|stream| {
312 let (mut name, _) = stream.expect_register()?;
313 loop {
314 let has_dot = matches!(stream.peek(), Ok((PtxToken::Dot, _)));
315 if !has_dot {
316 break;
317 }
318
319 let is_component = match stream.peek_n(1) {
321 Ok((PtxToken::Identifier(component_name), _)) => matches!(
322 component_name.as_str(),
323 "x" | "y" | "z" | "w" | "r" | "g" | "b" | "a"
324 ),
325 _ => false,
326 };
327
328 if !is_component {
329 break;
330 }
331
332 let _ = stream.consume()?;
334 let (suffix, _) = stream.expect_identifier()?;
335 name.push('.');
336 name.push_str(&suffix);
337 }
338 Ok(name)
339 })
340 }
341}
342
343pub fn string_literal_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
345 move |stream| {
346 stream.try_with_span(|stream| {
347 let (token, token_span) = stream.consume()?;
348 match token {
349 PtxToken::StringLiteral(value) => Ok(value.clone()),
350 _ => Err(crate::unexpected_token!(
351 *token_span,
352 &["string literal".to_string()],
353 format!("{:?}", token)
354 )),
355 }
356 })
357 }
358}
359
360pub fn literal_p() -> impl Fn(&mut PtxTokenStream) -> Result<(String, Span), PtxParseError> {
362 move |stream| {
363 stream.try_with_span(|stream| {
364 let (token, token_span) = stream.consume()?;
365 match token {
366 PtxToken::DecimalInteger(s)
367 | PtxToken::HexInteger(s)
368 | PtxToken::BinaryInteger(s)
369 | PtxToken::OctalInteger(s)
370 | PtxToken::Float(s)
371 | PtxToken::FloatExponent(s)
372 | PtxToken::HexFloatSingle(s)
373 | PtxToken::HexFloatDouble(s) => Ok(s.clone()),
374 _ => Err(crate::unexpected_token!(
375 *token_span,
376 &["literal".to_string()],
377 format!("{:?}", token)
378 )),
379 }
380 })
381 }
382}
383
384macro_rules! define_seq {
390 ($name:ident, $count:expr, $($ty:ident),+; $($param:ident),+; $($var:ident),+) => {
391 #[allow(non_camel_case_types)]
392 #[allow(dead_code)]
393 #[doc = concat!("Sequence ", $count, " parsers, keeping all results.")]
394 pub fn $name<$($ty),+, $($param),+>(
395 $($param: $param),+
396 ) -> impl Fn(&mut PtxTokenStream) -> Result<(($($ty),+), Span), PtxParseError>
397 where
398 $($param: Fn(&mut PtxTokenStream) -> Result<($ty, Span), PtxParseError>),+
399 {
400 move |stream| stream.try_with_span(|stream| {
401 $(let ($var, _) = $param(stream)?;)+
402 Ok(($($var),+))
403 })
404 }
405 };
406}
407
408define_seq!(seq, "2", A, B; parser_a, parser_b; a, b);
410define_seq!(seq3, "3", A, B, C; parser_a, parser_b, parser_c; a, b, c);
411define_seq!(seq4, "4", A, B, C, D; parser_a, parser_b, parser_c, parser_d; a, b, c, d);
412define_seq!(seq5, "5", A, B, C, D, E; parser_a, parser_b, parser_c, parser_d, parser_e; a, b, c, d, e);
413define_seq!(seq6, "6", A, B, C, D, E, F; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f; a, b, c, d, e, f);
414define_seq!(seq7, "7", A, B, C, D, E, F, G; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g; a, b, c, d, e, f, g);
415define_seq!(seq8, "8", A, B, C, D, E, F, G, H; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h; a, b, c, d, e, f, g, h);
416define_seq!(seq9, "9", A, B, C, D, E, F, G, H, I; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i; a, b, c, d, e, f, g, h, i);
417define_seq!(seq10, "10", A, B, C, D, E, F, G, H, I, J; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j; a, b, c, d, e, f, g, h, i, j);
418define_seq!(seq11, "11", A, B, C, D, E, F, G, H, I, J, K; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k; a, b, c, d, e, f, g, h, i, j, k);
419define_seq!(seq12, "12", A, B, C, D, E, F, G, H, I, J, K, L; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l; a, b, c, d, e, f, g, h, i, j, k, l);
420define_seq!(seq13, "13", A, B, C, D, E, F, G, H, I, J, K, L, M; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m; a, b, c, d, e, f, g, h, i, j, k, l, m);
421define_seq!(seq14, "14", A, B, C, D, E, F, G, H, I, J, K, L, M, N; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n; a, b, c, d, e, f, g, h, i, j, k, l, m, n);
422define_seq!(seq15, "15", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
423define_seq!(seq16, "16", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
424define_seq!(seq17, "17", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);
425define_seq!(seq18, "18", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r);
426define_seq!(seq19, "19", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s);
427define_seq!(seq20, "20", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t);
428define_seq!(seq21, "21", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u);
429define_seq!(seq22, "22", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v);
430define_seq!(seq23, "23", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w);
431define_seq!(seq24, "24", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x);
432define_seq!(seq25, "25", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y);
433define_seq!(seq26, "26", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z);
434define_seq!(seq27, "27", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa);
435define_seq!(seq28, "28", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab);
436define_seq!(seq29, "29", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac);
437define_seq!(seq30, "30", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad);
438define_seq!(seq31, "31", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae);
439define_seq!(seq32, "32", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af);
440define_seq!(seq33, "33", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag);
441define_seq!(seq34, "34", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah);
442define_seq!(seq35, "35", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai);
443define_seq!(seq36, "36", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj);
444define_seq!(seq37, "37", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak);
445define_seq!(seq38, "38", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al);
446define_seq!(seq39, "39", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am);
447define_seq!(seq40, "40", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an);
448define_seq!(seq41, "41", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao);
449define_seq!(seq42, "42", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap);
450define_seq!(seq43, "43", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq);
451define_seq!(seq44, "44", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar);
452define_seq!(seq45, "45", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as);
453define_seq!(seq46, "46", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at);
454define_seq!(seq47, "47", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au);
455define_seq!(seq48, "48", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av);
456define_seq!(seq49, "49", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw);
457define_seq!(seq50, "50", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax);
458define_seq!(seq51, "51", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay);
459define_seq!(seq52, "52", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az);
460define_seq!(seq53, "53", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba);
461define_seq!(seq54, "54", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb);
462define_seq!(seq55, "55", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc);
463define_seq!(seq56, "56", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd);
464define_seq!(seq57, "57", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be);
465define_seq!(seq58, "58", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf);
466define_seq!(seq59, "59", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg);
467define_seq!(seq60, "60", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg, parser_bh; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh);
468define_seq!(seq61, "61", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg, parser_bh, parser_bi; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi);
469define_seq!(seq62, "62", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg, parser_bh, parser_bi, parser_bj; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj);
470define_seq!(seq63, "63", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg, parser_bh, parser_bi, parser_bj, parser_bk; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk);
471define_seq!(seq64, "64", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK, BL; parser_a, parser_b, parser_c, parser_d, parser_e, parser_f, parser_g, parser_h, parser_i, parser_j, parser_k, parser_l, parser_m, parser_n, parser_o, parser_p, parser_q, parser_r, parser_s, parser_t, parser_u, parser_v, parser_w, parser_x, parser_y, parser_z, parser_aa, parser_ab, parser_ac, parser_ad, parser_ae, parser_af, parser_ag, parser_ah, parser_ai, parser_aj, parser_ak, parser_al, parser_am, parser_an, parser_ao, parser_ap, parser_aq, parser_ar, parser_as, parser_at, parser_au, parser_av, parser_aw, parser_ax, parser_ay, parser_az, parser_ba, parser_bb, parser_bc, parser_bd, parser_be, parser_bf, parser_bg, parser_bh, parser_bi, parser_bj, parser_bk, parser_bl; a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, r#as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl);
472
473#[macro_export]
475macro_rules! seq_n {
476 () => {
477 compile_error!("seq_n! requires at least two parsers");
478 };
479 ($parser_a:expr $(,)?) => {
480 compile_error!("seq_n! requires at least two parsers");
481 };
482 ($parser_0:expr, $parser_1:expr $(,)?) => {
483 $crate::parser::util::seq($parser_0, $parser_1)
484 };
485 ($parser_0:expr, $parser_1:expr, $parser_2:expr $(,)?) => {
486 $crate::parser::util::seq3($parser_0, $parser_1, $parser_2)
487 };
488 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr $(,)?) => {
489 $crate::parser::util::seq4($parser_0, $parser_1, $parser_2, $parser_3)
490 };
491 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr $(,)?) => {
492 $crate::parser::util::seq5($parser_0, $parser_1, $parser_2, $parser_3, $parser_4)
493 };
494 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr $(,)?) => {
495 $crate::parser::util::seq6(
496 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5,
497 )
498 };
499 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr $(,)?) => {
500 $crate::parser::util::seq7(
501 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6,
502 )
503 };
504 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr $(,)?) => {
505 $crate::parser::util::seq8(
506 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
507 )
508 };
509 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr $(,)?) => {
510 $crate::parser::util::seq9(
511 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
512 $parser_8,
513 )
514 };
515 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr $(,)?) => {
516 $crate::parser::util::seq10(
517 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
518 $parser_8, $parser_9,
519 )
520 };
521 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr $(,)?) => {
522 $crate::parser::util::seq11(
523 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
524 $parser_8, $parser_9, $parser_10,
525 )
526 };
527 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr $(,)?) => {
528 $crate::parser::util::seq12(
529 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
530 $parser_8, $parser_9, $parser_10, $parser_11,
531 )
532 };
533 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr $(,)?) => {
534 $crate::parser::util::seq13(
535 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
536 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12,
537 )
538 };
539 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr $(,)?) => {
540 $crate::parser::util::seq14(
541 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
542 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13,
543 )
544 };
545 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr $(,)?) => {
546 $crate::parser::util::seq15(
547 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
548 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
549 )
550 };
551 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr $(,)?) => {
552 $crate::parser::util::seq16(
553 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
554 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
555 $parser_15,
556 )
557 };
558 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr $(,)?) => {
559 $crate::parser::util::seq17(
560 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
561 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
562 $parser_15, $parser_16,
563 )
564 };
565 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr $(,)?) => {
566 $crate::parser::util::seq18(
567 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
568 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
569 $parser_15, $parser_16, $parser_17,
570 )
571 };
572 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr $(,)?) => {
573 $crate::parser::util::seq19(
574 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
575 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
576 $parser_15, $parser_16, $parser_17, $parser_18,
577 )
578 };
579 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr $(,)?) => {
580 $crate::parser::util::seq20(
581 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
582 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
583 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19,
584 )
585 };
586 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr $(,)?) => {
587 $crate::parser::util::seq21(
588 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
589 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
590 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20,
591 )
592 };
593 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr $(,)?) => {
594 $crate::parser::util::seq22(
595 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
596 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
597 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
598 )
599 };
600 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr $(,)?) => {
601 $crate::parser::util::seq23(
602 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
603 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
604 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
605 $parser_22,
606 )
607 };
608 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr $(,)?) => {
609 $crate::parser::util::seq24(
610 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
611 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
612 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
613 $parser_22, $parser_23,
614 )
615 };
616 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr $(,)?) => {
617 $crate::parser::util::seq25(
618 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
619 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
620 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
621 $parser_22, $parser_23, $parser_24,
622 )
623 };
624 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr $(,)?) => {
625 $crate::parser::util::seq26(
626 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
627 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
628 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
629 $parser_22, $parser_23, $parser_24, $parser_25,
630 )
631 };
632 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr $(,)?) => {
633 $crate::parser::util::seq27(
634 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
635 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
636 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
637 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26,
638 )
639 };
640 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr $(,)?) => {
641 $crate::parser::util::seq28(
642 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
643 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
644 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
645 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27,
646 )
647 };
648 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr $(,)?) => {
649 $crate::parser::util::seq29(
650 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
651 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
652 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
653 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
654 )
655 };
656 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr $(,)?) => {
657 $crate::parser::util::seq30(
658 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
659 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
660 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
661 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
662 $parser_29,
663 )
664 };
665 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr $(,)?) => {
666 $crate::parser::util::seq31(
667 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
668 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
669 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
670 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
671 $parser_29, $parser_30,
672 )
673 };
674 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr $(,)?) => {
675 $crate::parser::util::seq32(
676 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
677 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
678 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
679 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
680 $parser_29, $parser_30, $parser_31,
681 )
682 };
683 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr $(,)?) => {
684 $crate::parser::util::seq33(
685 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
686 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
687 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
688 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
689 $parser_29, $parser_30, $parser_31, $parser_32,
690 )
691 };
692 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr $(,)?) => {
693 $crate::parser::util::seq34(
694 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
695 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
696 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
697 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
698 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33,
699 )
700 };
701 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr $(,)?) => {
702 $crate::parser::util::seq35(
703 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
704 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
705 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
706 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
707 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34,
708 )
709 };
710 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr $(,)?) => {
711 $crate::parser::util::seq36(
712 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
713 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
714 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
715 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
716 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
717 )
718 };
719 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr $(,)?) => {
720 $crate::parser::util::seq37(
721 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
722 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
723 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
724 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
725 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
726 $parser_36,
727 )
728 };
729 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr $(,)?) => {
730 $crate::parser::util::seq38(
731 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
732 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
733 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
734 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
735 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
736 $parser_36, $parser_37,
737 )
738 };
739 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr $(,)?) => {
740 $crate::parser::util::seq39(
741 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
742 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
743 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
744 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
745 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
746 $parser_36, $parser_37, $parser_38,
747 )
748 };
749 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr $(,)?) => {
750 $crate::parser::util::seq40(
751 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
752 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
753 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
754 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
755 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
756 $parser_36, $parser_37, $parser_38, $parser_39,
757 )
758 };
759 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr $(,)?) => {
760 $crate::parser::util::seq41(
761 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
762 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
763 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
764 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
765 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
766 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40,
767 )
768 };
769 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr $(,)?) => {
770 $crate::parser::util::seq42(
771 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
772 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
773 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
774 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
775 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
776 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41,
777 )
778 };
779 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr $(,)?) => {
780 $crate::parser::util::seq43(
781 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
782 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
783 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
784 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
785 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
786 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
787 )
788 };
789 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr $(,)?) => {
790 $crate::parser::util::seq44(
791 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
792 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
793 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
794 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
795 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
796 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
797 $parser_43,
798 )
799 };
800 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr $(,)?) => {
801 $crate::parser::util::seq45(
802 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
803 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
804 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
805 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
806 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
807 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
808 $parser_43, $parser_44,
809 )
810 };
811 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr $(,)?) => {
812 $crate::parser::util::seq46(
813 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
814 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
815 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
816 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
817 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
818 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
819 $parser_43, $parser_44, $parser_45,
820 )
821 };
822 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr $(,)?) => {
823 $crate::parser::util::seq47(
824 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
825 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
826 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
827 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
828 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
829 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
830 $parser_43, $parser_44, $parser_45, $parser_46,
831 )
832 };
833 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr $(,)?) => {
834 $crate::parser::util::seq48(
835 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
836 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
837 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
838 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
839 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
840 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
841 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47,
842 )
843 };
844 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr $(,)?) => {
845 $crate::parser::util::seq49(
846 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
847 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
848 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
849 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
850 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
851 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
852 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48,
853 )
854 };
855 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr $(,)?) => {
856 $crate::parser::util::seq50(
857 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
858 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
859 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
860 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
861 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
862 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
863 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
864 )
865 };
866 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr $(,)?) => {
867 $crate::parser::util::seq51(
868 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
869 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
870 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
871 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
872 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
873 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
874 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
875 $parser_50,
876 )
877 };
878 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr $(,)?) => {
879 $crate::parser::util::seq52(
880 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
881 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
882 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
883 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
884 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
885 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
886 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
887 $parser_50, $parser_51,
888 )
889 };
890 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr $(,)?) => {
891 $crate::parser::util::seq53(
892 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
893 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
894 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
895 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
896 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
897 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
898 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
899 $parser_50, $parser_51, $parser_52,
900 )
901 };
902 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr $(,)?) => {
903 $crate::parser::util::seq54(
904 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
905 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
906 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
907 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
908 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
909 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
910 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
911 $parser_50, $parser_51, $parser_52, $parser_53,
912 )
913 };
914 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr $(,)?) => {
915 $crate::parser::util::seq55(
916 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
917 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
918 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
919 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
920 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
921 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
922 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
923 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54,
924 )
925 };
926 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr $(,)?) => {
927 $crate::parser::util::seq56(
928 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
929 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
930 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
931 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
932 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
933 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
934 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
935 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55,
936 )
937 };
938 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr $(,)?) => {
939 $crate::parser::util::seq57(
940 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
941 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
942 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
943 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
944 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
945 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
946 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
947 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
948 )
949 };
950 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr $(,)?) => {
951 $crate::parser::util::seq58(
952 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
953 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
954 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
955 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
956 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
957 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
958 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
959 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
960 $parser_57,
961 )
962 };
963 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr $(,)?) => {
964 $crate::parser::util::seq59(
965 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
966 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
967 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
968 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
969 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
970 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
971 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
972 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
973 $parser_57, $parser_58,
974 )
975 };
976 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr, $parser_59:expr $(,)?) => {
977 $crate::parser::util::seq60(
978 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
979 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
980 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
981 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
982 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
983 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
984 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
985 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
986 $parser_57, $parser_58, $parser_59,
987 )
988 };
989 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr, $parser_59:expr, $parser_60:expr $(,)?) => {
990 $crate::parser::util::seq61(
991 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
992 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
993 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
994 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
995 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
996 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
997 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
998 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
999 $parser_57, $parser_58, $parser_59, $parser_60,
1000 )
1001 };
1002 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr, $parser_59:expr, $parser_60:expr, $parser_61:expr $(,)?) => {
1003 $crate::parser::util::seq62(
1004 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
1005 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
1006 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
1007 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
1008 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
1009 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
1010 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
1011 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
1012 $parser_57, $parser_58, $parser_59, $parser_60, $parser_61,
1013 )
1014 };
1015 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr, $parser_59:expr, $parser_60:expr, $parser_61:expr, $parser_62:expr $(,)?) => {
1016 $crate::parser::util::seq63(
1017 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
1018 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
1019 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
1020 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
1021 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
1022 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
1023 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
1024 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
1025 $parser_57, $parser_58, $parser_59, $parser_60, $parser_61, $parser_62,
1026 )
1027 };
1028 ($parser_0:expr, $parser_1:expr, $parser_2:expr, $parser_3:expr, $parser_4:expr, $parser_5:expr, $parser_6:expr, $parser_7:expr, $parser_8:expr, $parser_9:expr, $parser_10:expr, $parser_11:expr, $parser_12:expr, $parser_13:expr, $parser_14:expr, $parser_15:expr, $parser_16:expr, $parser_17:expr, $parser_18:expr, $parser_19:expr, $parser_20:expr, $parser_21:expr, $parser_22:expr, $parser_23:expr, $parser_24:expr, $parser_25:expr, $parser_26:expr, $parser_27:expr, $parser_28:expr, $parser_29:expr, $parser_30:expr, $parser_31:expr, $parser_32:expr, $parser_33:expr, $parser_34:expr, $parser_35:expr, $parser_36:expr, $parser_37:expr, $parser_38:expr, $parser_39:expr, $parser_40:expr, $parser_41:expr, $parser_42:expr, $parser_43:expr, $parser_44:expr, $parser_45:expr, $parser_46:expr, $parser_47:expr, $parser_48:expr, $parser_49:expr, $parser_50:expr, $parser_51:expr, $parser_52:expr, $parser_53:expr, $parser_54:expr, $parser_55:expr, $parser_56:expr, $parser_57:expr, $parser_58:expr, $parser_59:expr, $parser_60:expr, $parser_61:expr, $parser_62:expr, $parser_63:expr $(,)?) => {
1029 $crate::parser::util::seq64(
1030 $parser_0, $parser_1, $parser_2, $parser_3, $parser_4, $parser_5, $parser_6, $parser_7,
1031 $parser_8, $parser_9, $parser_10, $parser_11, $parser_12, $parser_13, $parser_14,
1032 $parser_15, $parser_16, $parser_17, $parser_18, $parser_19, $parser_20, $parser_21,
1033 $parser_22, $parser_23, $parser_24, $parser_25, $parser_26, $parser_27, $parser_28,
1034 $parser_29, $parser_30, $parser_31, $parser_32, $parser_33, $parser_34, $parser_35,
1035 $parser_36, $parser_37, $parser_38, $parser_39, $parser_40, $parser_41, $parser_42,
1036 $parser_43, $parser_44, $parser_45, $parser_46, $parser_47, $parser_48, $parser_49,
1037 $parser_50, $parser_51, $parser_52, $parser_53, $parser_54, $parser_55, $parser_56,
1038 $parser_57, $parser_58, $parser_59, $parser_60, $parser_61, $parser_62, $parser_63,
1039 )
1040 };
1041 ($($parser:expr),+ $(,)?) => {
1042 compile_error!("seq_n! currently supports up to 64 parsers");
1043 };
1044}
1045
1046pub fn skip_first<A, B, PA, PB>(
1048 parser_a: PA,
1049 parser_b: PB,
1050) -> impl Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>
1051where
1052 PA: Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>,
1053 PB: Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>,
1054{
1055 move |stream| {
1056 stream.try_with_span(|stream| {
1057 let _ = parser_a(stream)?;
1058 let (b, _) = parser_b(stream)?;
1059 Ok(b)
1060 })
1061 }
1062}
1063
1064pub fn skip_semicolon<T, P>(
1066 parser: P,
1067) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1068where
1069 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1070{
1071 move |stream| {
1072 let (value, span) = parser(stream)?;
1073 let _ = semicolon_p()(stream)?;
1074 Ok((value, span))
1075 }
1076}
1077
1078#[allow(dead_code)]
1080pub fn skip_second<A, B, PA, PB>(
1081 parser_a: PA,
1082 parser_b: PB,
1083) -> impl Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>
1084where
1085 PA: Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>,
1086 PB: Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>,
1087{
1088 move |stream| {
1089 stream.try_with_span(|stream| {
1090 let (a, _) = parser_a(stream)?;
1091 let (_, _) = parser_b(stream)?;
1092 Ok(a)
1093 })
1094 }
1095}
1096
1097#[allow(dead_code)]
1105pub fn pure<T>(value: T) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1106where
1107 T: Clone + 'static,
1108{
1109 move |stream| stream.try_with_span(|_| Ok(value.clone()))
1110}
1111
1112#[allow(dead_code)]
1132pub fn dispatch<A, B, P, F, Next>(
1133 parser: P,
1134 f: F,
1135) -> impl Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>
1136where
1137 P: Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>,
1138 F: Fn(A, Span) -> Next,
1139 Next: Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>,
1140{
1141 move |stream| {
1142 stream.try_with_span(|stream| {
1143 let (value, span) = parser(stream)?;
1144 let next_parser = f(value, span);
1145 let (result, _) = next_parser(stream)?;
1146 Ok(result)
1147 })
1148 }
1149}
1150
1151pub fn map<A, B, P, F>(
1153 parser: P,
1154 f: F,
1155) -> impl Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>
1156where
1157 P: Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>,
1158 F: Fn(A, Span) -> B,
1159{
1160 move |stream| {
1161 let (value, span) = parser(stream)?;
1162 Ok((f(value, span), span))
1163 }
1164}
1165
1166pub fn try_map<A, B, P, F>(
1168 parser: P,
1169 f: F,
1170) -> impl Fn(&mut PtxTokenStream) -> Result<(B, Span), PtxParseError>
1171where
1172 P: Fn(&mut PtxTokenStream) -> Result<(A, Span), PtxParseError>,
1173 F: Fn(A, Span) -> Result<B, PtxParseError>,
1174{
1175 move |stream| {
1176 stream.try_with_span(|stream| {
1177 let (value, span) = parser(stream)?;
1178 match f(value, span) {
1179 Ok(node) => Ok(node),
1180 Err(mut err) => {
1181 err.span = span;
1182 Err(err)
1183 }
1184 }
1185 })
1186 }
1187}
1188
1189#[macro_export]
1195macro_rules! alt {
1196 () => {
1197 compile_error!("alt! requires at least one parser")
1198 };
1199 ($parser:expr $(,)?) => {
1200 $parser
1201 };
1202 ($parser_a:expr, $parser_b:expr $(,)?) => {
1203 $crate::parser::util::alt($parser_a, $parser_b)
1204 };
1205 ($parser_a:expr, $parser_b:expr, $($rest:expr),+ $(,)?) => {
1206 $crate::parser::util::alt($parser_a, $crate::alt!($parser_b, $($rest),+))
1207 };
1208}
1209
1210pub fn alt<T, P1, P2>(
1223 parser1: P1,
1224 parser2: P2,
1225) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1226where
1227 P1: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1228 P2: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1229{
1230 move |stream| match stream.try_with_span(|stream| parser1(stream)) {
1231 Ok((result, _)) => Ok(result),
1232 Err(_) => parser2(stream),
1233 }
1234}
1235
1236#[allow(dead_code)]
1240pub fn choice<T>(
1241 parsers: Vec<impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>>,
1242) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError> {
1243 move |stream| {
1244 let mut last_error = None;
1245 for parser in &parsers {
1246 match stream.try_with_span(|stream| parser(stream)) {
1247 Ok((result, _)) => return Ok(result),
1248 Err(err) => {
1249 last_error = Some(err);
1250 }
1251 }
1252 }
1253
1254 Err(last_error.unwrap_or_else(|| PtxParseError {
1255 kind: ParseErrorKind::UnexpectedEof,
1256 span: span!(0..0),
1257 }))
1258 }
1259}
1260
1261#[allow(dead_code)]
1263pub fn attempt<T, P>(parser: P) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1264where
1265 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1266{
1267 move |stream| match stream.try_with_span(|stream| parser(stream)) {
1268 Ok((result, _)) => Ok(result),
1269 Err(err) => Err(err),
1270 }
1271}
1272
1273pub fn optional<T, P>(
1275 parser: P,
1276) -> impl Fn(&mut PtxTokenStream) -> Result<(Option<T>, Span), PtxParseError>
1277where
1278 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1279{
1280 move |stream| match stream.try_with_span(|stream| parser(stream)) {
1281 Ok(((value, _), span)) => Ok((Some(value), span)),
1282 Err(_) => Ok((None, stream.current_span())),
1283 }
1284}
1285
1286pub fn many<T, P>(
1294 parser: P,
1295) -> impl Fn(&mut PtxTokenStream) -> Result<(Vec<T>, Span), PtxParseError>
1296where
1297 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1298{
1299 move |stream| {
1300 stream.try_with_span(|stream| {
1301 let mut values = Vec::new();
1302
1303 loop {
1304 match stream.try_with_span(|stream| parser(stream)) {
1305 Ok(((value, _), _)) => values.push(value),
1306 Err(_) => break,
1307 }
1308 }
1309
1310 Ok(values)
1311 })
1312 }
1313}
1314
1315#[allow(dead_code)]
1319pub fn many1<T, P>(
1320 parser: P,
1321) -> impl Fn(&mut PtxTokenStream) -> Result<(Vec<T>, Span), PtxParseError>
1322where
1323 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1324{
1325 move |stream| {
1326 stream.try_with_span(|stream| {
1327 let (first, _) = parser(stream)?;
1328 let mut values = vec![first];
1329
1330 loop {
1331 match stream.try_with_span(|stream| parser(stream)) {
1332 Ok(((value, _), _)) => values.push(value),
1333 Err(_) => break,
1334 }
1335 }
1336
1337 Ok(values)
1338 })
1339 }
1340}
1341
1342pub fn sep_by<T, S, P, PS>(
1349 parser: P,
1350 separator: PS,
1351) -> impl Fn(&mut PtxTokenStream) -> Result<(Vec<T>, Span), PtxParseError>
1352where
1353 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1354 PS: Fn(&mut PtxTokenStream) -> Result<(S, Span), PtxParseError>,
1355{
1356 move |stream| {
1357 stream.try_with_span(|stream| {
1358 let mut values = Vec::new();
1359
1360 match stream.try_with_span(|stream| parser(stream)) {
1361 Ok(((value, _), _)) => values.push(value),
1362 Err(_) => return Ok(values),
1363 }
1364
1365 loop {
1366 match stream.try_with_span(|stream| separator(stream)) {
1367 Ok((_, _)) => match stream.try_with_span(|stream| parser(stream)) {
1368 Ok(((value, _), _)) => values.push(value),
1369 Err(_) => break,
1370 },
1371 Err(_) => break,
1372 }
1373 }
1374
1375 Ok(values)
1376 })
1377 }
1378}
1379
1380pub fn sep_by1<T, S, P, PS>(
1382 parser: P,
1383 separator: PS,
1384) -> impl Fn(&mut PtxTokenStream) -> Result<(Vec<T>, Span), PtxParseError>
1385where
1386 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1387 PS: Fn(&mut PtxTokenStream) -> Result<(S, Span), PtxParseError>,
1388{
1389 move |stream| {
1390 stream.try_with_span(|stream| {
1391 let (first, _) = parser(stream)?;
1392 let mut values = vec![first];
1393
1394 loop {
1395 let mut separator_failed = false;
1396 match stream.try_with_span(|stream| {
1397 separator(stream).map_err(|err| {
1398 separator_failed = true;
1399 err
1400 })?;
1401 parser(stream)
1402 }) {
1403 Ok(((value, _), _)) => values.push(value),
1404 Err(err) => {
1405 if separator_failed {
1406 break;
1407 } else {
1408 return Err(err);
1409 }
1410 }
1411 }
1412 }
1413
1414 Ok(values)
1415 })
1416 }
1417}
1418
1419#[allow(dead_code)]
1427pub fn peek<T, P>(parser: P) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1428where
1429 P: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1430{
1431 move |stream| {
1432 let saved_pos = stream.position();
1433 let result = parser(stream);
1434 stream.set_position(saved_pos);
1435 result
1436 }
1437}
1438
1439#[allow(dead_code)]
1441pub fn check<F>(predicate: F) -> impl Fn(&mut PtxTokenStream) -> Result<bool, PtxParseError>
1442where
1443 F: Fn(&PtxToken) -> bool,
1444{
1445 move |stream| {
1446 Ok(stream
1447 .peek()
1448 .map(|(token, _)| predicate(&token))
1449 .unwrap_or(false))
1450 }
1451}
1452
1453#[allow(dead_code)]
1456pub fn peek_directive() -> impl Fn(&mut PtxTokenStream) -> Result<Option<String>, PtxParseError> {
1457 |stream| {
1458 let directive = match (stream.peek(), stream.peek_n(1)) {
1459 (Ok((PtxToken::Dot, _dot_span)), Ok((PtxToken::Identifier(name), _id_span))) => {
1460 Some(name.clone())
1461 }
1462 _ => None,
1463 };
1464 Ok(directive)
1465 }
1466}
1467
1468#[allow(dead_code)]
1475pub fn satisfy<F>(
1476 predicate: F,
1477 expected_msg: &'static str,
1478) -> impl Fn(&mut PtxTokenStream) -> Result<((PtxToken, Span), Span), PtxParseError>
1479where
1480 F: Fn(&PtxToken) -> bool + Clone + 'static,
1481{
1482 move |stream| {
1483 let eof_span = stream.current_span();
1484 stream.try_with_span(|stream| {
1485 let (token, span) = stream.peek().map_err(|_| PtxParseError {
1486 kind: ParseErrorKind::UnexpectedEof,
1487 span: eof_span,
1488 })?;
1489
1490 if predicate(&token) {
1491 stream.consume()?;
1492 Ok((token.clone(), *span))
1493 } else {
1494 Err(crate::unexpected_token!(
1495 *span,
1496 &[expected_msg.to_string()],
1497 format!("{:?}", token)
1498 ))
1499 }
1500 })
1501 }
1502}
1503
1504pub fn between<O, C, T, PO, PC, PT>(
1508 open: PO,
1509 close: PC,
1510 parser: PT,
1511) -> impl Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>
1512where
1513 PO: Fn(&mut PtxTokenStream) -> Result<(O, Span), PtxParseError>,
1514 PC: Fn(&mut PtxTokenStream) -> Result<(C, Span), PtxParseError>,
1515 PT: Fn(&mut PtxTokenStream) -> Result<(T, Span), PtxParseError>,
1516{
1517 move |stream| {
1518 stream.try_with_span(|stream| {
1519 let _ = open(stream)?;
1520 let (result, _) = parser(stream)?;
1521 let _ = close(stream)?;
1522 Ok(result)
1523 })
1524 }
1525}