1 // Generated with DParserGen.
2 module dparsergen.generator.grammarebnf;
3 import dparsergen.core.grammarinfo;
4 import dparsergen.core.parseexception;
5 import dparsergen.core.parsestackelem;
6 import dparsergen.core.utils;
7 import std.algorithm;
8 import std.conv;
9 import std.meta;
10 import std.stdio;
11 import std.traits;
12 
13 enum SymbolID startTokenID = 0;
14 static assert(allTokens.length < SymbolID.max - startTokenID);
15 enum SymbolID endTokenID = startTokenID + allTokens.length;
16 
17 enum SymbolID startNonterminalID = 0;
18 static assert(allNonterminals.length < SymbolID.max - startNonterminalID);
19 enum SymbolID endNonterminalID = startNonterminalID + allNonterminals.length;
20 
21 enum ProductionID startProductionID = 0;
22 static assert(allProductions.length < ProductionID.max - startProductionID);
23 enum ProductionID endProductionID = startProductionID + allProductions.length;
24 
25 enum nonterminalIDFor(string name) = startNonterminalID + staticIndexOf!(name,
26         "EBNF",
27         "Declaration",
28         "SymbolDeclaration",
29         "DeclarationType",
30         "MacroParametersPart",
31         "MacroParameters",
32         "MacroParameter",
33         "OptionDeclaration",
34         "Import",
35         "MatchDeclaration",
36         "Annotation",
37         "AnnotationParams",
38         "AnnotationParamsPart",
39         "NegativeLookahead",
40         "Expression",
41         "Alternation",
42         "Concatenation",
43         "ProductionAnnotation",
44         "TokenMinus",
45         "AnnotatedExpression",
46         "ExpressionAnnotation",
47         "ExpressionName",
48         "ExpressionPrefix",
49         "PostfixExpression",
50         "Optional",
51         "Repetition",
52         "RepetitionPlus",
53         "AtomExpression",
54         "Symbol",
55         "Name",
56         "Token",
57         "UnpackVariadicList",
58         "SubToken",
59         "MacroInstance",
60         "ParenExpression",
61         "ExpressionList",
62         "Tuple",
63         "Declaration+",
64         "DeclarationType?",
65         "MacroParametersPart?",
66         "Annotation+",
67         "Annotation*",
68         "MacroParameters?",
69         "AnnotationParams?",
70         "AnnotationParamsPart+",
71         "AnnotationParamsPart*",
72         "TokenMinus+",
73         "ProductionAnnotation+",
74         "@regArray_ProductionAnnotation*",
75         "@regArray_ProductionAnnotation+",
76         "ExpressionAnnotation+",
77         "@regArray_ExpressionAnnotation*",
78         "ExpressionName?",
79         "ExpressionPrefix+",
80         "ExpressionPrefix*",
81         "ExpressionList?",
82         "$regarray_0",
83         "$regarray_1",
84         "$regarrayedge_0_1",
85         "$regarrayedge_1_1",
86         );
87 
88 struct Parser(CreatorInstance, alias L)
89 {
90     alias Lexer = L;
91     alias Location = typeof(Lexer.init.front.currentLocation);
92     alias LocationDiff = typeof(Location.init - Location.init);
93 
94     CreatorInstance creator;
95     Lexer* lexer;
96     ParseException lastError;
97 
98     template NonterminalType(size_t nonterminalID)
99             if (nonterminalID >= startNonterminalID && nonterminalID < endNonterminalID)
100     {
101         alias NonterminalType = CreatorInstance.NonterminalType!nonterminalID;
102     }
103 
104     alias Token = typeof(lexer.front.content);
105 
106     Location lastTokenEnd;
107 
108     ParseStackElem!(Location, Token) popToken()
109     {
110         if (lexer.front.currentLocation - lastTokenEnd != LocationDiff.invalid)
111             assert(lexer.front.currentLocation >= lastTokenEnd,
112                     text(lastTokenEnd, " ", lexer.front.currentLocation));
113 
114         lastTokenEnd = lexer.front.currentTokenEnd;
115         auto tok = lexer.front.content;
116         auto pos = lexer.front.currentLocation;
117         lexer.popFront;
118 
119         assert(lastTokenEnd >= pos);
120 
121         if (!lexer.empty)
122         {
123             assert(lexer.front.currentLocation >= lastTokenEnd,
124                     text(lastTokenEnd, " ", lexer.front.currentLocation));
125         }
126 
127         return ParseStackElem!(Location, Token)(pos, tok);
128     }
129     auto reduce0/*Declaration+ @array = Declaration [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!1) stack1)
130     {
131         NonterminalType!(37/*Declaration+*/) pt;
132         {
133             Location end = lastTokenEnd;
134             if (end < parseStart)
135                 end = parseStart;
136 
137             pt = creator.createParseTree!(0)(parseStart, end, stack1);
138         }
139         return ParseStackElem!(Location, NonterminalType!(37/*Declaration+*/))(parseStart, pt);
140     }
141 
142     auto reduce1/*Declaration+ @array = Declaration+ Declaration [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!37) stack2, ParseStackElem!(Location, NonterminalType!1) stack1)
143     {
144         NonterminalType!(37/*Declaration+*/) pt;
145         {
146             Location end = lastTokenEnd;
147             if (end < parseStart)
148                 end = parseStart;
149 
150             pt = creator.createParseTree!(1)(parseStart, end, stack2, stack1);
151         }
152         return ParseStackElem!(Location, NonterminalType!(37/*Declaration+*/))(parseStart, pt);
153     }
154 
155     auto reduce2_EBNF/*EBNF = Declaration+*/(Location parseStart, ParseStackElem!(Location, NonterminalType!37) stack1)
156     {
157         NonterminalType!(0/*EBNF*/) pt;
158         {
159             Location end = lastTokenEnd;
160             if (end < parseStart)
161                 end = parseStart;
162 
163             pt = creator.createParseTree!(2)(parseStart, end, stack1);
164         }
165         return ParseStackElem!(Location, NonterminalType!(0/*EBNF*/))(parseStart, pt);
166     }
167 
168     auto reduce3_Declaration/*Declaration = <SymbolDeclaration*/(Location parseStart, ParseStackElem!(Location, NonterminalType!2) stack1)
169     {
170         NonterminalType!(1/*Declaration*/) pt;
171         pt = stack1.val;
172         parseStart = stack1.start;
173         return ParseStackElem!(Location, NonterminalType!(1/*Declaration*/))(parseStart, pt);
174     }
175 
176     auto reduce4_Declaration/*Declaration = <MatchDeclaration*/(Location parseStart, ParseStackElem!(Location, NonterminalType!9) stack1)
177     {
178         NonterminalType!(1/*Declaration*/) pt;
179         pt = stack1.val;
180         parseStart = stack1.start;
181         return ParseStackElem!(Location, NonterminalType!(1/*Declaration*/))(parseStart, pt);
182     }
183 
184     auto reduce5_Declaration/*Declaration = <Import*/(Location parseStart, ParseStackElem!(Location, NonterminalType!8) stack1)
185     {
186         NonterminalType!(1/*Declaration*/) pt;
187         pt = stack1.val;
188         parseStart = stack1.start;
189         return ParseStackElem!(Location, NonterminalType!(1/*Declaration*/))(parseStart, pt);
190     }
191 
192     auto reduce6_Declaration/*Declaration = <OptionDeclaration*/(Location parseStart, ParseStackElem!(Location, NonterminalType!7) stack1)
193     {
194         NonterminalType!(1/*Declaration*/) pt;
195         pt = stack1.val;
196         parseStart = stack1.start;
197         return ParseStackElem!(Location, NonterminalType!(1/*Declaration*/))(parseStart, pt);
198     }
199 
200     auto reduce7/*DeclarationType? = <DeclarationType [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!3) stack1)
201     {
202         NonterminalType!(38/*DeclarationType?*/) pt;
203         pt = stack1.val;
204         parseStart = stack1.start;
205         return ParseStackElem!(Location, NonterminalType!(38/*DeclarationType?*/))(parseStart, pt);
206     }
207 
208     auto reduce8/*DeclarationType? = [virtual]*/()
209     {
210         Location parseStart = lastTokenEnd;
211         NonterminalType!(38/*DeclarationType?*/) pt;
212         pt = typeof(pt).init;
213         return ParseStackElem!(Location, NonterminalType!(38/*DeclarationType?*/))(parseStart, pt);
214     }
215 
216     auto reduce9/*MacroParametersPart? = <MacroParametersPart [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!4) stack1)
217     {
218         NonterminalType!(39/*MacroParametersPart?*/) pt;
219         pt = stack1.val;
220         parseStart = stack1.start;
221         return ParseStackElem!(Location, NonterminalType!(39/*MacroParametersPart?*/))(parseStart, pt);
222     }
223 
224     auto reduce10/*MacroParametersPart? = [virtual]*/()
225     {
226         Location parseStart = lastTokenEnd;
227         NonterminalType!(39/*MacroParametersPart?*/) pt;
228         pt = typeof(pt).init;
229         return ParseStackElem!(Location, NonterminalType!(39/*MacroParametersPart?*/))(parseStart, pt);
230     }
231 
232     auto reduce11/*Annotation+ @array = Annotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!10) stack1)
233     {
234         NonterminalType!(40/*Annotation+*/) pt;
235         {
236             Location end = lastTokenEnd;
237             if (end < parseStart)
238                 end = parseStart;
239 
240             pt = creator.createParseTree!(11)(parseStart, end, stack1);
241         }
242         return ParseStackElem!(Location, NonterminalType!(40/*Annotation+*/))(parseStart, pt);
243     }
244 
245     auto reduce12/*Annotation+ @array = Annotation+ Annotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!40) stack2, ParseStackElem!(Location, NonterminalType!10) stack1)
246     {
247         NonterminalType!(40/*Annotation+*/) pt;
248         {
249             Location end = lastTokenEnd;
250             if (end < parseStart)
251                 end = parseStart;
252 
253             pt = creator.createParseTree!(12)(parseStart, end, stack2, stack1);
254         }
255         return ParseStackElem!(Location, NonterminalType!(40/*Annotation+*/))(parseStart, pt);
256     }
257 
258     auto reduce13/*Annotation* @array = [virtual]*/()
259     {
260         Location parseStart = lastTokenEnd;
261         NonterminalType!(41/*Annotation**/) pt;
262         pt = typeof(pt).init;
263         return ParseStackElem!(Location, NonterminalType!(41/*Annotation**/))(parseStart, pt);
264     }
265 
266     auto reduce14/*Annotation* @array = Annotation+ [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!40) stack1)
267     {
268         NonterminalType!(41/*Annotation**/) pt;
269         {
270             Location end = lastTokenEnd;
271             if (end < parseStart)
272                 end = parseStart;
273 
274             pt = creator.createParseTree!(14)(parseStart, end, stack1);
275         }
276         return ParseStackElem!(Location, NonterminalType!(41/*Annotation**/))(parseStart, pt);
277     }
278 
279     auto reduce15_SymbolDeclaration/*SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* ";"*/(Location parseStart, ParseStackElem!(Location, NonterminalType!38) stack5, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, NonterminalType!39) stack3, ParseStackElem!(Location, NonterminalType!41) stack2, ParseStackElem!(Location, Token) stack1)
280     {
281         NonterminalType!(2/*SymbolDeclaration*/) pt;
282         {
283             Location end = lastTokenEnd;
284             if (end < parseStart)
285                 end = parseStart;
286 
287             pt = creator.createParseTree!(15)(parseStart, end, stack5, stack4, stack3, stack2, stack1);
288         }
289         return ParseStackElem!(Location, NonterminalType!(2/*SymbolDeclaration*/))(parseStart, pt);
290     }
291 
292     auto reduce16_SymbolDeclaration/*SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";"*/(Location parseStart, ParseStackElem!(Location, NonterminalType!38) stack7, ParseStackElem!(Location, Token) stack6, ParseStackElem!(Location, NonterminalType!39) stack5, ParseStackElem!(Location, NonterminalType!41) stack4, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!14) stack2, ParseStackElem!(Location, Token) stack1)
293     {
294         NonterminalType!(2/*SymbolDeclaration*/) pt;
295         {
296             Location end = lastTokenEnd;
297             if (end < parseStart)
298                 end = parseStart;
299 
300             pt = creator.createParseTree!(16)(parseStart, end, stack7, stack6, stack5, stack4, stack3, stack2, stack1);
301         }
302         return ParseStackElem!(Location, NonterminalType!(2/*SymbolDeclaration*/))(parseStart, pt);
303     }
304 
305     auto reduce17_DeclarationType/*DeclarationType = "fragment"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
306     {
307         NonterminalType!(3/*DeclarationType*/) pt;
308         {
309             Location end = lastTokenEnd;
310             if (end < parseStart)
311                 end = parseStart;
312 
313             pt = creator.createParseTree!(17)(parseStart, end, stack1);
314         }
315         return ParseStackElem!(Location, NonterminalType!(3/*DeclarationType*/))(parseStart, pt);
316     }
317 
318     auto reduce18_DeclarationType/*DeclarationType = "token"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
319     {
320         NonterminalType!(3/*DeclarationType*/) pt;
321         {
322             Location end = lastTokenEnd;
323             if (end < parseStart)
324                 end = parseStart;
325 
326             pt = creator.createParseTree!(18)(parseStart, end, stack1);
327         }
328         return ParseStackElem!(Location, NonterminalType!(3/*DeclarationType*/))(parseStart, pt);
329     }
330 
331     auto reduce19/*MacroParameters? = <MacroParameters [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!5) stack1)
332     {
333         NonterminalType!(42/*MacroParameters?*/) pt;
334         pt = stack1.val;
335         parseStart = stack1.start;
336         return ParseStackElem!(Location, NonterminalType!(42/*MacroParameters?*/))(parseStart, pt);
337     }
338 
339     auto reduce20/*MacroParameters? = [virtual]*/()
340     {
341         Location parseStart = lastTokenEnd;
342         NonterminalType!(42/*MacroParameters?*/) pt;
343         pt = typeof(pt).init;
344         return ParseStackElem!(Location, NonterminalType!(42/*MacroParameters?*/))(parseStart, pt);
345     }
346 
347     auto reduce21_MacroParametersPart/*MacroParametersPart = "(" MacroParameters? ")"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!42) stack2, ParseStackElem!(Location, Token) stack1)
348     {
349         NonterminalType!(4/*MacroParametersPart*/) pt;
350         {
351             Location end = lastTokenEnd;
352             if (end < parseStart)
353                 end = parseStart;
354 
355             pt = creator.createParseTree!(21)(parseStart, end, stack3, stack2, stack1);
356         }
357         return ParseStackElem!(Location, NonterminalType!(4/*MacroParametersPart*/))(parseStart, pt);
358     }
359 
360     auto reduce22_MacroParameters/*MacroParameters @array = MacroParameter*/(Location parseStart, ParseStackElem!(Location, NonterminalType!6) stack1)
361     {
362         NonterminalType!(5/*MacroParameters*/) pt;
363         {
364             Location end = lastTokenEnd;
365             if (end < parseStart)
366                 end = parseStart;
367 
368             pt = creator.createParseTree!(22)(parseStart, end, stack1);
369         }
370         return ParseStackElem!(Location, NonterminalType!(5/*MacroParameters*/))(parseStart, pt);
371     }
372 
373     auto reduce23_MacroParameters/*MacroParameters @array = MacroParameters "," MacroParameter*/(Location parseStart, ParseStackElem!(Location, NonterminalType!5) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!6) stack1)
374     {
375         NonterminalType!(5/*MacroParameters*/) pt;
376         {
377             Location end = lastTokenEnd;
378             if (end < parseStart)
379                 end = parseStart;
380 
381             pt = creator.createParseTree!(23)(parseStart, end, stack3, stack2, stack1);
382         }
383         return ParseStackElem!(Location, NonterminalType!(5/*MacroParameters*/))(parseStart, pt);
384     }
385 
386     auto reduce24_MacroParameter/*MacroParameter = Identifier*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
387     {
388         NonterminalType!(6/*MacroParameter*/) pt;
389         {
390             Location end = lastTokenEnd;
391             if (end < parseStart)
392                 end = parseStart;
393 
394             pt = creator.createParseTree!(24)(parseStart, end, stack1);
395         }
396         return ParseStackElem!(Location, NonterminalType!(6/*MacroParameter*/))(parseStart, pt);
397     }
398 
399     auto reduce25_MacroParameter/*MacroParameter = Identifier "..."*/(Location parseStart, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
400     {
401         NonterminalType!(6/*MacroParameter*/) pt;
402         {
403             Location end = lastTokenEnd;
404             if (end < parseStart)
405                 end = parseStart;
406 
407             pt = creator.createParseTree!(25)(parseStart, end, stack2, stack1);
408         }
409         return ParseStackElem!(Location, NonterminalType!(6/*MacroParameter*/))(parseStart, pt);
410     }
411 
412     auto reduce26_OptionDeclaration/*OptionDeclaration = ^"option" Identifier ^"=" IntegerLiteral ^";"*/(Location parseStart/*, ParseStackElem!(Location, Token) stack5*/, ParseStackElem!(Location, Token) stack4/*, ParseStackElem!(Location, Token) stack3*/, ParseStackElem!(Location, Token) stack2/*, ParseStackElem!(Location, Token) stack1*/)
413     {
414         NonterminalType!(7/*OptionDeclaration*/) pt;
415         {
416             Location end = lastTokenEnd;
417             if (end < parseStart)
418                 end = parseStart;
419 
420             pt = creator.createParseTree!(26)(parseStart, end, stack4, stack2);
421         }
422         return ParseStackElem!(Location, NonterminalType!(7/*OptionDeclaration*/))(parseStart, pt);
423     }
424 
425     auto reduce27_Import/*Import = "import" StringLiteral ";"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
426     {
427         NonterminalType!(8/*Import*/) pt;
428         {
429             Location end = lastTokenEnd;
430             if (end < parseStart)
431                 end = parseStart;
432 
433             pt = creator.createParseTree!(27)(parseStart, end, stack3, stack2, stack1);
434         }
435         return ParseStackElem!(Location, NonterminalType!(8/*Import*/))(parseStart, pt);
436     }
437 
438     auto reduce28_MatchDeclaration/*MatchDeclaration = "match" Symbol Symbol ";"*/(Location parseStart, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, NonterminalType!28) stack3, ParseStackElem!(Location, NonterminalType!28) stack2, ParseStackElem!(Location, Token) stack1)
439     {
440         NonterminalType!(9/*MatchDeclaration*/) pt;
441         {
442             Location end = lastTokenEnd;
443             if (end < parseStart)
444                 end = parseStart;
445 
446             pt = creator.createParseTree!(28)(parseStart, end, stack4, stack3, stack2, stack1);
447         }
448         return ParseStackElem!(Location, NonterminalType!(9/*MatchDeclaration*/))(parseStart, pt);
449     }
450 
451     auto reduce29/*AnnotationParams? = <AnnotationParams [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!11) stack1)
452     {
453         NonterminalType!(43/*AnnotationParams?*/) pt;
454         pt = stack1.val;
455         parseStart = stack1.start;
456         return ParseStackElem!(Location, NonterminalType!(43/*AnnotationParams?*/))(parseStart, pt);
457     }
458 
459     auto reduce30/*AnnotationParams? = [virtual]*/()
460     {
461         Location parseStart = lastTokenEnd;
462         NonterminalType!(43/*AnnotationParams?*/) pt;
463         pt = typeof(pt).init;
464         return ParseStackElem!(Location, NonterminalType!(43/*AnnotationParams?*/))(parseStart, pt);
465     }
466 
467     auto reduce31_Annotation/*Annotation = "@" Identifier AnnotationParams?*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!43) stack1)
468     {
469         NonterminalType!(10/*Annotation*/) pt;
470         {
471             Location end = lastTokenEnd;
472             if (end < parseStart)
473                 end = parseStart;
474 
475             pt = creator.createParseTree!(31)(parseStart, end, stack3, stack2, stack1);
476         }
477         return ParseStackElem!(Location, NonterminalType!(10/*Annotation*/))(parseStart, pt);
478     }
479 
480     auto reduce32/*AnnotationParamsPart+ @array = AnnotationParamsPart [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!12) stack1)
481     {
482         NonterminalType!(44/*AnnotationParamsPart+*/) pt;
483         {
484             Location end = lastTokenEnd;
485             if (end < parseStart)
486                 end = parseStart;
487 
488             pt = creator.createParseTree!(32)(parseStart, end, stack1);
489         }
490         return ParseStackElem!(Location, NonterminalType!(44/*AnnotationParamsPart+*/))(parseStart, pt);
491     }
492 
493     auto reduce33/*AnnotationParamsPart+ @array = AnnotationParamsPart+ AnnotationParamsPart [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!44) stack2, ParseStackElem!(Location, NonterminalType!12) stack1)
494     {
495         NonterminalType!(44/*AnnotationParamsPart+*/) pt;
496         {
497             Location end = lastTokenEnd;
498             if (end < parseStart)
499                 end = parseStart;
500 
501             pt = creator.createParseTree!(33)(parseStart, end, stack2, stack1);
502         }
503         return ParseStackElem!(Location, NonterminalType!(44/*AnnotationParamsPart+*/))(parseStart, pt);
504     }
505 
506     auto reduce34/*AnnotationParamsPart* @array = [virtual]*/()
507     {
508         Location parseStart = lastTokenEnd;
509         NonterminalType!(45/*AnnotationParamsPart**/) pt;
510         pt = typeof(pt).init;
511         return ParseStackElem!(Location, NonterminalType!(45/*AnnotationParamsPart**/))(parseStart, pt);
512     }
513 
514     auto reduce35/*AnnotationParamsPart* @array = AnnotationParamsPart+ [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!44) stack1)
515     {
516         NonterminalType!(45/*AnnotationParamsPart**/) pt;
517         {
518             Location end = lastTokenEnd;
519             if (end < parseStart)
520                 end = parseStart;
521 
522             pt = creator.createParseTree!(35)(parseStart, end, stack1);
523         }
524         return ParseStackElem!(Location, NonterminalType!(45/*AnnotationParamsPart**/))(parseStart, pt);
525     }
526 
527     auto reduce36_AnnotationParams/*AnnotationParams = "(" AnnotationParamsPart* ")"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!45) stack2, ParseStackElem!(Location, Token) stack1)
528     {
529         NonterminalType!(11/*AnnotationParams*/) pt;
530         {
531             Location end = lastTokenEnd;
532             if (end < parseStart)
533                 end = parseStart;
534 
535             pt = creator.createParseTree!(36)(parseStart, end, stack3, stack2, stack1);
536         }
537         return ParseStackElem!(Location, NonterminalType!(11/*AnnotationParams*/))(parseStart, pt);
538     }
539 
540     auto reduce37_AnnotationParamsPart/*AnnotationParamsPart = StringLiteral*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
541     {
542         NonterminalType!(12/*AnnotationParamsPart*/) pt;
543         {
544             Location end = lastTokenEnd;
545             if (end < parseStart)
546                 end = parseStart;
547 
548             pt = creator.createParseTree!(37)(parseStart, end, stack1);
549         }
550         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
551     }
552 
553     auto reduce38_AnnotationParamsPart/*AnnotationParamsPart = Identifier*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
554     {
555         NonterminalType!(12/*AnnotationParamsPart*/) pt;
556         {
557             Location end = lastTokenEnd;
558             if (end < parseStart)
559                 end = parseStart;
560 
561             pt = creator.createParseTree!(38)(parseStart, end, stack1);
562         }
563         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
564     }
565 
566     auto reduce39_AnnotationParamsPart/*AnnotationParamsPart = CharacterSetLiteral*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
567     {
568         NonterminalType!(12/*AnnotationParamsPart*/) pt;
569         {
570             Location end = lastTokenEnd;
571             if (end < parseStart)
572                 end = parseStart;
573 
574             pt = creator.createParseTree!(39)(parseStart, end, stack1);
575         }
576         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
577     }
578 
579     auto reduce40_AnnotationParamsPart/*AnnotationParamsPart = IntegerLiteral*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
580     {
581         NonterminalType!(12/*AnnotationParamsPart*/) pt;
582         {
583             Location end = lastTokenEnd;
584             if (end < parseStart)
585                 end = parseStart;
586 
587             pt = creator.createParseTree!(40)(parseStart, end, stack1);
588         }
589         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
590     }
591 
592     auto reduce41_AnnotationParamsPart/*AnnotationParamsPart = "(" AnnotationParamsPart* ")"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!45) stack2, ParseStackElem!(Location, Token) stack1)
593     {
594         NonterminalType!(12/*AnnotationParamsPart*/) pt;
595         {
596             Location end = lastTokenEnd;
597             if (end < parseStart)
598                 end = parseStart;
599 
600             pt = creator.createParseTree!(41)(parseStart, end, stack3, stack2, stack1);
601         }
602         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
603     }
604 
605     auto reduce42_AnnotationParamsPart/*AnnotationParamsPart = "="*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
606     {
607         NonterminalType!(12/*AnnotationParamsPart*/) pt;
608         {
609             Location end = lastTokenEnd;
610             if (end < parseStart)
611                 end = parseStart;
612 
613             pt = creator.createParseTree!(42)(parseStart, end, stack1);
614         }
615         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
616     }
617 
618     auto reduce43_AnnotationParamsPart/*AnnotationParamsPart = ":"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
619     {
620         NonterminalType!(12/*AnnotationParamsPart*/) pt;
621         {
622             Location end = lastTokenEnd;
623             if (end < parseStart)
624                 end = parseStart;
625 
626             pt = creator.createParseTree!(43)(parseStart, end, stack1);
627         }
628         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
629     }
630 
631     auto reduce44_AnnotationParamsPart/*AnnotationParamsPart = ";"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
632     {
633         NonterminalType!(12/*AnnotationParamsPart*/) pt;
634         {
635             Location end = lastTokenEnd;
636             if (end < parseStart)
637                 end = parseStart;
638 
639             pt = creator.createParseTree!(44)(parseStart, end, stack1);
640         }
641         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
642     }
643 
644     auto reduce45_AnnotationParamsPart/*AnnotationParamsPart = ","*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
645     {
646         NonterminalType!(12/*AnnotationParamsPart*/) pt;
647         {
648             Location end = lastTokenEnd;
649             if (end < parseStart)
650                 end = parseStart;
651 
652             pt = creator.createParseTree!(45)(parseStart, end, stack1);
653         }
654         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
655     }
656 
657     auto reduce46_AnnotationParamsPart/*AnnotationParamsPart = "{"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
658     {
659         NonterminalType!(12/*AnnotationParamsPart*/) pt;
660         {
661             Location end = lastTokenEnd;
662             if (end < parseStart)
663                 end = parseStart;
664 
665             pt = creator.createParseTree!(46)(parseStart, end, stack1);
666         }
667         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
668     }
669 
670     auto reduce47_AnnotationParamsPart/*AnnotationParamsPart = "}"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
671     {
672         NonterminalType!(12/*AnnotationParamsPart*/) pt;
673         {
674             Location end = lastTokenEnd;
675             if (end < parseStart)
676                 end = parseStart;
677 
678             pt = creator.createParseTree!(47)(parseStart, end, stack1);
679         }
680         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
681     }
682 
683     auto reduce48_AnnotationParamsPart/*AnnotationParamsPart = "?"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
684     {
685         NonterminalType!(12/*AnnotationParamsPart*/) pt;
686         {
687             Location end = lastTokenEnd;
688             if (end < parseStart)
689                 end = parseStart;
690 
691             pt = creator.createParseTree!(48)(parseStart, end, stack1);
692         }
693         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
694     }
695 
696     auto reduce49_AnnotationParamsPart/*AnnotationParamsPart = "!"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
697     {
698         NonterminalType!(12/*AnnotationParamsPart*/) pt;
699         {
700             Location end = lastTokenEnd;
701             if (end < parseStart)
702                 end = parseStart;
703 
704             pt = creator.createParseTree!(49)(parseStart, end, stack1);
705         }
706         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
707     }
708 
709     auto reduce50_AnnotationParamsPart/*AnnotationParamsPart = "<"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
710     {
711         NonterminalType!(12/*AnnotationParamsPart*/) pt;
712         {
713             Location end = lastTokenEnd;
714             if (end < parseStart)
715                 end = parseStart;
716 
717             pt = creator.createParseTree!(50)(parseStart, end, stack1);
718         }
719         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
720     }
721 
722     auto reduce51_AnnotationParamsPart/*AnnotationParamsPart = ">"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
723     {
724         NonterminalType!(12/*AnnotationParamsPart*/) pt;
725         {
726             Location end = lastTokenEnd;
727             if (end < parseStart)
728                 end = parseStart;
729 
730             pt = creator.createParseTree!(51)(parseStart, end, stack1);
731         }
732         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
733     }
734 
735     auto reduce52_AnnotationParamsPart/*AnnotationParamsPart = "*"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
736     {
737         NonterminalType!(12/*AnnotationParamsPart*/) pt;
738         {
739             Location end = lastTokenEnd;
740             if (end < parseStart)
741                 end = parseStart;
742 
743             pt = creator.createParseTree!(52)(parseStart, end, stack1);
744         }
745         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
746     }
747 
748     auto reduce53_AnnotationParamsPart/*AnnotationParamsPart = ">>"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
749     {
750         NonterminalType!(12/*AnnotationParamsPart*/) pt;
751         {
752             Location end = lastTokenEnd;
753             if (end < parseStart)
754                 end = parseStart;
755 
756             pt = creator.createParseTree!(53)(parseStart, end, stack1);
757         }
758         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
759     }
760 
761     auto reduce54_AnnotationParamsPart/*AnnotationParamsPart = "<<"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
762     {
763         NonterminalType!(12/*AnnotationParamsPart*/) pt;
764         {
765             Location end = lastTokenEnd;
766             if (end < parseStart)
767                 end = parseStart;
768 
769             pt = creator.createParseTree!(54)(parseStart, end, stack1);
770         }
771         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
772     }
773 
774     auto reduce55_AnnotationParamsPart/*AnnotationParamsPart = "-"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
775     {
776         NonterminalType!(12/*AnnotationParamsPart*/) pt;
777         {
778             Location end = lastTokenEnd;
779             if (end < parseStart)
780                 end = parseStart;
781 
782             pt = creator.createParseTree!(55)(parseStart, end, stack1);
783         }
784         return ParseStackElem!(Location, NonterminalType!(12/*AnnotationParamsPart*/))(parseStart, pt);
785     }
786 
787     auto reduce56_NegativeLookahead/*NegativeLookahead = "!" Symbol*/(Location parseStart, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!28) stack1)
788     {
789         NonterminalType!(13/*NegativeLookahead*/) pt;
790         {
791             Location end = lastTokenEnd;
792             if (end < parseStart)
793                 end = parseStart;
794 
795             pt = creator.createParseTree!(56)(parseStart, end, stack2, stack1);
796         }
797         return ParseStackElem!(Location, NonterminalType!(13/*NegativeLookahead*/))(parseStart, pt);
798     }
799 
800     auto reduce57_NegativeLookahead/*NegativeLookahead = "!" "anytoken"*/(Location parseStart, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
801     {
802         NonterminalType!(13/*NegativeLookahead*/) pt;
803         {
804             Location end = lastTokenEnd;
805             if (end < parseStart)
806                 end = parseStart;
807 
808             pt = creator.createParseTree!(57)(parseStart, end, stack2, stack1);
809         }
810         return ParseStackElem!(Location, NonterminalType!(13/*NegativeLookahead*/))(parseStart, pt);
811     }
812 
813     auto reduce58_Expression/*Expression = <Alternation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!15) stack1)
814     {
815         NonterminalType!(14/*Expression*/) pt;
816         pt = stack1.val;
817         parseStart = stack1.start;
818         return ParseStackElem!(Location, NonterminalType!(14/*Expression*/))(parseStart, pt);
819     }
820 
821     auto reduce59_Alternation/*Alternation = <Concatenation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!16) stack1)
822     {
823         NonterminalType!(15/*Alternation*/) pt;
824         pt = stack1.val;
825         parseStart = stack1.start;
826         return ParseStackElem!(Location, NonterminalType!(15/*Alternation*/))(parseStart, pt);
827     }
828 
829     auto reduce60_Alternation/*Alternation = Alternation "|" Concatenation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!15) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!16) stack1)
830     {
831         NonterminalType!(15/*Alternation*/) pt;
832         {
833             Location end = lastTokenEnd;
834             if (end < parseStart)
835                 end = parseStart;
836 
837             pt = creator.createParseTree!(60)(parseStart, end, stack3, stack2, stack1);
838         }
839         return ParseStackElem!(Location, NonterminalType!(15/*Alternation*/))(parseStart, pt);
840     }
841 
842     auto reduce61_Concatenation/*Concatenation = <TokenMinus*/(Location parseStart, ParseStackElem!(Location, NonterminalType!18) stack1)
843     {
844         NonterminalType!(16/*Concatenation*/) pt;
845         pt = stack1.val;
846         parseStart = stack1.start;
847         return ParseStackElem!(Location, NonterminalType!(16/*Concatenation*/))(parseStart, pt);
848     }
849 
850     auto reduce62/*TokenMinus+ @array = TokenMinus [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!18) stack1)
851     {
852         NonterminalType!(46/*TokenMinus+*/) pt;
853         {
854             Location end = lastTokenEnd;
855             if (end < parseStart)
856                 end = parseStart;
857 
858             pt = creator.createParseTree!(62)(parseStart, end, stack1);
859         }
860         return ParseStackElem!(Location, NonterminalType!(46/*TokenMinus+*/))(parseStart, pt);
861     }
862 
863     auto reduce63/*TokenMinus+ @array = TokenMinus+ TokenMinus [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!46) stack2, ParseStackElem!(Location, NonterminalType!18) stack1)
864     {
865         NonterminalType!(46/*TokenMinus+*/) pt;
866         {
867             Location end = lastTokenEnd;
868             if (end < parseStart)
869                 end = parseStart;
870 
871             pt = creator.createParseTree!(63)(parseStart, end, stack2, stack1);
872         }
873         return ParseStackElem!(Location, NonterminalType!(46/*TokenMinus+*/))(parseStart, pt);
874     }
875 
876     auto reduce64/*ProductionAnnotation+ @array = ProductionAnnotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!17) stack1)
877     {
878         NonterminalType!(47/*ProductionAnnotation+*/) pt;
879         {
880             Location end = lastTokenEnd;
881             if (end < parseStart)
882                 end = parseStart;
883 
884             pt = creator.createParseTree!(64)(parseStart, end, stack1);
885         }
886         return ParseStackElem!(Location, NonterminalType!(47/*ProductionAnnotation+*/))(parseStart, pt);
887     }
888 
889     auto reduce65/*ProductionAnnotation+ @array = ProductionAnnotation+ ProductionAnnotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!47) stack2, ParseStackElem!(Location, NonterminalType!17) stack1)
890     {
891         NonterminalType!(47/*ProductionAnnotation+*/) pt;
892         {
893             Location end = lastTokenEnd;
894             if (end < parseStart)
895                 end = parseStart;
896 
897             pt = creator.createParseTree!(65)(parseStart, end, stack2, stack1);
898         }
899         return ParseStackElem!(Location, NonterminalType!(47/*ProductionAnnotation+*/))(parseStart, pt);
900     }
901 
902     auto reduce68_Concatenation/*Concatenation = TokenMinus TokenMinus+ @regArray @regArray_ProductionAnnotation**/(Location parseStart, ParseStackElem!(Location, NonterminalType!18) stack3, ParseStackElem!(Location, NonterminalType!46) stack2, ParseStackElem!(Location, NonterminalType!48) stack1)
903     {
904         NonterminalType!(16/*Concatenation*/) pt;
905         {
906             Location end = lastTokenEnd;
907             if (end < parseStart)
908                 end = parseStart;
909 
910             pt = creator.createParseTree!(68)(parseStart, end, stack3, stack2, stack1);
911         }
912         return ParseStackElem!(Location, NonterminalType!(16/*Concatenation*/))(parseStart, pt);
913     }
914 
915     auto reduce71_Concatenation/*Concatenation = TokenMinus @regArray @regArray_ProductionAnnotation+*/(Location parseStart, ParseStackElem!(Location, NonterminalType!18) stack2, ParseStackElem!(Location, NonterminalType!49) stack1)
916     {
917         NonterminalType!(16/*Concatenation*/) pt;
918         {
919             Location end = lastTokenEnd;
920             if (end < parseStart)
921                 end = parseStart;
922 
923             pt = creator.createParseTree!(71)(parseStart, end, stack2, stack1);
924         }
925         return ParseStackElem!(Location, NonterminalType!(16/*Concatenation*/))(parseStart, pt);
926     }
927 
928     auto reduce72_Concatenation/*Concatenation = @regArray @regArray_ProductionAnnotation+*/(Location parseStart, ParseStackElem!(Location, NonterminalType!49) stack1)
929     {
930         NonterminalType!(16/*Concatenation*/) pt;
931         {
932             Location end = lastTokenEnd;
933             if (end < parseStart)
934                 end = parseStart;
935 
936             pt = creator.createParseTree!(72)(parseStart, end, stack1);
937         }
938         return ParseStackElem!(Location, NonterminalType!(16/*Concatenation*/))(parseStart, pt);
939     }
940 
941     auto reduce73_ProductionAnnotation/*ProductionAnnotation @directUnwrap = <Annotation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!10) stack1)
942     {
943         NonterminalType!(17/*ProductionAnnotation*/) pt;
944         pt = stack1.val;
945         parseStart = stack1.start;
946         return ParseStackElem!(Location, NonterminalType!(17/*ProductionAnnotation*/))(parseStart, pt);
947     }
948 
949     auto reduce74_ProductionAnnotation/*ProductionAnnotation @directUnwrap = <NegativeLookahead*/(Location parseStart, ParseStackElem!(Location, NonterminalType!13) stack1)
950     {
951         NonterminalType!(17/*ProductionAnnotation*/) pt;
952         pt = stack1.val;
953         parseStart = stack1.start;
954         return ParseStackElem!(Location, NonterminalType!(17/*ProductionAnnotation*/))(parseStart, pt);
955     }
956 
957     auto reduce75_TokenMinus/*TokenMinus = <AnnotatedExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!19) stack1)
958     {
959         NonterminalType!(18/*TokenMinus*/) pt;
960         pt = stack1.val;
961         parseStart = stack1.start;
962         return ParseStackElem!(Location, NonterminalType!(18/*TokenMinus*/))(parseStart, pt);
963     }
964 
965     auto reduce76_TokenMinus/*TokenMinus = TokenMinus "-" AnnotatedExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!18) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!19) stack1)
966     {
967         NonterminalType!(18/*TokenMinus*/) pt;
968         {
969             Location end = lastTokenEnd;
970             if (end < parseStart)
971                 end = parseStart;
972 
973             pt = creator.createParseTree!(76)(parseStart, end, stack3, stack2, stack1);
974         }
975         return ParseStackElem!(Location, NonterminalType!(18/*TokenMinus*/))(parseStart, pt);
976     }
977 
978     auto reduce77/*ExpressionAnnotation+ @array = ExpressionAnnotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!20) stack1)
979     {
980         NonterminalType!(50/*ExpressionAnnotation+*/) pt;
981         {
982             Location end = lastTokenEnd;
983             if (end < parseStart)
984                 end = parseStart;
985 
986             pt = creator.createParseTree!(77)(parseStart, end, stack1);
987         }
988         return ParseStackElem!(Location, NonterminalType!(50/*ExpressionAnnotation+*/))(parseStart, pt);
989     }
990 
991     auto reduce78/*ExpressionAnnotation+ @array = ExpressionAnnotation+ ExpressionAnnotation [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!50) stack2, ParseStackElem!(Location, NonterminalType!20) stack1)
992     {
993         NonterminalType!(50/*ExpressionAnnotation+*/) pt;
994         {
995             Location end = lastTokenEnd;
996             if (end < parseStart)
997                 end = parseStart;
998 
999             pt = creator.createParseTree!(78)(parseStart, end, stack2, stack1);
1000         }
1001         return ParseStackElem!(Location, NonterminalType!(50/*ExpressionAnnotation+*/))(parseStart, pt);
1002     }
1003 
1004     auto reduce81/*ExpressionName? = <ExpressionName [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!21) stack1)
1005     {
1006         NonterminalType!(52/*ExpressionName?*/) pt;
1007         pt = stack1.val;
1008         parseStart = stack1.start;
1009         return ParseStackElem!(Location, NonterminalType!(52/*ExpressionName?*/))(parseStart, pt);
1010     }
1011 
1012     auto reduce82/*ExpressionName? = [virtual]*/()
1013     {
1014         Location parseStart = lastTokenEnd;
1015         NonterminalType!(52/*ExpressionName?*/) pt;
1016         pt = typeof(pt).init;
1017         return ParseStackElem!(Location, NonterminalType!(52/*ExpressionName?*/))(parseStart, pt);
1018     }
1019 
1020     auto reduce83/*ExpressionPrefix+ @array = ExpressionPrefix [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!22) stack1)
1021     {
1022         NonterminalType!(53/*ExpressionPrefix+*/) pt;
1023         {
1024             Location end = lastTokenEnd;
1025             if (end < parseStart)
1026                 end = parseStart;
1027 
1028             pt = creator.createParseTree!(83)(parseStart, end, stack1);
1029         }
1030         return ParseStackElem!(Location, NonterminalType!(53/*ExpressionPrefix+*/))(parseStart, pt);
1031     }
1032 
1033     auto reduce84/*ExpressionPrefix+ @array = ExpressionPrefix+ ExpressionPrefix [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!53) stack2, ParseStackElem!(Location, NonterminalType!22) stack1)
1034     {
1035         NonterminalType!(53/*ExpressionPrefix+*/) pt;
1036         {
1037             Location end = lastTokenEnd;
1038             if (end < parseStart)
1039                 end = parseStart;
1040 
1041             pt = creator.createParseTree!(84)(parseStart, end, stack2, stack1);
1042         }
1043         return ParseStackElem!(Location, NonterminalType!(53/*ExpressionPrefix+*/))(parseStart, pt);
1044     }
1045 
1046     auto reduce85/*ExpressionPrefix* @array = [virtual]*/()
1047     {
1048         Location parseStart = lastTokenEnd;
1049         NonterminalType!(54/*ExpressionPrefix**/) pt;
1050         pt = typeof(pt).init;
1051         return ParseStackElem!(Location, NonterminalType!(54/*ExpressionPrefix**/))(parseStart, pt);
1052     }
1053 
1054     auto reduce86/*ExpressionPrefix* @array = ExpressionPrefix+ [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!53) stack1)
1055     {
1056         NonterminalType!(54/*ExpressionPrefix**/) pt;
1057         {
1058             Location end = lastTokenEnd;
1059             if (end < parseStart)
1060                 end = parseStart;
1061 
1062             pt = creator.createParseTree!(86)(parseStart, end, stack1);
1063         }
1064         return ParseStackElem!(Location, NonterminalType!(54/*ExpressionPrefix**/))(parseStart, pt);
1065     }
1066 
1067     auto reduce87_AnnotatedExpression/*AnnotatedExpression = @regArray @regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!51) stack4, ParseStackElem!(Location, NonterminalType!52) stack3, ParseStackElem!(Location, NonterminalType!54) stack2, ParseStackElem!(Location, NonterminalType!23) stack1)
1068     {
1069         NonterminalType!(19/*AnnotatedExpression*/) pt;
1070         {
1071             Location end = lastTokenEnd;
1072             if (end < parseStart)
1073                 end = parseStart;
1074 
1075             pt = creator.createParseTree!(87)(parseStart, end, stack4, stack3, stack2, stack1);
1076         }
1077         return ParseStackElem!(Location, NonterminalType!(19/*AnnotatedExpression*/))(parseStart, pt);
1078     }
1079 
1080     auto reduce88_ExpressionAnnotation/*ExpressionAnnotation @directUnwrap = <Annotation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!10) stack1)
1081     {
1082         NonterminalType!(20/*ExpressionAnnotation*/) pt;
1083         pt = stack1.val;
1084         parseStart = stack1.start;
1085         return ParseStackElem!(Location, NonterminalType!(20/*ExpressionAnnotation*/))(parseStart, pt);
1086     }
1087 
1088     auto reduce89_ExpressionAnnotation/*ExpressionAnnotation @directUnwrap = <NegativeLookahead*/(Location parseStart, ParseStackElem!(Location, NonterminalType!13) stack1)
1089     {
1090         NonterminalType!(20/*ExpressionAnnotation*/) pt;
1091         pt = stack1.val;
1092         parseStart = stack1.start;
1093         return ParseStackElem!(Location, NonterminalType!(20/*ExpressionAnnotation*/))(parseStart, pt);
1094     }
1095 
1096     auto reduce90_ExpressionName/*ExpressionName = Identifier ":"*/(Location parseStart, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
1097     {
1098         NonterminalType!(21/*ExpressionName*/) pt;
1099         {
1100             Location end = lastTokenEnd;
1101             if (end < parseStart)
1102                 end = parseStart;
1103 
1104             pt = creator.createParseTree!(90)(parseStart, end, stack2, stack1);
1105         }
1106         return ParseStackElem!(Location, NonterminalType!(21/*ExpressionName*/))(parseStart, pt);
1107     }
1108 
1109     auto reduce91_ExpressionPrefix/*ExpressionPrefix = "<"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
1110     {
1111         NonterminalType!(22/*ExpressionPrefix*/) pt;
1112         {
1113             Location end = lastTokenEnd;
1114             if (end < parseStart)
1115                 end = parseStart;
1116 
1117             pt = creator.createParseTree!(91)(parseStart, end, stack1);
1118         }
1119         return ParseStackElem!(Location, NonterminalType!(22/*ExpressionPrefix*/))(parseStart, pt);
1120     }
1121 
1122     auto reduce92_ExpressionPrefix/*ExpressionPrefix = "^"*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
1123     {
1124         NonterminalType!(22/*ExpressionPrefix*/) pt;
1125         {
1126             Location end = lastTokenEnd;
1127             if (end < parseStart)
1128                 end = parseStart;
1129 
1130             pt = creator.createParseTree!(92)(parseStart, end, stack1);
1131         }
1132         return ParseStackElem!(Location, NonterminalType!(22/*ExpressionPrefix*/))(parseStart, pt);
1133     }
1134 
1135     auto reduce93_PostfixExpression/*PostfixExpression = <Optional*/(Location parseStart, ParseStackElem!(Location, NonterminalType!24) stack1)
1136     {
1137         NonterminalType!(23/*PostfixExpression*/) pt;
1138         pt = stack1.val;
1139         parseStart = stack1.start;
1140         return ParseStackElem!(Location, NonterminalType!(23/*PostfixExpression*/))(parseStart, pt);
1141     }
1142 
1143     auto reduce94_PostfixExpression/*PostfixExpression = <Repetition*/(Location parseStart, ParseStackElem!(Location, NonterminalType!25) stack1)
1144     {
1145         NonterminalType!(23/*PostfixExpression*/) pt;
1146         pt = stack1.val;
1147         parseStart = stack1.start;
1148         return ParseStackElem!(Location, NonterminalType!(23/*PostfixExpression*/))(parseStart, pt);
1149     }
1150 
1151     auto reduce95_PostfixExpression/*PostfixExpression = <RepetitionPlus*/(Location parseStart, ParseStackElem!(Location, NonterminalType!26) stack1)
1152     {
1153         NonterminalType!(23/*PostfixExpression*/) pt;
1154         pt = stack1.val;
1155         parseStart = stack1.start;
1156         return ParseStackElem!(Location, NonterminalType!(23/*PostfixExpression*/))(parseStart, pt);
1157     }
1158 
1159     auto reduce96_PostfixExpression/*PostfixExpression = <AtomExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!27) stack1)
1160     {
1161         NonterminalType!(23/*PostfixExpression*/) pt;
1162         pt = stack1.val;
1163         parseStart = stack1.start;
1164         return ParseStackElem!(Location, NonterminalType!(23/*PostfixExpression*/))(parseStart, pt);
1165     }
1166 
1167     auto reduce97_Optional/*Optional = PostfixExpression "?"*/(Location parseStart, ParseStackElem!(Location, NonterminalType!23) stack2, ParseStackElem!(Location, Token) stack1)
1168     {
1169         NonterminalType!(24/*Optional*/) pt;
1170         {
1171             Location end = lastTokenEnd;
1172             if (end < parseStart)
1173                 end = parseStart;
1174 
1175             pt = creator.createParseTree!(97)(parseStart, end, stack2, stack1);
1176         }
1177         return ParseStackElem!(Location, NonterminalType!(24/*Optional*/))(parseStart, pt);
1178     }
1179 
1180     auto reduce98_Repetition/*Repetition = PostfixExpression "*"*/(Location parseStart, ParseStackElem!(Location, NonterminalType!23) stack2, ParseStackElem!(Location, Token) stack1)
1181     {
1182         NonterminalType!(25/*Repetition*/) pt;
1183         {
1184             Location end = lastTokenEnd;
1185             if (end < parseStart)
1186                 end = parseStart;
1187 
1188             pt = creator.createParseTree!(98)(parseStart, end, stack2, stack1);
1189         }
1190         return ParseStackElem!(Location, NonterminalType!(25/*Repetition*/))(parseStart, pt);
1191     }
1192 
1193     auto reduce99_RepetitionPlus/*RepetitionPlus = PostfixExpression "+"*/(Location parseStart, ParseStackElem!(Location, NonterminalType!23) stack2, ParseStackElem!(Location, Token) stack1)
1194     {
1195         NonterminalType!(26/*RepetitionPlus*/) pt;
1196         {
1197             Location end = lastTokenEnd;
1198             if (end < parseStart)
1199                 end = parseStart;
1200 
1201             pt = creator.createParseTree!(99)(parseStart, end, stack2, stack1);
1202         }
1203         return ParseStackElem!(Location, NonterminalType!(26/*RepetitionPlus*/))(parseStart, pt);
1204     }
1205 
1206     auto reduce100_AtomExpression/*AtomExpression = <Symbol*/(Location parseStart, ParseStackElem!(Location, NonterminalType!28) stack1)
1207     {
1208         NonterminalType!(27/*AtomExpression*/) pt;
1209         pt = stack1.val;
1210         parseStart = stack1.start;
1211         return ParseStackElem!(Location, NonterminalType!(27/*AtomExpression*/))(parseStart, pt);
1212     }
1213 
1214     auto reduce101_AtomExpression/*AtomExpression = <ParenExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!34) stack1)
1215     {
1216         NonterminalType!(27/*AtomExpression*/) pt;
1217         pt = stack1.val;
1218         parseStart = stack1.start;
1219         return ParseStackElem!(Location, NonterminalType!(27/*AtomExpression*/))(parseStart, pt);
1220     }
1221 
1222     auto reduce102_AtomExpression/*AtomExpression = <SubToken*/(Location parseStart, ParseStackElem!(Location, NonterminalType!32) stack1)
1223     {
1224         NonterminalType!(27/*AtomExpression*/) pt;
1225         pt = stack1.val;
1226         parseStart = stack1.start;
1227         return ParseStackElem!(Location, NonterminalType!(27/*AtomExpression*/))(parseStart, pt);
1228     }
1229 
1230     auto reduce103_AtomExpression/*AtomExpression = <UnpackVariadicList*/(Location parseStart, ParseStackElem!(Location, NonterminalType!31) stack1)
1231     {
1232         NonterminalType!(27/*AtomExpression*/) pt;
1233         pt = stack1.val;
1234         parseStart = stack1.start;
1235         return ParseStackElem!(Location, NonterminalType!(27/*AtomExpression*/))(parseStart, pt);
1236     }
1237 
1238     auto reduce104_AtomExpression/*AtomExpression = <Tuple*/(Location parseStart, ParseStackElem!(Location, NonterminalType!36) stack1)
1239     {
1240         NonterminalType!(27/*AtomExpression*/) pt;
1241         pt = stack1.val;
1242         parseStart = stack1.start;
1243         return ParseStackElem!(Location, NonterminalType!(27/*AtomExpression*/))(parseStart, pt);
1244     }
1245 
1246     auto reduce105_Symbol/*Symbol = <Name*/(Location parseStart, ParseStackElem!(Location, NonterminalType!29) stack1)
1247     {
1248         NonterminalType!(28/*Symbol*/) pt;
1249         pt = stack1.val;
1250         parseStart = stack1.start;
1251         return ParseStackElem!(Location, NonterminalType!(28/*Symbol*/))(parseStart, pt);
1252     }
1253 
1254     auto reduce106_Symbol/*Symbol = <Token*/(Location parseStart, ParseStackElem!(Location, NonterminalType!30) stack1)
1255     {
1256         NonterminalType!(28/*Symbol*/) pt;
1257         pt = stack1.val;
1258         parseStart = stack1.start;
1259         return ParseStackElem!(Location, NonterminalType!(28/*Symbol*/))(parseStart, pt);
1260     }
1261 
1262     auto reduce107_Symbol/*Symbol = <MacroInstance*/(Location parseStart, ParseStackElem!(Location, NonterminalType!33) stack1)
1263     {
1264         NonterminalType!(28/*Symbol*/) pt;
1265         pt = stack1.val;
1266         parseStart = stack1.start;
1267         return ParseStackElem!(Location, NonterminalType!(28/*Symbol*/))(parseStart, pt);
1268     }
1269 
1270     auto reduce108_Name/*Name = Identifier*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
1271     {
1272         NonterminalType!(29/*Name*/) pt;
1273         {
1274             Location end = lastTokenEnd;
1275             if (end < parseStart)
1276                 end = parseStart;
1277 
1278             pt = creator.createParseTree!(108)(parseStart, end, stack1);
1279         }
1280         return ParseStackElem!(Location, NonterminalType!(29/*Name*/))(parseStart, pt);
1281     }
1282 
1283     auto reduce109_Token/*Token = StringLiteral*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
1284     {
1285         NonterminalType!(30/*Token*/) pt;
1286         {
1287             Location end = lastTokenEnd;
1288             if (end < parseStart)
1289                 end = parseStart;
1290 
1291             pt = creator.createParseTree!(109)(parseStart, end, stack1);
1292         }
1293         return ParseStackElem!(Location, NonterminalType!(30/*Token*/))(parseStart, pt);
1294     }
1295 
1296     auto reduce110_Token/*Token = CharacterSetLiteral*/(Location parseStart, ParseStackElem!(Location, Token) stack1)
1297     {
1298         NonterminalType!(30/*Token*/) pt;
1299         {
1300             Location end = lastTokenEnd;
1301             if (end < parseStart)
1302                 end = parseStart;
1303 
1304             pt = creator.createParseTree!(110)(parseStart, end, stack1);
1305         }
1306         return ParseStackElem!(Location, NonterminalType!(30/*Token*/))(parseStart, pt);
1307     }
1308 
1309     auto reduce111_UnpackVariadicList/*UnpackVariadicList = Identifier "..."*/(Location parseStart, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
1310     {
1311         NonterminalType!(31/*UnpackVariadicList*/) pt;
1312         {
1313             Location end = lastTokenEnd;
1314             if (end < parseStart)
1315                 end = parseStart;
1316 
1317             pt = creator.createParseTree!(111)(parseStart, end, stack2, stack1);
1318         }
1319         return ParseStackElem!(Location, NonterminalType!(31/*UnpackVariadicList*/))(parseStart, pt);
1320     }
1321 
1322     auto reduce112_SubToken/*SubToken = Symbol ">>" Symbol*/(Location parseStart, ParseStackElem!(Location, NonterminalType!28) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!28) stack1)
1323     {
1324         NonterminalType!(32/*SubToken*/) pt;
1325         {
1326             Location end = lastTokenEnd;
1327             if (end < parseStart)
1328                 end = parseStart;
1329 
1330             pt = creator.createParseTree!(112)(parseStart, end, stack3, stack2, stack1);
1331         }
1332         return ParseStackElem!(Location, NonterminalType!(32/*SubToken*/))(parseStart, pt);
1333     }
1334 
1335     auto reduce113_SubToken/*SubToken = Symbol ">>" ParenExpression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!28) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!34) stack1)
1336     {
1337         NonterminalType!(32/*SubToken*/) pt;
1338         {
1339             Location end = lastTokenEnd;
1340             if (end < parseStart)
1341                 end = parseStart;
1342 
1343             pt = creator.createParseTree!(113)(parseStart, end, stack3, stack2, stack1);
1344         }
1345         return ParseStackElem!(Location, NonterminalType!(32/*SubToken*/))(parseStart, pt);
1346     }
1347 
1348     auto reduce114/*ExpressionList? = <ExpressionList [virtual]*/(Location parseStart, ParseStackElem!(Location, NonterminalType!35) stack1)
1349     {
1350         NonterminalType!(55/*ExpressionList?*/) pt;
1351         pt = stack1.val;
1352         parseStart = stack1.start;
1353         return ParseStackElem!(Location, NonterminalType!(55/*ExpressionList?*/))(parseStart, pt);
1354     }
1355 
1356     auto reduce115/*ExpressionList? = [virtual]*/()
1357     {
1358         Location parseStart = lastTokenEnd;
1359         NonterminalType!(55/*ExpressionList?*/) pt;
1360         pt = typeof(pt).init;
1361         return ParseStackElem!(Location, NonterminalType!(55/*ExpressionList?*/))(parseStart, pt);
1362     }
1363 
1364     auto reduce116_MacroInstance/*MacroInstance = Identifier "(" ExpressionList? ")"*/(Location parseStart, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!55) stack2, ParseStackElem!(Location, Token) stack1)
1365     {
1366         NonterminalType!(33/*MacroInstance*/) pt;
1367         {
1368             Location end = lastTokenEnd;
1369             if (end < parseStart)
1370                 end = parseStart;
1371 
1372             pt = creator.createParseTree!(116)(parseStart, end, stack4, stack3, stack2, stack1);
1373         }
1374         return ParseStackElem!(Location, NonterminalType!(33/*MacroInstance*/))(parseStart, pt);
1375     }
1376 
1377     auto reduce117_ParenExpression/*ParenExpression = "{" Expression "}"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!14) stack2, ParseStackElem!(Location, Token) stack1)
1378     {
1379         NonterminalType!(34/*ParenExpression*/) pt;
1380         {
1381             Location end = lastTokenEnd;
1382             if (end < parseStart)
1383                 end = parseStart;
1384 
1385             pt = creator.createParseTree!(117)(parseStart, end, stack3, stack2, stack1);
1386         }
1387         return ParseStackElem!(Location, NonterminalType!(34/*ParenExpression*/))(parseStart, pt);
1388     }
1389 
1390     auto reduce118_ExpressionList/*ExpressionList @array = Expression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!14) stack1)
1391     {
1392         NonterminalType!(35/*ExpressionList*/) pt;
1393         {
1394             Location end = lastTokenEnd;
1395             if (end < parseStart)
1396                 end = parseStart;
1397 
1398             pt = creator.createParseTree!(118)(parseStart, end, stack1);
1399         }
1400         return ParseStackElem!(Location, NonterminalType!(35/*ExpressionList*/))(parseStart, pt);
1401     }
1402 
1403     auto reduce119_ExpressionList/*ExpressionList @array = ExpressionList "," Expression*/(Location parseStart, ParseStackElem!(Location, NonterminalType!35) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!14) stack1)
1404     {
1405         NonterminalType!(35/*ExpressionList*/) pt;
1406         {
1407             Location end = lastTokenEnd;
1408             if (end < parseStart)
1409                 end = parseStart;
1410 
1411             pt = creator.createParseTree!(119)(parseStart, end, stack3, stack2, stack1);
1412         }
1413         return ParseStackElem!(Location, NonterminalType!(35/*ExpressionList*/))(parseStart, pt);
1414     }
1415 
1416     auto reduce120_Tuple/*Tuple = "t(" ExpressionList? ")"*/(Location parseStart, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!55) stack2, ParseStackElem!(Location, Token) stack1)
1417     {
1418         NonterminalType!(36/*Tuple*/) pt;
1419         {
1420             Location end = lastTokenEnd;
1421             if (end < parseStart)
1422                 end = parseStart;
1423 
1424             pt = creator.createParseTree!(120)(parseStart, end, stack3, stack2, stack1);
1425         }
1426         return ParseStackElem!(Location, NonterminalType!(36/*Tuple*/))(parseStart, pt);
1427     }
1428 
1429     auto reduce121/*$regarray_1 @array @directUnwrap = @inheritAnyTag $regarray_1 $regarrayedge_1_1*/(Location parseStart, ParseStackElem!(Location, NonterminalType!57) stack2, ParseStackElem!(Location, NonterminalType!59) stack1)
1430     {
1431         NonterminalType!(57/*$regarray_1*/) pt;
1432         {
1433             Location end = lastTokenEnd;
1434             if (end < parseStart)
1435                 end = parseStart;
1436 
1437             pt = creator.createParseTree!(121)(parseStart, end, stack2, stack1);
1438         }
1439         return ParseStackElem!(Location, NonterminalType!(57/*$regarray_1*/))(parseStart, pt);
1440     }
1441 
1442     auto reduce122/*$regarrayedge_0_1 @directUnwrap = @excludeDirectUnwrap <Annotation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!10) stack1)
1443     {
1444         NonterminalType!(58/*$regarrayedge_0_1*/) pt;
1445         pt = stack1.val;
1446         parseStart = stack1.start;
1447         return ParseStackElem!(Location, NonterminalType!(58/*$regarrayedge_0_1*/))(parseStart, pt);
1448     }
1449 
1450     auto reduce123/*$regarrayedge_0_1 @directUnwrap = @excludeDirectUnwrap <NegativeLookahead*/(Location parseStart, ParseStackElem!(Location, NonterminalType!13) stack1)
1451     {
1452         NonterminalType!(58/*$regarrayedge_0_1*/) pt;
1453         pt = stack1.val;
1454         parseStart = stack1.start;
1455         return ParseStackElem!(Location, NonterminalType!(58/*$regarrayedge_0_1*/))(parseStart, pt);
1456     }
1457 
1458     auto reduce124/*$regarrayedge_1_1 @directUnwrap = @excludeDirectUnwrap <Annotation*/(Location parseStart, ParseStackElem!(Location, NonterminalType!10) stack1)
1459     {
1460         NonterminalType!(59/*$regarrayedge_1_1*/) pt;
1461         pt = stack1.val;
1462         parseStart = stack1.start;
1463         return ParseStackElem!(Location, NonterminalType!(59/*$regarrayedge_1_1*/))(parseStart, pt);
1464     }
1465 
1466     auto reduce125/*$regarrayedge_1_1 @directUnwrap = @excludeDirectUnwrap <NegativeLookahead*/(Location parseStart, ParseStackElem!(Location, NonterminalType!13) stack1)
1467     {
1468         NonterminalType!(59/*$regarrayedge_1_1*/) pt;
1469         pt = stack1.val;
1470         parseStart = stack1.start;
1471         return ParseStackElem!(Location, NonterminalType!(59/*$regarrayedge_1_1*/))(parseStart, pt);
1472     }
1473 
1474     auto reduce126/*$regarray_1 @array @directUnwrap = @inheritAnyTag $regarrayedge_0_1*/(Location parseStart, ParseStackElem!(Location, NonterminalType!58) stack1)
1475     {
1476         NonterminalType!(57/*$regarray_1*/) pt;
1477         {
1478             Location end = lastTokenEnd;
1479             if (end < parseStart)
1480                 end = parseStart;
1481 
1482             pt = creator.createParseTree!(126)(parseStart, end, stack1);
1483         }
1484         return ParseStackElem!(Location, NonterminalType!(57/*$regarray_1*/))(parseStart, pt);
1485     }
1486 
1487     auto reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/()
1488     {
1489         Location parseStart = lastTokenEnd;
1490         NonterminalType!(51/*@regArray_ExpressionAnnotation**/) pt;
1491         {
1492             Location end = lastTokenEnd;
1493             if (end < parseStart)
1494                 end = parseStart;
1495 
1496             pt = creator.createParseTree!(127)(parseStart, end);
1497         }
1498         return ParseStackElem!(Location, NonterminalType!(51/*@regArray_ExpressionAnnotation**/))(parseStart, pt);
1499     }
1500 
1501     auto reduce128/*@regArray_ProductionAnnotation* @array @directUnwrap @regArray =*/()
1502     {
1503         Location parseStart = lastTokenEnd;
1504         NonterminalType!(48/*@regArray_ProductionAnnotation**/) pt;
1505         {
1506             Location end = lastTokenEnd;
1507             if (end < parseStart)
1508                 end = parseStart;
1509 
1510             pt = creator.createParseTree!(128)(parseStart, end);
1511         }
1512         return ParseStackElem!(Location, NonterminalType!(48/*@regArray_ProductionAnnotation**/))(parseStart, pt);
1513     }
1514 
1515     auto reduce129/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1*/(Location parseStart, ParseStackElem!(Location, NonterminalType!57) stack1)
1516     {
1517         NonterminalType!(51/*@regArray_ExpressionAnnotation**/) pt;
1518         pt = stack1.val;
1519         parseStart = stack1.start;
1520         return ParseStackElem!(Location, NonterminalType!(51/*@regArray_ExpressionAnnotation**/))(parseStart, pt);
1521     }
1522 
1523     auto reduce130/*@regArray_ProductionAnnotation* @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1*/(Location parseStart, ParseStackElem!(Location, NonterminalType!57) stack1)
1524     {
1525         NonterminalType!(48/*@regArray_ProductionAnnotation**/) pt;
1526         pt = stack1.val;
1527         parseStart = stack1.start;
1528         return ParseStackElem!(Location, NonterminalType!(48/*@regArray_ProductionAnnotation**/))(parseStart, pt);
1529     }
1530 
1531     auto reduce131/*@regArray_ProductionAnnotation+ @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1*/(Location parseStart, ParseStackElem!(Location, NonterminalType!57) stack1)
1532     {
1533         NonterminalType!(49/*@regArray_ProductionAnnotation+*/) pt;
1534         pt = stack1.val;
1535         parseStart = stack1.start;
1536         return ParseStackElem!(Location, NonterminalType!(49/*@regArray_ProductionAnnotation+*/))(parseStart, pt);
1537     }
1538 
1539     // path: EBNF
1540     // type: unknown
1541     //  EBNF              -> .EBNF {$end} startElement
1542     //  EBNF              -> .Declaration+ {$end}
1543     //  Declaration       -> .SymbolDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
1544     //  Declaration       -> .OptionDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
1545     //  Declaration       -> .Import {$end, Identifier, "fragment", "token", "option", "import", "match"}
1546     //  Declaration       -> .MatchDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
1547     //  SymbolDeclaration -> .DeclarationType? Identifier MacroParametersPart? Annotation* ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1548     //  SymbolDeclaration -> .DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1549     //  DeclarationType   -> ."fragment" {Identifier}
1550     //  DeclarationType   -> ."token" {Identifier}
1551     //  OptionDeclaration -> ."option" Identifier "=" IntegerLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1552     //  Import            -> ."import" StringLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1553     //  MatchDeclaration  -> ."match" Symbol Symbol ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1554     //  Declaration+      -> .Declaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
1555     //  Declaration+      -> .Declaration+ Declaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
1556     //  DeclarationType?  -> . {Identifier}
1557     //  DeclarationType? ---> DeclarationType
1558     int parseEBNF/*0*/(ref NonterminalType!(0) result, ref Location resultLocation)
1559     {
1560         alias ThisParseResult = typeof(result);
1561         alias ParseResultIn = CreatorInstance.NonterminalUnion!([0, 1, 2, 3, 7, 8, 9, 37, 38]);
1562         ParseResultIn currentResult;
1563         Location currentResultLocation;
1564         int gotoParent = -1;
1565         Location currentStart = lexer.front.currentLocation;
1566         if (lexer.empty)
1567         {
1568             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
1569             return -1;
1570         }
1571         else if (lexer.front.symbol == Lexer.tokenID!q{"fragment"})
1572         {
1573             auto next = popToken();
1574             NonterminalType!(3) r;
1575             Location rl;
1576             gotoParent = parse124(r, rl, currentStart, next);
1577             if (gotoParent < 0)
1578                 return gotoParent;
1579             currentResult = ParseResultIn.create(3/*DeclarationType*/, r);
1580             currentResultLocation = rl;
1581         }
1582         else if (lexer.front.symbol == Lexer.tokenID!q{"token"})
1583         {
1584             auto next = popToken();
1585             NonterminalType!(3) r;
1586             Location rl;
1587             gotoParent = parse126(r, rl, currentStart, next);
1588             if (gotoParent < 0)
1589                 return gotoParent;
1590             currentResult = ParseResultIn.create(3/*DeclarationType*/, r);
1591             currentResultLocation = rl;
1592         }
1593         else if (lexer.front.symbol == Lexer.tokenID!q{"option"})
1594         {
1595             auto next = popToken();
1596             NonterminalType!(7) r;
1597             Location rl;
1598             gotoParent = parse128(r, rl, currentStart/*, next*/);
1599             if (gotoParent < 0)
1600                 return gotoParent;
1601             currentResult = ParseResultIn.create(7/*OptionDeclaration*/, r);
1602             currentResultLocation = rl;
1603         }
1604         else if (lexer.front.symbol == Lexer.tokenID!q{"import"})
1605         {
1606             auto next = popToken();
1607             NonterminalType!(8) r;
1608             Location rl;
1609             gotoParent = parse133(r, rl, currentStart, next);
1610             if (gotoParent < 0)
1611                 return gotoParent;
1612             currentResult = ParseResultIn.create(8/*Import*/, r);
1613             currentResultLocation = rl;
1614         }
1615         else if (lexer.front.symbol == Lexer.tokenID!q{"match"})
1616         {
1617             auto next = popToken();
1618             NonterminalType!(9) r;
1619             Location rl;
1620             gotoParent = parse136(r, rl, currentStart, next);
1621             if (gotoParent < 0)
1622                 return gotoParent;
1623             currentResult = ParseResultIn.create(9/*MatchDeclaration*/, r);
1624             currentResultLocation = rl;
1625         }
1626         else
1627         {
1628             auto tmp = reduce8/*DeclarationType? = [virtual]*/();
1629             currentResult = ParseResultIn.create(38/*DeclarationType?*/, tmp.val);
1630             currentResultLocation = tmp.start;
1631             gotoParent = 0;
1632         }
1633 
1634         while (gotoParent == 0)
1635         {
1636             if (currentResult.nonterminalID == 0/*EBNF*/)
1637             {
1638                 auto next = ParseStackElem!(Location, NonterminalType!0/*EBNF*/)(currentResultLocation, currentResult.get!(0/*EBNF*/)());
1639                 NonterminalType!(0) r;
1640                 Location rl;
1641                 gotoParent = parse1(r, rl, currentStart, next);
1642                 if (gotoParent < 0)
1643                     return gotoParent;
1644                 assert(gotoParent > 0);
1645                 auto tree = r;
1646                 result = tree;
1647                 resultLocation = rl;
1648                 return 0;
1649             }
1650             else if (currentResult.nonterminalID == 1/*Declaration*/)
1651             {
1652                 auto next = ParseStackElem!(Location, NonterminalType!1/*Declaration*/)(currentResultLocation, currentResult.get!(1/*Declaration*/)());
1653                 NonterminalType!(37) r;
1654                 Location rl;
1655                 gotoParent = parse2(r, rl, currentStart, next);
1656                 if (gotoParent < 0)
1657                     return gotoParent;
1658                 currentResult = ParseResultIn.create(37/*Declaration+*/, r);
1659                 currentResultLocation = rl;
1660             }
1661             else if (currentResult.nonterminalID == 2/*SymbolDeclaration*/)
1662             {
1663                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(2/*SymbolDeclaration*/));
1664                 currentResultLocation = currentResultLocation;
1665             }
1666             else if (currentResult.nonterminalID == 3/*DeclarationType*/)
1667             {
1668                 auto next = ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/)(currentResultLocation, currentResult.get!(3/*DeclarationType*/)());
1669                 NonterminalType!(2) r;
1670                 Location rl;
1671                 gotoParent = parse4(r, rl, currentStart, next);
1672                 if (gotoParent < 0)
1673                     return gotoParent;
1674                 currentResult = ParseResultIn.create(2/*SymbolDeclaration*/, r);
1675                 currentResultLocation = rl;
1676             }
1677             else if (currentResult.nonterminalID == 7/*OptionDeclaration*/)
1678             {
1679                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(7/*OptionDeclaration*/));
1680                 currentResultLocation = currentResultLocation;
1681             }
1682             else if (currentResult.nonterminalID == 8/*Import*/)
1683             {
1684                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(8/*Import*/));
1685                 currentResultLocation = currentResultLocation;
1686             }
1687             else if (currentResult.nonterminalID == 9/*MatchDeclaration*/)
1688             {
1689                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(9/*MatchDeclaration*/));
1690                 currentResultLocation = currentResultLocation;
1691             }
1692             else if (currentResult.nonterminalID == 37/*Declaration+*/)
1693             {
1694                 auto next = ParseStackElem!(Location, NonterminalType!37/*Declaration+*/)(currentResultLocation, currentResult.get!(37/*Declaration+*/)());
1695                 CreatorInstance.NonterminalUnion!([0, 37]) r;
1696                 Location rl;
1697                 gotoParent = parse140(r, rl, currentStart, next);
1698                 if (gotoParent < 0)
1699                     return gotoParent;
1700                 currentResult = r;
1701                 currentResultLocation = rl;
1702             }
1703             else if (currentResult.nonterminalID == 38/*DeclarationType?*/)
1704             {
1705                 auto next = ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/)(currentResultLocation, currentResult.get!(38/*DeclarationType?*/)());
1706                 NonterminalType!(2) r;
1707                 Location rl;
1708                 gotoParent = parse4(r, rl, currentStart, next);
1709                 if (gotoParent < 0)
1710                     return gotoParent;
1711                 currentResult = ParseResultIn.create(2/*SymbolDeclaration*/, r);
1712                 currentResultLocation = rl;
1713             }
1714             else
1715                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
1716         }
1717 
1718         auto tree = currentResult.get!(0);
1719         result = tree;
1720         resultLocation = currentResultLocation;
1721         return 0;
1722     }
1723     // path: EBNF EBNF
1724     // type: unknown
1725     //  EBNF ->  EBNF. {$end} startElement
1726     private int parse1(ref NonterminalType!(0) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!0/*EBNF*/) stack1)
1727     {
1728         alias ThisParseResult = typeof(result);
1729         Location currentStart = lexer.front.currentLocation;
1730         {
1731             result = stack1.val;
1732             resultLocation = stack1.start;
1733             return 1;
1734         }
1735     }
1736     // path: EBNF Declaration
1737     // type: unknown
1738     //  Declaration+ ->  Declaration. {$end, Identifier, "fragment", "token", "option", "import", "match"}
1739     private int parse2(ref NonterminalType!(37) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!1/*Declaration*/) stack1)
1740     {
1741         alias ThisParseResult = typeof(result);
1742         Location currentStart = lexer.front.currentLocation;
1743         {
1744             auto tmp = reduce0/*Declaration+ @array = Declaration [virtual]*/(parseStart1, stack1);
1745             result = tmp.val;
1746             resultLocation = tmp.start;
1747             return 0;
1748         }
1749     }
1750     // path: EBNF DeclarationType
1751     // type: unknown
1752     //  SymbolDeclaration ->  DeclarationType?.Identifier MacroParametersPart? Annotation* ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1753     //  SymbolDeclaration ->  DeclarationType?.Identifier MacroParametersPart? Annotation* "=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1754     private int parse4(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack1)
1755     {
1756         alias ThisParseResult = typeof(result);
1757         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2]);
1758         ParseResultIn currentResult;
1759         Location currentResultLocation;
1760         int gotoParent = -1;
1761         Location currentStart = lexer.front.currentLocation;
1762         if (lexer.empty)
1763         {
1764             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
1765             return -1;
1766         }
1767         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
1768         {
1769             auto next = popToken();
1770             NonterminalType!(2) r;
1771             Location rl;
1772             gotoParent = parse5(r, rl, parseStart1, stack1, next);
1773             if (gotoParent < 0)
1774                 return gotoParent;
1775             assert(gotoParent > 0);
1776             result = r;
1777             resultLocation = rl;
1778             return gotoParent - 1;
1779         }
1780         else
1781         {
1782             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
1783                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
1784             return -1;
1785         }
1786     }
1787     // path: EBNF DeclarationType Identifier
1788     // type: unknown
1789     //  SymbolDeclaration    ->  DeclarationType? Identifier.MacroParametersPart? Annotation* ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1790     //  SymbolDeclaration    ->  DeclarationType? Identifier.MacroParametersPart? Annotation* "=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1791     //  MacroParametersPart  ->                             ."(" MacroParameters? ")" {";", "=", "@"}
1792     //  MacroParametersPart? ->                             . {";", "=", "@"}
1793     //  MacroParametersPart? ---> MacroParametersPart
1794     private int parse5(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack2, ParseStackElem!(Location, Token) stack1)
1795     {
1796         alias ThisParseResult = typeof(result);
1797         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2, 4, 39]);
1798         ParseResultIn currentResult;
1799         Location currentResultLocation;
1800         int gotoParent = -1;
1801         Location currentStart = lexer.front.currentLocation;
1802         if (lexer.empty)
1803         {
1804             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
1805             return -1;
1806         }
1807         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
1808         {
1809             auto next = popToken();
1810             NonterminalType!(4) r;
1811             Location rl;
1812             gotoParent = parse114(r, rl, currentStart, next);
1813             if (gotoParent < 0)
1814                 return gotoParent;
1815             currentResult = ParseResultIn.create(4/*MacroParametersPart*/, r);
1816             currentResultLocation = rl;
1817         }
1818         else
1819         {
1820             auto tmp = reduce10/*MacroParametersPart? = [virtual]*/();
1821             currentResult = ParseResultIn.create(39/*MacroParametersPart?*/, tmp.val);
1822             currentResultLocation = tmp.start;
1823             gotoParent = 0;
1824         }
1825 
1826         while (gotoParent == 0)
1827         {
1828             if (currentResult.nonterminalID == 4/*MacroParametersPart*/)
1829             {
1830                 auto next = ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/)(currentResultLocation, currentResult.get!(4/*MacroParametersPart*/)());
1831                 NonterminalType!(2) r;
1832                 Location rl;
1833                 gotoParent = parse6(r, rl, parseStart2, stack2, stack1, next);
1834                 if (gotoParent < 0)
1835                     return gotoParent;
1836                 assert(gotoParent > 0);
1837                 result = r;
1838                 resultLocation = rl;
1839                 return gotoParent - 1;
1840             }
1841             else if (currentResult.nonterminalID == 39/*MacroParametersPart?*/)
1842             {
1843                 auto next = ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/)(currentResultLocation, currentResult.get!(39/*MacroParametersPart?*/)());
1844                 NonterminalType!(2) r;
1845                 Location rl;
1846                 gotoParent = parse6(r, rl, parseStart2, stack2, stack1, next);
1847                 if (gotoParent < 0)
1848                     return gotoParent;
1849                 assert(gotoParent > 0);
1850                 result = r;
1851                 resultLocation = rl;
1852                 return gotoParent - 1;
1853             }
1854             else
1855                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
1856         }
1857 
1858         result = currentResult.get!(2/*SymbolDeclaration*/);
1859         resultLocation = currentResultLocation;
1860         return gotoParent - 1;
1861     }
1862     // path: EBNF DeclarationType Identifier MacroParametersPart
1863     // type: unknown
1864     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart?.Annotation* ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1865     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart?.Annotation* "=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
1866     //  Annotation        ->                                                  ."@" Identifier AnnotationParams? {";", "=", "@"}
1867     //  Annotation+       ->                                                  .Annotation {";", "=", "@"}
1868     //  Annotation+       ->                                                  .Annotation+ Annotation {";", "=", "@"}
1869     //  Annotation*       ->                                                  . {";", "="}
1870     //  Annotation*       ->                                                  .Annotation+ {";", "="}
1871     private int parse6(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack1)
1872     {
1873         alias ThisParseResult = typeof(result);
1874         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2, 10, 40, 41]);
1875         ParseResultIn currentResult;
1876         Location currentResultLocation;
1877         int gotoParent = -1;
1878         Location currentStart = lexer.front.currentLocation;
1879         if (lexer.empty)
1880         {
1881             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
1882             return -1;
1883         }
1884         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
1885         {
1886             auto next = popToken();
1887             NonterminalType!(10) r;
1888             Location rl;
1889             gotoParent = parse8(r, rl, currentStart, next);
1890             if (gotoParent < 0)
1891                 return gotoParent;
1892             currentResult = ParseResultIn.create(10/*Annotation*/, r);
1893             currentResultLocation = rl;
1894         }
1895         else
1896         {
1897             auto tmp = reduce13/*Annotation* @array = [virtual]*/();
1898             currentResult = ParseResultIn.create(41/*Annotation**/, tmp.val);
1899             currentResultLocation = tmp.start;
1900             gotoParent = 0;
1901         }
1902 
1903         while (gotoParent == 0)
1904         {
1905             if (currentResult.nonterminalID == 10/*Annotation*/)
1906             {
1907                 auto next = ParseStackElem!(Location, NonterminalType!10/*Annotation*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
1908                 NonterminalType!(40) r;
1909                 Location rl;
1910                 gotoParent = parse7(r, rl, currentStart, next);
1911                 if (gotoParent < 0)
1912                     return gotoParent;
1913                 currentResult = ParseResultIn.create(40/*Annotation+*/, r);
1914                 currentResultLocation = rl;
1915             }
1916             else if (currentResult.nonterminalID == 40/*Annotation+*/)
1917             {
1918                 auto next = ParseStackElem!(Location, NonterminalType!40/*Annotation+*/)(currentResultLocation, currentResult.get!(40/*Annotation+*/)());
1919                 CreatorInstance.NonterminalUnion!([40, 41]) r;
1920                 Location rl;
1921                 gotoParent = parse38(r, rl, currentStart, next);
1922                 if (gotoParent < 0)
1923                     return gotoParent;
1924                 currentResult = r;
1925                 currentResultLocation = rl;
1926             }
1927             else if (currentResult.nonterminalID == 41/*Annotation**/)
1928             {
1929                 auto next = ParseStackElem!(Location, NonterminalType!41/*Annotation**/)(currentResultLocation, currentResult.get!(41/*Annotation**/)());
1930                 NonterminalType!(2) r;
1931                 Location rl;
1932                 gotoParent = parse40(r, rl, parseStart3, stack3, stack2, stack1, next);
1933                 if (gotoParent < 0)
1934                     return gotoParent;
1935                 assert(gotoParent > 0);
1936                 result = r;
1937                 resultLocation = rl;
1938                 return gotoParent - 1;
1939             }
1940             else
1941                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
1942         }
1943 
1944         result = currentResult.get!(2/*SymbolDeclaration*/);
1945         resultLocation = currentResultLocation;
1946         return gotoParent - 1;
1947     }
1948     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation
1949     // type: unknown
1950     //  Annotation+ ->  Annotation. {";", "=", "@"}
1951     private int parse7(ref NonterminalType!(40) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!10/*Annotation*/) stack1)
1952     {
1953         alias ThisParseResult = typeof(result);
1954         Location currentStart = lexer.front.currentLocation;
1955         {
1956             auto tmp = reduce11/*Annotation+ @array = Annotation [virtual]*/(parseStart1, stack1);
1957             result = tmp.val;
1958             resultLocation = tmp.start;
1959             return 0;
1960         }
1961     }
1962     // path: EBNF DeclarationType Identifier MacroParametersPart "@"
1963     // type: unknown
1964     //  Annotation ->  "@".Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
1965     private int parse8(ref NonterminalType!(10) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
1966     {
1967         alias ThisParseResult = typeof(result);
1968         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10]);
1969         ParseResultIn currentResult;
1970         Location currentResultLocation;
1971         int gotoParent = -1;
1972         Location currentStart = lexer.front.currentLocation;
1973         if (lexer.empty)
1974         {
1975             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
1976             return -1;
1977         }
1978         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
1979         {
1980             auto next = popToken();
1981             NonterminalType!(10) r;
1982             Location rl;
1983             gotoParent = parse9(r, rl, parseStart1, stack1, next);
1984             if (gotoParent < 0)
1985                 return gotoParent;
1986             assert(gotoParent > 0);
1987             result = r;
1988             resultLocation = rl;
1989             return gotoParent - 1;
1990         }
1991         else
1992         {
1993             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
1994                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
1995             return -1;
1996         }
1997     }
1998     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier
1999     // type: unknown
2000     //  Annotation        ->  "@" Identifier.AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
2001     //  AnnotationParams  ->                ."(" AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
2002     //  AnnotationParams? ->                . {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
2003     //  AnnotationParams? ---> AnnotationParams
2004     private int parse9(ref NonterminalType!(10) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
2005     {
2006         alias ThisParseResult = typeof(result);
2007         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 11, 43]);
2008         ParseResultIn currentResult;
2009         Location currentResultLocation;
2010         int gotoParent = -1;
2011         Location currentStart = lexer.front.currentLocation;
2012         if (lexer.empty)
2013         {
2014             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
2015             return -1;
2016         }
2017         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
2018         {
2019             auto next = popToken();
2020             NonterminalType!(11) r;
2021             Location rl;
2022             gotoParent = parse10(r, rl, currentStart, next);
2023             if (gotoParent < 0)
2024                 return gotoParent;
2025             currentResult = ParseResultIn.create(11/*AnnotationParams*/, r);
2026             currentResultLocation = rl;
2027         }
2028         else
2029         {
2030             auto tmp = reduce30/*AnnotationParams? = [virtual]*/();
2031             currentResult = ParseResultIn.create(43/*AnnotationParams?*/, tmp.val);
2032             currentResultLocation = tmp.start;
2033             gotoParent = 0;
2034         }
2035 
2036         while (gotoParent == 0)
2037         {
2038             if (currentResult.nonterminalID == 11/*AnnotationParams*/)
2039             {
2040                 auto next = ParseStackElem!(Location, NonterminalType!43/*AnnotationParams?*/)(currentResultLocation, currentResult.get!(11/*AnnotationParams*/)());
2041                 NonterminalType!(10) r;
2042                 Location rl;
2043                 gotoParent = parse37(r, rl, parseStart2, stack2, stack1, next);
2044                 if (gotoParent < 0)
2045                     return gotoParent;
2046                 assert(gotoParent > 0);
2047                 result = r;
2048                 resultLocation = rl;
2049                 return gotoParent - 1;
2050             }
2051             else if (currentResult.nonterminalID == 43/*AnnotationParams?*/)
2052             {
2053                 auto next = ParseStackElem!(Location, NonterminalType!43/*AnnotationParams?*/)(currentResultLocation, currentResult.get!(43/*AnnotationParams?*/)());
2054                 NonterminalType!(10) r;
2055                 Location rl;
2056                 gotoParent = parse37(r, rl, parseStart2, stack2, stack1, next);
2057                 if (gotoParent < 0)
2058                     return gotoParent;
2059                 assert(gotoParent > 0);
2060                 result = r;
2061                 resultLocation = rl;
2062                 return gotoParent - 1;
2063             }
2064             else
2065                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
2066         }
2067 
2068         result = currentResult.get!(10/*Annotation*/);
2069         resultLocation = currentResultLocation;
2070         return gotoParent - 1;
2071     }
2072     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "("
2073     // type: unknown
2074     //  AnnotationParams      ->  "(".AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
2075     //  AnnotationParamsPart  ->     .Identifier {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2076     //  AnnotationParamsPart  ->     .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2077     //  AnnotationParamsPart  ->     .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2078     //  AnnotationParamsPart  ->     .IntegerLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2079     //  AnnotationParamsPart  ->     .";" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2080     //  AnnotationParamsPart  ->     ."=" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2081     //  AnnotationParamsPart  ->     ."(" AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2082     //  AnnotationParamsPart  ->     ."," {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2083     //  AnnotationParamsPart  ->     .":" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2084     //  AnnotationParamsPart  ->     ."{" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2085     //  AnnotationParamsPart  ->     ."}" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2086     //  AnnotationParamsPart  ->     ."?" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2087     //  AnnotationParamsPart  ->     ."!" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2088     //  AnnotationParamsPart  ->     ."<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2089     //  AnnotationParamsPart  ->     .">" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2090     //  AnnotationParamsPart  ->     ."*" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2091     //  AnnotationParamsPart  ->     .">>" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2092     //  AnnotationParamsPart  ->     ."<<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2093     //  AnnotationParamsPart  ->     ."-" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2094     //  AnnotationParamsPart+ ->     .AnnotationParamsPart {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2095     //  AnnotationParamsPart+ ->     .AnnotationParamsPart+ AnnotationParamsPart {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2096     //  AnnotationParamsPart* ->     . {")"}
2097     //  AnnotationParamsPart* ->     .AnnotationParamsPart+ {")"}
2098     private int parse10(ref NonterminalType!(11) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2099     {
2100         alias ThisParseResult = typeof(result);
2101         alias ParseResultIn = CreatorInstance.NonterminalUnion!([11, 12, 44, 45]);
2102         ParseResultIn currentResult;
2103         Location currentResultLocation;
2104         int gotoParent = -1;
2105         Location currentStart = lexer.front.currentLocation;
2106         if (lexer.empty)
2107         {
2108             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
2109             return -1;
2110         }
2111         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
2112         {
2113             auto next = popToken();
2114             NonterminalType!(12) r;
2115             Location rl;
2116             gotoParent = parse11(r, rl, currentStart, next);
2117             if (gotoParent < 0)
2118                 return gotoParent;
2119             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2120             currentResultLocation = rl;
2121         }
2122         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
2123         {
2124             auto next = popToken();
2125             NonterminalType!(12) r;
2126             Location rl;
2127             gotoParent = parse12(r, rl, currentStart, next);
2128             if (gotoParent < 0)
2129                 return gotoParent;
2130             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2131             currentResultLocation = rl;
2132         }
2133         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
2134         {
2135             auto next = popToken();
2136             NonterminalType!(12) r;
2137             Location rl;
2138             gotoParent = parse13(r, rl, currentStart, next);
2139             if (gotoParent < 0)
2140                 return gotoParent;
2141             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2142             currentResultLocation = rl;
2143         }
2144         else if (lexer.front.symbol == Lexer.tokenID!"IntegerLiteral")
2145         {
2146             auto next = popToken();
2147             NonterminalType!(12) r;
2148             Location rl;
2149             gotoParent = parse14(r, rl, currentStart, next);
2150             if (gotoParent < 0)
2151                 return gotoParent;
2152             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2153             currentResultLocation = rl;
2154         }
2155         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
2156         {
2157             auto next = popToken();
2158             NonterminalType!(12) r;
2159             Location rl;
2160             gotoParent = parse15(r, rl, currentStart, next);
2161             if (gotoParent < 0)
2162                 return gotoParent;
2163             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2164             currentResultLocation = rl;
2165         }
2166         else if (lexer.front.symbol == Lexer.tokenID!q{"="})
2167         {
2168             auto next = popToken();
2169             NonterminalType!(12) r;
2170             Location rl;
2171             gotoParent = parse16(r, rl, currentStart, next);
2172             if (gotoParent < 0)
2173                 return gotoParent;
2174             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2175             currentResultLocation = rl;
2176         }
2177         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
2178         {
2179             auto next = popToken();
2180             NonterminalType!(12) r;
2181             Location rl;
2182             gotoParent = parse17(r, rl, currentStart, next);
2183             if (gotoParent < 0)
2184                 return gotoParent;
2185             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2186             currentResultLocation = rl;
2187         }
2188         else if (lexer.front.symbol == Lexer.tokenID!q{","})
2189         {
2190             auto next = popToken();
2191             NonterminalType!(12) r;
2192             Location rl;
2193             gotoParent = parse18(r, rl, currentStart, next);
2194             if (gotoParent < 0)
2195                 return gotoParent;
2196             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2197             currentResultLocation = rl;
2198         }
2199         else if (lexer.front.symbol == Lexer.tokenID!q{":"})
2200         {
2201             auto next = popToken();
2202             NonterminalType!(12) r;
2203             Location rl;
2204             gotoParent = parse20(r, rl, currentStart, next);
2205             if (gotoParent < 0)
2206                 return gotoParent;
2207             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2208             currentResultLocation = rl;
2209         }
2210         else if (lexer.front.symbol == Lexer.tokenID!q{"{"})
2211         {
2212             auto next = popToken();
2213             NonterminalType!(12) r;
2214             Location rl;
2215             gotoParent = parse21(r, rl, currentStart, next);
2216             if (gotoParent < 0)
2217                 return gotoParent;
2218             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2219             currentResultLocation = rl;
2220         }
2221         else if (lexer.front.symbol == Lexer.tokenID!q{"}"})
2222         {
2223             auto next = popToken();
2224             NonterminalType!(12) r;
2225             Location rl;
2226             gotoParent = parse22(r, rl, currentStart, next);
2227             if (gotoParent < 0)
2228                 return gotoParent;
2229             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2230             currentResultLocation = rl;
2231         }
2232         else if (lexer.front.symbol == Lexer.tokenID!q{"?"})
2233         {
2234             auto next = popToken();
2235             NonterminalType!(12) r;
2236             Location rl;
2237             gotoParent = parse23(r, rl, currentStart, next);
2238             if (gotoParent < 0)
2239                 return gotoParent;
2240             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2241             currentResultLocation = rl;
2242         }
2243         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
2244         {
2245             auto next = popToken();
2246             NonterminalType!(12) r;
2247             Location rl;
2248             gotoParent = parse24(r, rl, currentStart, next);
2249             if (gotoParent < 0)
2250                 return gotoParent;
2251             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2252             currentResultLocation = rl;
2253         }
2254         else if (lexer.front.symbol == Lexer.tokenID!q{"<"})
2255         {
2256             auto next = popToken();
2257             NonterminalType!(12) r;
2258             Location rl;
2259             gotoParent = parse25(r, rl, currentStart, next);
2260             if (gotoParent < 0)
2261                 return gotoParent;
2262             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2263             currentResultLocation = rl;
2264         }
2265         else if (lexer.front.symbol == Lexer.tokenID!q{">"})
2266         {
2267             auto next = popToken();
2268             NonterminalType!(12) r;
2269             Location rl;
2270             gotoParent = parse26(r, rl, currentStart, next);
2271             if (gotoParent < 0)
2272                 return gotoParent;
2273             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2274             currentResultLocation = rl;
2275         }
2276         else if (lexer.front.symbol == Lexer.tokenID!q{"*"})
2277         {
2278             auto next = popToken();
2279             NonterminalType!(12) r;
2280             Location rl;
2281             gotoParent = parse27(r, rl, currentStart, next);
2282             if (gotoParent < 0)
2283                 return gotoParent;
2284             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2285             currentResultLocation = rl;
2286         }
2287         else if (lexer.front.symbol == Lexer.tokenID!q{">>"})
2288         {
2289             auto next = popToken();
2290             NonterminalType!(12) r;
2291             Location rl;
2292             gotoParent = parse28(r, rl, currentStart, next);
2293             if (gotoParent < 0)
2294                 return gotoParent;
2295             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2296             currentResultLocation = rl;
2297         }
2298         else if (lexer.front.symbol == Lexer.tokenID!q{"<<"})
2299         {
2300             auto next = popToken();
2301             NonterminalType!(12) r;
2302             Location rl;
2303             gotoParent = parse29(r, rl, currentStart, next);
2304             if (gotoParent < 0)
2305                 return gotoParent;
2306             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2307             currentResultLocation = rl;
2308         }
2309         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
2310         {
2311             auto next = popToken();
2312             NonterminalType!(12) r;
2313             Location rl;
2314             gotoParent = parse30(r, rl, currentStart, next);
2315             if (gotoParent < 0)
2316                 return gotoParent;
2317             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2318             currentResultLocation = rl;
2319         }
2320         else
2321         {
2322             auto tmp = reduce34/*AnnotationParamsPart* @array = [virtual]*/();
2323             currentResult = ParseResultIn.create(45/*AnnotationParamsPart**/, tmp.val);
2324             currentResultLocation = tmp.start;
2325             gotoParent = 0;
2326         }
2327 
2328         while (gotoParent == 0)
2329         {
2330             if (currentResult.nonterminalID == 12/*AnnotationParamsPart*/)
2331             {
2332                 auto next = ParseStackElem!(Location, NonterminalType!12/*AnnotationParamsPart*/)(currentResultLocation, currentResult.get!(12/*AnnotationParamsPart*/)());
2333                 NonterminalType!(44) r;
2334                 Location rl;
2335                 gotoParent = parse19(r, rl, currentStart, next);
2336                 if (gotoParent < 0)
2337                     return gotoParent;
2338                 currentResult = ParseResultIn.create(44/*AnnotationParamsPart+*/, r);
2339                 currentResultLocation = rl;
2340             }
2341             else if (currentResult.nonterminalID == 44/*AnnotationParamsPart+*/)
2342             {
2343                 auto next = ParseStackElem!(Location, NonterminalType!44/*AnnotationParamsPart+*/)(currentResultLocation, currentResult.get!(44/*AnnotationParamsPart+*/)());
2344                 CreatorInstance.NonterminalUnion!([44, 45]) r;
2345                 Location rl;
2346                 gotoParent = parse31(r, rl, currentStart, next);
2347                 if (gotoParent < 0)
2348                     return gotoParent;
2349                 currentResult = r;
2350                 currentResultLocation = rl;
2351             }
2352             else if (currentResult.nonterminalID == 45/*AnnotationParamsPart**/)
2353             {
2354                 auto next = ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/)(currentResultLocation, currentResult.get!(45/*AnnotationParamsPart**/)());
2355                 NonterminalType!(11) r;
2356                 Location rl;
2357                 gotoParent = parse35(r, rl, parseStart1, stack1, next);
2358                 if (gotoParent < 0)
2359                     return gotoParent;
2360                 assert(gotoParent > 0);
2361                 result = r;
2362                 resultLocation = rl;
2363                 return gotoParent - 1;
2364             }
2365             else
2366                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
2367         }
2368 
2369         result = currentResult.get!(11/*AnnotationParams*/);
2370         resultLocation = currentResultLocation;
2371         return gotoParent - 1;
2372     }
2373     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" Identifier
2374     // type: unknown
2375     //  AnnotationParamsPart ->  Identifier. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2376     private int parse11(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2377     {
2378         alias ThisParseResult = typeof(result);
2379         Location currentStart = lexer.front.currentLocation;
2380         {
2381             auto tmp = reduce38_AnnotationParamsPart/*AnnotationParamsPart = Identifier*/(parseStart1, stack1);
2382             result = tmp.val;
2383             resultLocation = tmp.start;
2384             return 0;
2385         }
2386     }
2387     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" StringLiteral
2388     // type: unknown
2389     //  AnnotationParamsPart ->  StringLiteral. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2390     private int parse12(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2391     {
2392         alias ThisParseResult = typeof(result);
2393         Location currentStart = lexer.front.currentLocation;
2394         {
2395             auto tmp = reduce37_AnnotationParamsPart/*AnnotationParamsPart = StringLiteral*/(parseStart1, stack1);
2396             result = tmp.val;
2397             resultLocation = tmp.start;
2398             return 0;
2399         }
2400     }
2401     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" CharacterSetLiteral
2402     // type: unknown
2403     //  AnnotationParamsPart ->  CharacterSetLiteral. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2404     private int parse13(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2405     {
2406         alias ThisParseResult = typeof(result);
2407         Location currentStart = lexer.front.currentLocation;
2408         {
2409             auto tmp = reduce39_AnnotationParamsPart/*AnnotationParamsPart = CharacterSetLiteral*/(parseStart1, stack1);
2410             result = tmp.val;
2411             resultLocation = tmp.start;
2412             return 0;
2413         }
2414     }
2415     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" IntegerLiteral
2416     // type: unknown
2417     //  AnnotationParamsPart ->  IntegerLiteral. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2418     private int parse14(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2419     {
2420         alias ThisParseResult = typeof(result);
2421         Location currentStart = lexer.front.currentLocation;
2422         {
2423             auto tmp = reduce40_AnnotationParamsPart/*AnnotationParamsPart = IntegerLiteral*/(parseStart1, stack1);
2424             result = tmp.val;
2425             resultLocation = tmp.start;
2426             return 0;
2427         }
2428     }
2429     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" ";"
2430     // type: unknown
2431     //  AnnotationParamsPart ->  ";". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2432     private int parse15(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2433     {
2434         alias ThisParseResult = typeof(result);
2435         Location currentStart = lexer.front.currentLocation;
2436         {
2437             auto tmp = reduce44_AnnotationParamsPart/*AnnotationParamsPart = ";"*/(parseStart1, stack1);
2438             result = tmp.val;
2439             resultLocation = tmp.start;
2440             return 0;
2441         }
2442     }
2443     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "="
2444     // type: unknown
2445     //  AnnotationParamsPart ->  "=". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2446     private int parse16(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2447     {
2448         alias ThisParseResult = typeof(result);
2449         Location currentStart = lexer.front.currentLocation;
2450         {
2451             auto tmp = reduce42_AnnotationParamsPart/*AnnotationParamsPart = "="*/(parseStart1, stack1);
2452             result = tmp.val;
2453             resultLocation = tmp.start;
2454             return 0;
2455         }
2456     }
2457     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "("
2458     // type: unknown
2459     //  AnnotationParamsPart  ->  "(".AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2460     //  AnnotationParamsPart  ->     .Identifier {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2461     //  AnnotationParamsPart  ->     .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2462     //  AnnotationParamsPart  ->     .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2463     //  AnnotationParamsPart  ->     .IntegerLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2464     //  AnnotationParamsPart  ->     .";" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2465     //  AnnotationParamsPart  ->     ."=" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2466     //  AnnotationParamsPart  ->     ."(" AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2467     //  AnnotationParamsPart  ->     ."," {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2468     //  AnnotationParamsPart  ->     .":" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2469     //  AnnotationParamsPart  ->     ."{" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2470     //  AnnotationParamsPart  ->     ."}" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2471     //  AnnotationParamsPart  ->     ."?" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2472     //  AnnotationParamsPart  ->     ."!" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2473     //  AnnotationParamsPart  ->     ."<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2474     //  AnnotationParamsPart  ->     .">" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2475     //  AnnotationParamsPart  ->     ."*" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2476     //  AnnotationParamsPart  ->     .">>" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2477     //  AnnotationParamsPart  ->     ."<<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2478     //  AnnotationParamsPart  ->     ."-" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2479     //  AnnotationParamsPart+ ->     .AnnotationParamsPart {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2480     //  AnnotationParamsPart+ ->     .AnnotationParamsPart+ AnnotationParamsPart {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2481     //  AnnotationParamsPart* ->     . {")"}
2482     //  AnnotationParamsPart* ->     .AnnotationParamsPart+ {")"}
2483     private int parse17(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2484     {
2485         alias ThisParseResult = typeof(result);
2486         alias ParseResultIn = CreatorInstance.NonterminalUnion!([12, 44, 45]);
2487         ParseResultIn currentResult;
2488         Location currentResultLocation;
2489         int gotoParent = -1;
2490         Location currentStart = lexer.front.currentLocation;
2491         if (lexer.empty)
2492         {
2493             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
2494             return -1;
2495         }
2496         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
2497         {
2498             auto next = popToken();
2499             NonterminalType!(12) r;
2500             Location rl;
2501             gotoParent = parse11(r, rl, currentStart, next);
2502             if (gotoParent < 0)
2503                 return gotoParent;
2504             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2505             currentResultLocation = rl;
2506         }
2507         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
2508         {
2509             auto next = popToken();
2510             NonterminalType!(12) r;
2511             Location rl;
2512             gotoParent = parse12(r, rl, currentStart, next);
2513             if (gotoParent < 0)
2514                 return gotoParent;
2515             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2516             currentResultLocation = rl;
2517         }
2518         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
2519         {
2520             auto next = popToken();
2521             NonterminalType!(12) r;
2522             Location rl;
2523             gotoParent = parse13(r, rl, currentStart, next);
2524             if (gotoParent < 0)
2525                 return gotoParent;
2526             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2527             currentResultLocation = rl;
2528         }
2529         else if (lexer.front.symbol == Lexer.tokenID!"IntegerLiteral")
2530         {
2531             auto next = popToken();
2532             NonterminalType!(12) r;
2533             Location rl;
2534             gotoParent = parse14(r, rl, currentStart, next);
2535             if (gotoParent < 0)
2536                 return gotoParent;
2537             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2538             currentResultLocation = rl;
2539         }
2540         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
2541         {
2542             auto next = popToken();
2543             NonterminalType!(12) r;
2544             Location rl;
2545             gotoParent = parse15(r, rl, currentStart, next);
2546             if (gotoParent < 0)
2547                 return gotoParent;
2548             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2549             currentResultLocation = rl;
2550         }
2551         else if (lexer.front.symbol == Lexer.tokenID!q{"="})
2552         {
2553             auto next = popToken();
2554             NonterminalType!(12) r;
2555             Location rl;
2556             gotoParent = parse16(r, rl, currentStart, next);
2557             if (gotoParent < 0)
2558                 return gotoParent;
2559             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2560             currentResultLocation = rl;
2561         }
2562         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
2563         {
2564             auto next = popToken();
2565             NonterminalType!(12) r;
2566             Location rl;
2567             gotoParent = parse17(r, rl, currentStart, next);
2568             if (gotoParent < 0)
2569                 return gotoParent;
2570             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2571             currentResultLocation = rl;
2572         }
2573         else if (lexer.front.symbol == Lexer.tokenID!q{","})
2574         {
2575             auto next = popToken();
2576             NonterminalType!(12) r;
2577             Location rl;
2578             gotoParent = parse18(r, rl, currentStart, next);
2579             if (gotoParent < 0)
2580                 return gotoParent;
2581             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2582             currentResultLocation = rl;
2583         }
2584         else if (lexer.front.symbol == Lexer.tokenID!q{":"})
2585         {
2586             auto next = popToken();
2587             NonterminalType!(12) r;
2588             Location rl;
2589             gotoParent = parse20(r, rl, currentStart, next);
2590             if (gotoParent < 0)
2591                 return gotoParent;
2592             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2593             currentResultLocation = rl;
2594         }
2595         else if (lexer.front.symbol == Lexer.tokenID!q{"{"})
2596         {
2597             auto next = popToken();
2598             NonterminalType!(12) r;
2599             Location rl;
2600             gotoParent = parse21(r, rl, currentStart, next);
2601             if (gotoParent < 0)
2602                 return gotoParent;
2603             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2604             currentResultLocation = rl;
2605         }
2606         else if (lexer.front.symbol == Lexer.tokenID!q{"}"})
2607         {
2608             auto next = popToken();
2609             NonterminalType!(12) r;
2610             Location rl;
2611             gotoParent = parse22(r, rl, currentStart, next);
2612             if (gotoParent < 0)
2613                 return gotoParent;
2614             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2615             currentResultLocation = rl;
2616         }
2617         else if (lexer.front.symbol == Lexer.tokenID!q{"?"})
2618         {
2619             auto next = popToken();
2620             NonterminalType!(12) r;
2621             Location rl;
2622             gotoParent = parse23(r, rl, currentStart, next);
2623             if (gotoParent < 0)
2624                 return gotoParent;
2625             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2626             currentResultLocation = rl;
2627         }
2628         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
2629         {
2630             auto next = popToken();
2631             NonterminalType!(12) r;
2632             Location rl;
2633             gotoParent = parse24(r, rl, currentStart, next);
2634             if (gotoParent < 0)
2635                 return gotoParent;
2636             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2637             currentResultLocation = rl;
2638         }
2639         else if (lexer.front.symbol == Lexer.tokenID!q{"<"})
2640         {
2641             auto next = popToken();
2642             NonterminalType!(12) r;
2643             Location rl;
2644             gotoParent = parse25(r, rl, currentStart, next);
2645             if (gotoParent < 0)
2646                 return gotoParent;
2647             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2648             currentResultLocation = rl;
2649         }
2650         else if (lexer.front.symbol == Lexer.tokenID!q{">"})
2651         {
2652             auto next = popToken();
2653             NonterminalType!(12) r;
2654             Location rl;
2655             gotoParent = parse26(r, rl, currentStart, next);
2656             if (gotoParent < 0)
2657                 return gotoParent;
2658             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2659             currentResultLocation = rl;
2660         }
2661         else if (lexer.front.symbol == Lexer.tokenID!q{"*"})
2662         {
2663             auto next = popToken();
2664             NonterminalType!(12) r;
2665             Location rl;
2666             gotoParent = parse27(r, rl, currentStart, next);
2667             if (gotoParent < 0)
2668                 return gotoParent;
2669             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2670             currentResultLocation = rl;
2671         }
2672         else if (lexer.front.symbol == Lexer.tokenID!q{">>"})
2673         {
2674             auto next = popToken();
2675             NonterminalType!(12) r;
2676             Location rl;
2677             gotoParent = parse28(r, rl, currentStart, next);
2678             if (gotoParent < 0)
2679                 return gotoParent;
2680             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2681             currentResultLocation = rl;
2682         }
2683         else if (lexer.front.symbol == Lexer.tokenID!q{"<<"})
2684         {
2685             auto next = popToken();
2686             NonterminalType!(12) r;
2687             Location rl;
2688             gotoParent = parse29(r, rl, currentStart, next);
2689             if (gotoParent < 0)
2690                 return gotoParent;
2691             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2692             currentResultLocation = rl;
2693         }
2694         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
2695         {
2696             auto next = popToken();
2697             NonterminalType!(12) r;
2698             Location rl;
2699             gotoParent = parse30(r, rl, currentStart, next);
2700             if (gotoParent < 0)
2701                 return gotoParent;
2702             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2703             currentResultLocation = rl;
2704         }
2705         else
2706         {
2707             auto tmp = reduce34/*AnnotationParamsPart* @array = [virtual]*/();
2708             currentResult = ParseResultIn.create(45/*AnnotationParamsPart**/, tmp.val);
2709             currentResultLocation = tmp.start;
2710             gotoParent = 0;
2711         }
2712 
2713         while (gotoParent == 0)
2714         {
2715             if (currentResult.nonterminalID == 12/*AnnotationParamsPart*/)
2716             {
2717                 auto next = ParseStackElem!(Location, NonterminalType!12/*AnnotationParamsPart*/)(currentResultLocation, currentResult.get!(12/*AnnotationParamsPart*/)());
2718                 NonterminalType!(44) r;
2719                 Location rl;
2720                 gotoParent = parse19(r, rl, currentStart, next);
2721                 if (gotoParent < 0)
2722                     return gotoParent;
2723                 currentResult = ParseResultIn.create(44/*AnnotationParamsPart+*/, r);
2724                 currentResultLocation = rl;
2725             }
2726             else if (currentResult.nonterminalID == 44/*AnnotationParamsPart+*/)
2727             {
2728                 auto next = ParseStackElem!(Location, NonterminalType!44/*AnnotationParamsPart+*/)(currentResultLocation, currentResult.get!(44/*AnnotationParamsPart+*/)());
2729                 CreatorInstance.NonterminalUnion!([44, 45]) r;
2730                 Location rl;
2731                 gotoParent = parse31(r, rl, currentStart, next);
2732                 if (gotoParent < 0)
2733                     return gotoParent;
2734                 currentResult = r;
2735                 currentResultLocation = rl;
2736             }
2737             else if (currentResult.nonterminalID == 45/*AnnotationParamsPart**/)
2738             {
2739                 auto next = ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/)(currentResultLocation, currentResult.get!(45/*AnnotationParamsPart**/)());
2740                 NonterminalType!(12) r;
2741                 Location rl;
2742                 gotoParent = parse33(r, rl, parseStart1, stack1, next);
2743                 if (gotoParent < 0)
2744                     return gotoParent;
2745                 assert(gotoParent > 0);
2746                 result = r;
2747                 resultLocation = rl;
2748                 return gotoParent - 1;
2749             }
2750             else
2751                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
2752         }
2753 
2754         result = currentResult.get!(12/*AnnotationParamsPart*/);
2755         resultLocation = currentResultLocation;
2756         return gotoParent - 1;
2757     }
2758     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" ","
2759     // type: unknown
2760     //  AnnotationParamsPart ->  ",". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2761     private int parse18(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2762     {
2763         alias ThisParseResult = typeof(result);
2764         Location currentStart = lexer.front.currentLocation;
2765         {
2766             auto tmp = reduce45_AnnotationParamsPart/*AnnotationParamsPart = ","*/(parseStart1, stack1);
2767             result = tmp.val;
2768             resultLocation = tmp.start;
2769             return 0;
2770         }
2771     }
2772     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" AnnotationParamsPart
2773     // type: unknown
2774     //  AnnotationParamsPart+ ->  AnnotationParamsPart. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2775     private int parse19(ref NonterminalType!(44) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!12/*AnnotationParamsPart*/) stack1)
2776     {
2777         alias ThisParseResult = typeof(result);
2778         Location currentStart = lexer.front.currentLocation;
2779         {
2780             auto tmp = reduce32/*AnnotationParamsPart+ @array = AnnotationParamsPart [virtual]*/(parseStart1, stack1);
2781             result = tmp.val;
2782             resultLocation = tmp.start;
2783             return 0;
2784         }
2785     }
2786     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" ":"
2787     // type: unknown
2788     //  AnnotationParamsPart ->  ":". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2789     private int parse20(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2790     {
2791         alias ThisParseResult = typeof(result);
2792         Location currentStart = lexer.front.currentLocation;
2793         {
2794             auto tmp = reduce43_AnnotationParamsPart/*AnnotationParamsPart = ":"*/(parseStart1, stack1);
2795             result = tmp.val;
2796             resultLocation = tmp.start;
2797             return 0;
2798         }
2799     }
2800     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "{"
2801     // type: unknown
2802     //  AnnotationParamsPart ->  "{". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2803     private int parse21(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2804     {
2805         alias ThisParseResult = typeof(result);
2806         Location currentStart = lexer.front.currentLocation;
2807         {
2808             auto tmp = reduce46_AnnotationParamsPart/*AnnotationParamsPart = "{"*/(parseStart1, stack1);
2809             result = tmp.val;
2810             resultLocation = tmp.start;
2811             return 0;
2812         }
2813     }
2814     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "}"
2815     // type: unknown
2816     //  AnnotationParamsPart ->  "}". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2817     private int parse22(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2818     {
2819         alias ThisParseResult = typeof(result);
2820         Location currentStart = lexer.front.currentLocation;
2821         {
2822             auto tmp = reduce47_AnnotationParamsPart/*AnnotationParamsPart = "}"*/(parseStart1, stack1);
2823             result = tmp.val;
2824             resultLocation = tmp.start;
2825             return 0;
2826         }
2827     }
2828     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "?"
2829     // type: unknown
2830     //  AnnotationParamsPart ->  "?". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2831     private int parse23(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2832     {
2833         alias ThisParseResult = typeof(result);
2834         Location currentStart = lexer.front.currentLocation;
2835         {
2836             auto tmp = reduce48_AnnotationParamsPart/*AnnotationParamsPart = "?"*/(parseStart1, stack1);
2837             result = tmp.val;
2838             resultLocation = tmp.start;
2839             return 0;
2840         }
2841     }
2842     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "!"
2843     // type: unknown
2844     //  AnnotationParamsPart ->  "!". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2845     private int parse24(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2846     {
2847         alias ThisParseResult = typeof(result);
2848         Location currentStart = lexer.front.currentLocation;
2849         {
2850             auto tmp = reduce49_AnnotationParamsPart/*AnnotationParamsPart = "!"*/(parseStart1, stack1);
2851             result = tmp.val;
2852             resultLocation = tmp.start;
2853             return 0;
2854         }
2855     }
2856     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "<"
2857     // type: unknown
2858     //  AnnotationParamsPart ->  "<". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2859     private int parse25(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2860     {
2861         alias ThisParseResult = typeof(result);
2862         Location currentStart = lexer.front.currentLocation;
2863         {
2864             auto tmp = reduce50_AnnotationParamsPart/*AnnotationParamsPart = "<"*/(parseStart1, stack1);
2865             result = tmp.val;
2866             resultLocation = tmp.start;
2867             return 0;
2868         }
2869     }
2870     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" ">"
2871     // type: unknown
2872     //  AnnotationParamsPart ->  ">". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2873     private int parse26(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2874     {
2875         alias ThisParseResult = typeof(result);
2876         Location currentStart = lexer.front.currentLocation;
2877         {
2878             auto tmp = reduce51_AnnotationParamsPart/*AnnotationParamsPart = ">"*/(parseStart1, stack1);
2879             result = tmp.val;
2880             resultLocation = tmp.start;
2881             return 0;
2882         }
2883     }
2884     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "*"
2885     // type: unknown
2886     //  AnnotationParamsPart ->  "*". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2887     private int parse27(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2888     {
2889         alias ThisParseResult = typeof(result);
2890         Location currentStart = lexer.front.currentLocation;
2891         {
2892             auto tmp = reduce52_AnnotationParamsPart/*AnnotationParamsPart = "*"*/(parseStart1, stack1);
2893             result = tmp.val;
2894             resultLocation = tmp.start;
2895             return 0;
2896         }
2897     }
2898     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" ">>"
2899     // type: unknown
2900     //  AnnotationParamsPart ->  ">>". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2901     private int parse28(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2902     {
2903         alias ThisParseResult = typeof(result);
2904         Location currentStart = lexer.front.currentLocation;
2905         {
2906             auto tmp = reduce53_AnnotationParamsPart/*AnnotationParamsPart = ">>"*/(parseStart1, stack1);
2907             result = tmp.val;
2908             resultLocation = tmp.start;
2909             return 0;
2910         }
2911     }
2912     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "<<"
2913     // type: unknown
2914     //  AnnotationParamsPart ->  "<<". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2915     private int parse29(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2916     {
2917         alias ThisParseResult = typeof(result);
2918         Location currentStart = lexer.front.currentLocation;
2919         {
2920             auto tmp = reduce54_AnnotationParamsPart/*AnnotationParamsPart = "<<"*/(parseStart1, stack1);
2921             result = tmp.val;
2922             resultLocation = tmp.start;
2923             return 0;
2924         }
2925     }
2926     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" "-"
2927     // type: unknown
2928     //  AnnotationParamsPart ->  "-". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2929     private int parse30(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
2930     {
2931         alias ThisParseResult = typeof(result);
2932         Location currentStart = lexer.front.currentLocation;
2933         {
2934             auto tmp = reduce55_AnnotationParamsPart/*AnnotationParamsPart = "-"*/(parseStart1, stack1);
2935             result = tmp.val;
2936             resultLocation = tmp.start;
2937             return 0;
2938         }
2939     }
2940     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" AnnotationParamsPart+
2941     // type: unknown
2942     //  AnnotationParamsPart+ ->  AnnotationParamsPart+.AnnotationParamsPart {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2943     //  AnnotationParamsPart* ->  AnnotationParamsPart+. {")"}
2944     //  AnnotationParamsPart  ->                       .Identifier {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2945     //  AnnotationParamsPart  ->                       .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2946     //  AnnotationParamsPart  ->                       .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2947     //  AnnotationParamsPart  ->                       .IntegerLiteral {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2948     //  AnnotationParamsPart  ->                       .";" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2949     //  AnnotationParamsPart  ->                       ."=" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2950     //  AnnotationParamsPart  ->                       ."(" AnnotationParamsPart* ")" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2951     //  AnnotationParamsPart  ->                       ."," {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2952     //  AnnotationParamsPart  ->                       .":" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2953     //  AnnotationParamsPart  ->                       ."{" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2954     //  AnnotationParamsPart  ->                       ."}" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2955     //  AnnotationParamsPart  ->                       ."?" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2956     //  AnnotationParamsPart  ->                       ."!" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2957     //  AnnotationParamsPart  ->                       ."<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2958     //  AnnotationParamsPart  ->                       .">" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2959     //  AnnotationParamsPart  ->                       ."*" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2960     //  AnnotationParamsPart  ->                       .">>" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2961     //  AnnotationParamsPart  ->                       ."<<" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2962     //  AnnotationParamsPart  ->                       ."-" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
2963     private int parse31(ref CreatorInstance.NonterminalUnion!([44, 45]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!44/*AnnotationParamsPart+*/) stack1)
2964     {
2965         alias ThisParseResult = typeof(result);
2966         alias ParseResultIn = CreatorInstance.NonterminalUnion!([12, 44, 45]);
2967         ParseResultIn currentResult;
2968         Location currentResultLocation;
2969         int gotoParent = -1;
2970         Location currentStart = lexer.front.currentLocation;
2971         if (lexer.empty)
2972         {
2973             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
2974             return -1;
2975         }
2976         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
2977         {
2978             auto next = popToken();
2979             NonterminalType!(12) r;
2980             Location rl;
2981             gotoParent = parse11(r, rl, currentStart, next);
2982             if (gotoParent < 0)
2983                 return gotoParent;
2984             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2985             currentResultLocation = rl;
2986         }
2987         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
2988         {
2989             auto next = popToken();
2990             NonterminalType!(12) r;
2991             Location rl;
2992             gotoParent = parse12(r, rl, currentStart, next);
2993             if (gotoParent < 0)
2994                 return gotoParent;
2995             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
2996             currentResultLocation = rl;
2997         }
2998         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
2999         {
3000             auto next = popToken();
3001             NonterminalType!(12) r;
3002             Location rl;
3003             gotoParent = parse13(r, rl, currentStart, next);
3004             if (gotoParent < 0)
3005                 return gotoParent;
3006             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3007             currentResultLocation = rl;
3008         }
3009         else if (lexer.front.symbol == Lexer.tokenID!"IntegerLiteral")
3010         {
3011             auto next = popToken();
3012             NonterminalType!(12) r;
3013             Location rl;
3014             gotoParent = parse14(r, rl, currentStart, next);
3015             if (gotoParent < 0)
3016                 return gotoParent;
3017             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3018             currentResultLocation = rl;
3019         }
3020         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
3021         {
3022             auto next = popToken();
3023             NonterminalType!(12) r;
3024             Location rl;
3025             gotoParent = parse15(r, rl, currentStart, next);
3026             if (gotoParent < 0)
3027                 return gotoParent;
3028             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3029             currentResultLocation = rl;
3030         }
3031         else if (lexer.front.symbol == Lexer.tokenID!q{"="})
3032         {
3033             auto next = popToken();
3034             NonterminalType!(12) r;
3035             Location rl;
3036             gotoParent = parse16(r, rl, currentStart, next);
3037             if (gotoParent < 0)
3038                 return gotoParent;
3039             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3040             currentResultLocation = rl;
3041         }
3042         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
3043         {
3044             auto next = popToken();
3045             NonterminalType!(12) r;
3046             Location rl;
3047             gotoParent = parse17(r, rl, currentStart, next);
3048             if (gotoParent < 0)
3049                 return gotoParent;
3050             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3051             currentResultLocation = rl;
3052         }
3053         else if (lexer.front.symbol == Lexer.tokenID!q{","})
3054         {
3055             auto next = popToken();
3056             NonterminalType!(12) r;
3057             Location rl;
3058             gotoParent = parse18(r, rl, currentStart, next);
3059             if (gotoParent < 0)
3060                 return gotoParent;
3061             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3062             currentResultLocation = rl;
3063         }
3064         else if (lexer.front.symbol == Lexer.tokenID!q{":"})
3065         {
3066             auto next = popToken();
3067             NonterminalType!(12) r;
3068             Location rl;
3069             gotoParent = parse20(r, rl, currentStart, next);
3070             if (gotoParent < 0)
3071                 return gotoParent;
3072             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3073             currentResultLocation = rl;
3074         }
3075         else if (lexer.front.symbol == Lexer.tokenID!q{"{"})
3076         {
3077             auto next = popToken();
3078             NonterminalType!(12) r;
3079             Location rl;
3080             gotoParent = parse21(r, rl, currentStart, next);
3081             if (gotoParent < 0)
3082                 return gotoParent;
3083             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3084             currentResultLocation = rl;
3085         }
3086         else if (lexer.front.symbol == Lexer.tokenID!q{"}"})
3087         {
3088             auto next = popToken();
3089             NonterminalType!(12) r;
3090             Location rl;
3091             gotoParent = parse22(r, rl, currentStart, next);
3092             if (gotoParent < 0)
3093                 return gotoParent;
3094             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3095             currentResultLocation = rl;
3096         }
3097         else if (lexer.front.symbol == Lexer.tokenID!q{"?"})
3098         {
3099             auto next = popToken();
3100             NonterminalType!(12) r;
3101             Location rl;
3102             gotoParent = parse23(r, rl, currentStart, next);
3103             if (gotoParent < 0)
3104                 return gotoParent;
3105             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3106             currentResultLocation = rl;
3107         }
3108         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
3109         {
3110             auto next = popToken();
3111             NonterminalType!(12) r;
3112             Location rl;
3113             gotoParent = parse24(r, rl, currentStart, next);
3114             if (gotoParent < 0)
3115                 return gotoParent;
3116             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3117             currentResultLocation = rl;
3118         }
3119         else if (lexer.front.symbol == Lexer.tokenID!q{"<"})
3120         {
3121             auto next = popToken();
3122             NonterminalType!(12) r;
3123             Location rl;
3124             gotoParent = parse25(r, rl, currentStart, next);
3125             if (gotoParent < 0)
3126                 return gotoParent;
3127             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3128             currentResultLocation = rl;
3129         }
3130         else if (lexer.front.symbol == Lexer.tokenID!q{">"})
3131         {
3132             auto next = popToken();
3133             NonterminalType!(12) r;
3134             Location rl;
3135             gotoParent = parse26(r, rl, currentStart, next);
3136             if (gotoParent < 0)
3137                 return gotoParent;
3138             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3139             currentResultLocation = rl;
3140         }
3141         else if (lexer.front.symbol == Lexer.tokenID!q{"*"})
3142         {
3143             auto next = popToken();
3144             NonterminalType!(12) r;
3145             Location rl;
3146             gotoParent = parse27(r, rl, currentStart, next);
3147             if (gotoParent < 0)
3148                 return gotoParent;
3149             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3150             currentResultLocation = rl;
3151         }
3152         else if (lexer.front.symbol == Lexer.tokenID!q{">>"})
3153         {
3154             auto next = popToken();
3155             NonterminalType!(12) r;
3156             Location rl;
3157             gotoParent = parse28(r, rl, currentStart, next);
3158             if (gotoParent < 0)
3159                 return gotoParent;
3160             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3161             currentResultLocation = rl;
3162         }
3163         else if (lexer.front.symbol == Lexer.tokenID!q{"<<"})
3164         {
3165             auto next = popToken();
3166             NonterminalType!(12) r;
3167             Location rl;
3168             gotoParent = parse29(r, rl, currentStart, next);
3169             if (gotoParent < 0)
3170                 return gotoParent;
3171             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3172             currentResultLocation = rl;
3173         }
3174         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
3175         {
3176             auto next = popToken();
3177             NonterminalType!(12) r;
3178             Location rl;
3179             gotoParent = parse30(r, rl, currentStart, next);
3180             if (gotoParent < 0)
3181                 return gotoParent;
3182             currentResult = ParseResultIn.create(12/*AnnotationParamsPart*/, r);
3183             currentResultLocation = rl;
3184         }
3185         else
3186         {
3187             auto tmp = reduce35/*AnnotationParamsPart* @array = AnnotationParamsPart+ [virtual]*/(parseStart1, stack1);
3188             result = ThisParseResult.create(45/*AnnotationParamsPart**/, tmp.val);
3189             resultLocation = tmp.start;
3190             return 0;
3191         }
3192 
3193         while (gotoParent == 0)
3194         {
3195             if (currentResult.nonterminalID == 12/*AnnotationParamsPart*/)
3196             {
3197                 auto next = ParseStackElem!(Location, NonterminalType!12/*AnnotationParamsPart*/)(currentResultLocation, currentResult.get!(12/*AnnotationParamsPart*/)());
3198                 NonterminalType!(44) r;
3199                 Location rl;
3200                 gotoParent = parse32(r, rl, parseStart1, stack1, next);
3201                 if (gotoParent < 0)
3202                     return gotoParent;
3203                 assert(gotoParent > 0);
3204                 result = ThisParseResult.create(44/*AnnotationParamsPart+*/, r);
3205                 resultLocation = rl;
3206                 return gotoParent - 1;
3207             }
3208             else
3209                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
3210         }
3211 
3212         result = currentResult;
3213         resultLocation = currentResultLocation;
3214         return gotoParent - 1;
3215     }
3216     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" AnnotationParamsPart+ AnnotationParamsPart
3217     // type: unknown
3218     //  AnnotationParamsPart+ ->  AnnotationParamsPart+ AnnotationParamsPart. {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
3219     private int parse32(ref NonterminalType!(44) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!44/*AnnotationParamsPart+*/) stack2, ParseStackElem!(Location, NonterminalType!12/*AnnotationParamsPart*/) stack1)
3220     {
3221         alias ThisParseResult = typeof(result);
3222         Location currentStart = lexer.front.currentLocation;
3223         {
3224             auto tmp = reduce33/*AnnotationParamsPart+ @array = AnnotationParamsPart+ AnnotationParamsPart [virtual]*/(parseStart2, stack2, stack1);
3225             result = tmp.val;
3226             resultLocation = tmp.start;
3227             return 1;
3228         }
3229     }
3230     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" AnnotationParamsPart*
3231     // type: unknown
3232     //  AnnotationParamsPart ->  "(" AnnotationParamsPart*.")" {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
3233     private int parse33(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/) stack1)
3234     {
3235         alias ThisParseResult = typeof(result);
3236         alias ParseResultIn = CreatorInstance.NonterminalUnion!([12]);
3237         ParseResultIn currentResult;
3238         Location currentResultLocation;
3239         int gotoParent = -1;
3240         Location currentStart = lexer.front.currentLocation;
3241         if (lexer.empty)
3242         {
3243             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3244             return -1;
3245         }
3246         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
3247         {
3248             auto next = popToken();
3249             NonterminalType!(12) r;
3250             Location rl;
3251             gotoParent = parse34(r, rl, parseStart2, stack2, stack1, next);
3252             if (gotoParent < 0)
3253                 return gotoParent;
3254             assert(gotoParent > 0);
3255             result = r;
3256             resultLocation = rl;
3257             return gotoParent - 1;
3258         }
3259         else
3260         {
3261             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
3262                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
3263             return -1;
3264         }
3265     }
3266     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" "(" AnnotationParamsPart* ")"
3267     // type: unknown
3268     //  AnnotationParamsPart ->  "(" AnnotationParamsPart* ")". {Identifier, StringLiteral, CharacterSetLiteral, IntegerLiteral, ";", "=", "(", ")", ",", ":", "{", "}", "?", "!", "<", ">", "*", ">>", "<<", "-"}
3269     private int parse34(ref NonterminalType!(12) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/) stack2, ParseStackElem!(Location, Token) stack1)
3270     {
3271         alias ThisParseResult = typeof(result);
3272         Location currentStart = lexer.front.currentLocation;
3273         {
3274             auto tmp = reduce41_AnnotationParamsPart/*AnnotationParamsPart = "(" AnnotationParamsPart* ")"*/(parseStart3, stack3, stack2, stack1);
3275             result = tmp.val;
3276             resultLocation = tmp.start;
3277             return 2;
3278         }
3279     }
3280     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" AnnotationParamsPart*
3281     // type: unknown
3282     //  AnnotationParams ->  "(" AnnotationParamsPart*.")" {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3283     private int parse35(ref NonterminalType!(11) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/) stack1)
3284     {
3285         alias ThisParseResult = typeof(result);
3286         alias ParseResultIn = CreatorInstance.NonterminalUnion!([11]);
3287         ParseResultIn currentResult;
3288         Location currentResultLocation;
3289         int gotoParent = -1;
3290         Location currentStart = lexer.front.currentLocation;
3291         if (lexer.empty)
3292         {
3293             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3294             return -1;
3295         }
3296         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
3297         {
3298             auto next = popToken();
3299             NonterminalType!(11) r;
3300             Location rl;
3301             gotoParent = parse36(r, rl, parseStart2, stack2, stack1, next);
3302             if (gotoParent < 0)
3303                 return gotoParent;
3304             assert(gotoParent > 0);
3305             result = r;
3306             resultLocation = rl;
3307             return gotoParent - 1;
3308         }
3309         else
3310         {
3311             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
3312                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
3313             return -1;
3314         }
3315     }
3316     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier "(" AnnotationParamsPart* ")"
3317     // type: unknown
3318     //  AnnotationParams ->  "(" AnnotationParamsPart* ")". {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3319     private int parse36(ref NonterminalType!(11) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!45/*AnnotationParamsPart**/) stack2, ParseStackElem!(Location, Token) stack1)
3320     {
3321         alias ThisParseResult = typeof(result);
3322         Location currentStart = lexer.front.currentLocation;
3323         {
3324             auto tmp = reduce36_AnnotationParams/*AnnotationParams = "(" AnnotationParamsPart* ")"*/(parseStart3, stack3, stack2, stack1);
3325             result = tmp.val;
3326             resultLocation = tmp.start;
3327             return 2;
3328         }
3329     }
3330     // path: EBNF DeclarationType Identifier MacroParametersPart "@" Identifier AnnotationParams
3331     // type: unknown
3332     //  Annotation ->  "@" Identifier AnnotationParams?. {Identifier, StringLiteral, CharacterSetLiteral, ";", "=", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3333     private int parse37(ref NonterminalType!(10) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!43/*AnnotationParams?*/) stack1)
3334     {
3335         alias ThisParseResult = typeof(result);
3336         Location currentStart = lexer.front.currentLocation;
3337         {
3338             auto tmp = reduce31_Annotation/*Annotation = "@" Identifier AnnotationParams?*/(parseStart3, stack3, stack2, stack1);
3339             result = tmp.val;
3340             resultLocation = tmp.start;
3341             return 2;
3342         }
3343     }
3344     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation+
3345     // type: unknown
3346     //  Annotation+ ->  Annotation+.Annotation {";", "=", "@"}
3347     //  Annotation* ->  Annotation+. {";", "="}
3348     //  Annotation  ->             ."@" Identifier AnnotationParams? {";", "=", "@"}
3349     private int parse38(ref CreatorInstance.NonterminalUnion!([40, 41]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!40/*Annotation+*/) stack1)
3350     {
3351         alias ThisParseResult = typeof(result);
3352         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 40, 41]);
3353         ParseResultIn currentResult;
3354         Location currentResultLocation;
3355         int gotoParent = -1;
3356         Location currentStart = lexer.front.currentLocation;
3357         if (lexer.empty)
3358         {
3359             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3360             return -1;
3361         }
3362         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
3363         {
3364             auto next = popToken();
3365             NonterminalType!(10) r;
3366             Location rl;
3367             gotoParent = parse8(r, rl, currentStart, next);
3368             if (gotoParent < 0)
3369                 return gotoParent;
3370             currentResult = ParseResultIn.create(10/*Annotation*/, r);
3371             currentResultLocation = rl;
3372         }
3373         else
3374         {
3375             auto tmp = reduce14/*Annotation* @array = Annotation+ [virtual]*/(parseStart1, stack1);
3376             result = ThisParseResult.create(41/*Annotation**/, tmp.val);
3377             resultLocation = tmp.start;
3378             return 0;
3379         }
3380 
3381         while (gotoParent == 0)
3382         {
3383             if (currentResult.nonterminalID == 10/*Annotation*/)
3384             {
3385                 auto next = ParseStackElem!(Location, NonterminalType!10/*Annotation*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
3386                 NonterminalType!(40) r;
3387                 Location rl;
3388                 gotoParent = parse39(r, rl, parseStart1, stack1, next);
3389                 if (gotoParent < 0)
3390                     return gotoParent;
3391                 assert(gotoParent > 0);
3392                 result = ThisParseResult.create(40/*Annotation+*/, r);
3393                 resultLocation = rl;
3394                 return gotoParent - 1;
3395             }
3396             else
3397                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
3398         }
3399 
3400         result = currentResult;
3401         resultLocation = currentResultLocation;
3402         return gotoParent - 1;
3403     }
3404     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation+ Annotation
3405     // type: unknown
3406     //  Annotation+ ->  Annotation+ Annotation. {";", "=", "@"}
3407     private int parse39(ref NonterminalType!(40) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!40/*Annotation+*/) stack2, ParseStackElem!(Location, NonterminalType!10/*Annotation*/) stack1)
3408     {
3409         alias ThisParseResult = typeof(result);
3410         Location currentStart = lexer.front.currentLocation;
3411         {
3412             auto tmp = reduce12/*Annotation+ @array = Annotation+ Annotation [virtual]*/(parseStart2, stack2, stack1);
3413             result = tmp.val;
3414             resultLocation = tmp.start;
3415             return 1;
3416         }
3417     }
3418     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation*
3419     // type: unknown
3420     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart? Annotation*.";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
3421     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart? Annotation*."=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
3422     private int parse40(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart4, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack4, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack2, ParseStackElem!(Location, NonterminalType!41/*Annotation**/) stack1)
3423     {
3424         alias ThisParseResult = typeof(result);
3425         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2]);
3426         ParseResultIn currentResult;
3427         Location currentResultLocation;
3428         int gotoParent = -1;
3429         Location currentStart = lexer.front.currentLocation;
3430         if (lexer.empty)
3431         {
3432             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3433             return -1;
3434         }
3435         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
3436         {
3437             auto next = popToken();
3438             NonterminalType!(2) r;
3439             Location rl;
3440             gotoParent = parse41(r, rl, parseStart4, stack4, stack3, stack2, stack1, next);
3441             if (gotoParent < 0)
3442                 return gotoParent;
3443             assert(gotoParent > 0);
3444             result = r;
3445             resultLocation = rl;
3446             return gotoParent - 1;
3447         }
3448         else if (lexer.front.symbol == Lexer.tokenID!q{"="})
3449         {
3450             auto next = popToken();
3451             NonterminalType!(2) r;
3452             Location rl;
3453             gotoParent = parse42(r, rl, parseStart4, stack4, stack3, stack2, stack1, next);
3454             if (gotoParent < 0)
3455                 return gotoParent;
3456             assert(gotoParent > 0);
3457             result = r;
3458             resultLocation = rl;
3459             return gotoParent - 1;
3460         }
3461         else
3462         {
3463             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
3464                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
3465             return -1;
3466         }
3467     }
3468     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* ";"
3469     // type: unknown
3470     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart? Annotation* ";". {$end, Identifier, "fragment", "token", "option", "import", "match"}
3471     private int parse41(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart5, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack5, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack3, ParseStackElem!(Location, NonterminalType!41/*Annotation**/) stack2, ParseStackElem!(Location, Token) stack1)
3472     {
3473         alias ThisParseResult = typeof(result);
3474         Location currentStart = lexer.front.currentLocation;
3475         {
3476             auto tmp = reduce15_SymbolDeclaration/*SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* ";"*/(parseStart5, stack5, stack4, stack3, stack2, stack1);
3477             result = tmp.val;
3478             resultLocation = tmp.start;
3479             return 4;
3480         }
3481     }
3482     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "="
3483     // type: unknown
3484     //  SymbolDeclaration               ->  DeclarationType? Identifier MacroParametersPart? Annotation* "=".Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
3485     //  Annotation                      ->                                                                  ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "|", "^", "t("}
3486     //  NegativeLookahead               ->                                                                  ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "|", "^", "t("}
3487     //  NegativeLookahead               ->                                                                  ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "|", "^", "t("}
3488     //  Expression                      ->                                                                  .Alternation {";"}
3489     //  Alternation                     ->                                                                  .Alternation "|" Concatenation {";", "|"}
3490     //  Alternation                     ->                                                                  .Concatenation {";", "|"}
3491     //  Concatenation                   ->                                                                  .TokenMinus {";", "|"}
3492     //  Concatenation                   ->                                                                  .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {";", "|"}
3493     //  Concatenation                   ->                                                                  .TokenMinus @regArray_ProductionAnnotation+ {";", "|"}
3494     //  Concatenation                   ->                                                                  .@regArray_ProductionAnnotation+ {";", "|"}
3495     //  TokenMinus                      ->                                                                  .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "-", "|", "^", "t("}
3496     //  TokenMinus                      ->                                                                  .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "-", "|", "^", "t("}
3497     //  AnnotatedExpression             ->                                                                  .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "-", "|", "^", "t("}
3498     //  @regArray_ExpressionAnnotation* ->                                                                  . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
3499     //  $regarray_1                     ->                                                                  .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "|", "^", "t("}
3500     //  $regarray_1                     ->                                                                  .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", "@", "{", "!", "<", "|", "^", "t("}
3501     //  @regArray_ProductionAnnotation+ ---> $regarray_1
3502     //  @regArray_ExpressionAnnotation* ---> $regarray_1
3503     //  $regarrayedge_0_1 ---> Annotation
3504     //  $regarrayedge_0_1 ---> NegativeLookahead
3505     private int parse42(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart5, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack5, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack3, ParseStackElem!(Location, NonterminalType!41/*Annotation**/) stack2, ParseStackElem!(Location, Token) stack1)
3506     {
3507         alias ThisParseResult = typeof(result);
3508         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2, 10, 13, 14, 15, 16, 18, 19, 51, 57]);
3509         ParseResultIn currentResult;
3510         Location currentResultLocation;
3511         int gotoParent = -1;
3512         Location currentStart = lexer.front.currentLocation;
3513         if (lexer.empty)
3514         {
3515             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3516             return -1;
3517         }
3518         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
3519         {
3520             auto next = popToken();
3521             NonterminalType!(10) r;
3522             Location rl;
3523             gotoParent = parse8(r, rl, currentStart, next);
3524             if (gotoParent < 0)
3525                 return gotoParent;
3526             currentResult = ParseResultIn.create(10/*Annotation*/, r);
3527             currentResultLocation = rl;
3528         }
3529         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
3530         {
3531             auto next = popToken();
3532             NonterminalType!(13) r;
3533             Location rl;
3534             gotoParent = parse53(r, rl, currentStart, next);
3535             if (gotoParent < 0)
3536                 return gotoParent;
3537             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
3538             currentResultLocation = rl;
3539         }
3540         else
3541         {
3542             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
3543             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
3544             currentResultLocation = tmp.start;
3545             gotoParent = 0;
3546         }
3547 
3548         while (gotoParent == 0)
3549         {
3550             if (currentResult.nonterminalID == 10/*Annotation*/)
3551             {
3552                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
3553                 NonterminalType!(57) r;
3554                 Location rl;
3555                 gotoParent = parse43(r, rl, currentStart, next);
3556                 if (gotoParent < 0)
3557                     return gotoParent;
3558                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
3559                 currentResultLocation = rl;
3560             }
3561             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
3562             {
3563                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
3564                 NonterminalType!(57) r;
3565                 Location rl;
3566                 gotoParent = parse43(r, rl, currentStart, next);
3567                 if (gotoParent < 0)
3568                     return gotoParent;
3569                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
3570                 currentResultLocation = rl;
3571             }
3572             else if (currentResult.nonterminalID == 14/*Expression*/)
3573             {
3574                 auto next = ParseStackElem!(Location, NonterminalType!14/*Expression*/)(currentResultLocation, currentResult.get!(14/*Expression*/)());
3575                 NonterminalType!(2) r;
3576                 Location rl;
3577                 gotoParent = parse44(r, rl, parseStart5, stack5, stack4, stack3, stack2, stack1, next);
3578                 if (gotoParent < 0)
3579                     return gotoParent;
3580                 assert(gotoParent > 0);
3581                 result = r;
3582                 resultLocation = rl;
3583                 return gotoParent - 1;
3584             }
3585             else if (currentResult.nonterminalID == 15/*Alternation*/)
3586             {
3587                 auto next = ParseStackElem!(Location, NonterminalType!15/*Alternation*/)(currentResultLocation, currentResult.get!(15/*Alternation*/)());
3588                 CreatorInstance.NonterminalUnion!([14, 15]) r;
3589                 Location rl;
3590                 gotoParent = parse46(r, rl, currentStart, next);
3591                 if (gotoParent < 0)
3592                     return gotoParent;
3593                 currentResult = r;
3594                 currentResultLocation = rl;
3595             }
3596             else if (currentResult.nonterminalID == 16/*Concatenation*/)
3597             {
3598                 currentResult = ParseResultIn.create(15/*Alternation*/, currentResult.get!(16/*Concatenation*/));
3599                 currentResultLocation = currentResultLocation;
3600             }
3601             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
3602             {
3603                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
3604                 CreatorInstance.NonterminalUnion!([16, 18]) r;
3605                 Location rl;
3606                 gotoParent = parse49(r, rl, currentStart, next);
3607                 if (gotoParent < 0)
3608                     return gotoParent;
3609                 currentResult = r;
3610                 currentResultLocation = rl;
3611             }
3612             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
3613             {
3614                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
3615                 currentResultLocation = currentResultLocation;
3616             }
3617             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
3618             {
3619                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
3620                 NonterminalType!(19) r;
3621                 Location rl;
3622                 gotoParent = parse63(r, rl, currentStart, next);
3623                 if (gotoParent < 0)
3624                     return gotoParent;
3625                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
3626                 currentResultLocation = rl;
3627             }
3628             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
3629             {
3630                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
3631                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
3632                 Location rl;
3633                 gotoParent = parse80(r, rl, currentStart, next);
3634                 if (gotoParent < 0)
3635                     return gotoParent;
3636                 currentResult = r;
3637                 currentResultLocation = rl;
3638             }
3639             else
3640                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
3641         }
3642 
3643         result = currentResult.get!(2/*SymbolDeclaration*/);
3644         resultLocation = currentResultLocation;
3645         return gotoParent - 1;
3646     }
3647     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Annotation
3648     // type: unknown
3649     //  $regarray_1 ->  $regarrayedge_0_1. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3650     private int parse43(ref NonterminalType!(57) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/) stack1)
3651     {
3652         alias ThisParseResult = typeof(result);
3653         Location currentStart = lexer.front.currentLocation;
3654         {
3655             auto tmp = reduce126/*$regarray_1 @array @directUnwrap = @inheritAnyTag $regarrayedge_0_1*/(parseStart1, stack1);
3656             result = tmp.val;
3657             resultLocation = tmp.start;
3658             return 0;
3659         }
3660     }
3661     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Expression
3662     // type: unknown
3663     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression.";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
3664     private int parse44(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart6, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack6, ParseStackElem!(Location, Token) stack5, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack4, ParseStackElem!(Location, NonterminalType!41/*Annotation**/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack1)
3665     {
3666         alias ThisParseResult = typeof(result);
3667         alias ParseResultIn = CreatorInstance.NonterminalUnion!([2]);
3668         ParseResultIn currentResult;
3669         Location currentResultLocation;
3670         int gotoParent = -1;
3671         Location currentStart = lexer.front.currentLocation;
3672         if (lexer.empty)
3673         {
3674             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3675             return -1;
3676         }
3677         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
3678         {
3679             auto next = popToken();
3680             NonterminalType!(2) r;
3681             Location rl;
3682             gotoParent = parse45(r, rl, parseStart6, stack6, stack5, stack4, stack3, stack2, stack1, next);
3683             if (gotoParent < 0)
3684                 return gotoParent;
3685             assert(gotoParent > 0);
3686             result = r;
3687             resultLocation = rl;
3688             return gotoParent - 1;
3689         }
3690         else
3691         {
3692             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
3693                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
3694             return -1;
3695         }
3696     }
3697     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Expression ";"
3698     // type: unknown
3699     //  SymbolDeclaration ->  DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";". {$end, Identifier, "fragment", "token", "option", "import", "match"}
3700     private int parse45(ref NonterminalType!(2) result, ref Location resultLocation, Location parseStart7, ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/) stack7, ParseStackElem!(Location, Token) stack6, ParseStackElem!(Location, NonterminalType!39/*MacroParametersPart?*/) stack5, ParseStackElem!(Location, NonterminalType!41/*Annotation**/) stack4, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack2, ParseStackElem!(Location, Token) stack1)
3701     {
3702         alias ThisParseResult = typeof(result);
3703         Location currentStart = lexer.front.currentLocation;
3704         {
3705             auto tmp = reduce16_SymbolDeclaration/*SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";"*/(parseStart7, stack7, stack6, stack5, stack4, stack3, stack2, stack1);
3706             result = tmp.val;
3707             resultLocation = tmp.start;
3708             return 6;
3709         }
3710     }
3711     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation
3712     // type: unknown
3713     //  Expression  ->  Alternation. {";", ")", ",", "}"}
3714     //  Alternation ->  Alternation."|" Concatenation {";", ")", ",", "}", "|"}
3715     private int parse46(ref CreatorInstance.NonterminalUnion!([14, 15]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!15/*Alternation*/) stack1)
3716     {
3717         alias ThisParseResult = typeof(result);
3718         alias ParseResultIn = CreatorInstance.NonterminalUnion!([14, 15]);
3719         ParseResultIn currentResult;
3720         Location currentResultLocation;
3721         int gotoParent = -1;
3722         Location currentStart = lexer.front.currentLocation;
3723         if (lexer.empty)
3724         {
3725             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3726             return -1;
3727         }
3728         else if (lexer.front.symbol == Lexer.tokenID!q{"|"})
3729         {
3730             auto next = popToken();
3731             NonterminalType!(15) r;
3732             Location rl;
3733             gotoParent = parse47(r, rl, parseStart1, stack1, next);
3734             if (gotoParent < 0)
3735                 return gotoParent;
3736             assert(gotoParent > 0);
3737             result = ThisParseResult.create(15/*Alternation*/, r);
3738             resultLocation = rl;
3739             return gotoParent - 1;
3740         }
3741         else
3742         {
3743             auto tmp = reduce58_Expression/*Expression = <Alternation*/(parseStart1, stack1);
3744             result = ThisParseResult.create(14/*Expression*/, tmp.val);
3745             resultLocation = tmp.start;
3746             return 0;
3747         }
3748     }
3749     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|"
3750     // type: unknown
3751     //  Alternation                     ->  Alternation "|".Concatenation {";", ")", ",", "}", "|"}
3752     //  Annotation                      ->                 ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3753     //  NegativeLookahead               ->                 ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3754     //  NegativeLookahead               ->                 ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3755     //  Concatenation                   ->                 .TokenMinus {";", ")", ",", "}", "|"}
3756     //  Concatenation                   ->                 .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {";", ")", ",", "}", "|"}
3757     //  Concatenation                   ->                 .TokenMinus @regArray_ProductionAnnotation+ {";", ")", ",", "}", "|"}
3758     //  Concatenation                   ->                 .@regArray_ProductionAnnotation+ {";", ")", ",", "}", "|"}
3759     //  TokenMinus                      ->                 .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3760     //  TokenMinus                      ->                 .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3761     //  AnnotatedExpression             ->                 .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3762     //  @regArray_ExpressionAnnotation* ->                 . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
3763     //  $regarray_1                     ->                 .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3764     //  $regarray_1                     ->                 .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3765     //  @regArray_ProductionAnnotation+ ---> $regarray_1
3766     //  @regArray_ExpressionAnnotation* ---> $regarray_1
3767     //  $regarrayedge_0_1 ---> Annotation
3768     //  $regarrayedge_0_1 ---> NegativeLookahead
3769     private int parse47(ref NonterminalType!(15) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!15/*Alternation*/) stack2, ParseStackElem!(Location, Token) stack1)
3770     {
3771         alias ThisParseResult = typeof(result);
3772         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 15, 16, 18, 19, 51, 57]);
3773         ParseResultIn currentResult;
3774         Location currentResultLocation;
3775         int gotoParent = -1;
3776         Location currentStart = lexer.front.currentLocation;
3777         if (lexer.empty)
3778         {
3779             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3780             return -1;
3781         }
3782         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
3783         {
3784             auto next = popToken();
3785             NonterminalType!(10) r;
3786             Location rl;
3787             gotoParent = parse8(r, rl, currentStart, next);
3788             if (gotoParent < 0)
3789                 return gotoParent;
3790             currentResult = ParseResultIn.create(10/*Annotation*/, r);
3791             currentResultLocation = rl;
3792         }
3793         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
3794         {
3795             auto next = popToken();
3796             NonterminalType!(13) r;
3797             Location rl;
3798             gotoParent = parse53(r, rl, currentStart, next);
3799             if (gotoParent < 0)
3800                 return gotoParent;
3801             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
3802             currentResultLocation = rl;
3803         }
3804         else
3805         {
3806             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
3807             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
3808             currentResultLocation = tmp.start;
3809             gotoParent = 0;
3810         }
3811 
3812         while (gotoParent == 0)
3813         {
3814             if (currentResult.nonterminalID == 10/*Annotation*/)
3815             {
3816                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
3817                 NonterminalType!(57) r;
3818                 Location rl;
3819                 gotoParent = parse43(r, rl, currentStart, next);
3820                 if (gotoParent < 0)
3821                     return gotoParent;
3822                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
3823                 currentResultLocation = rl;
3824             }
3825             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
3826             {
3827                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
3828                 NonterminalType!(57) r;
3829                 Location rl;
3830                 gotoParent = parse43(r, rl, currentStart, next);
3831                 if (gotoParent < 0)
3832                     return gotoParent;
3833                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
3834                 currentResultLocation = rl;
3835             }
3836             else if (currentResult.nonterminalID == 16/*Concatenation*/)
3837             {
3838                 auto next = ParseStackElem!(Location, NonterminalType!16/*Concatenation*/)(currentResultLocation, currentResult.get!(16/*Concatenation*/)());
3839                 NonterminalType!(15) r;
3840                 Location rl;
3841                 gotoParent = parse48(r, rl, parseStart2, stack2, stack1, next);
3842                 if (gotoParent < 0)
3843                     return gotoParent;
3844                 assert(gotoParent > 0);
3845                 result = r;
3846                 resultLocation = rl;
3847                 return gotoParent - 1;
3848             }
3849             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
3850             {
3851                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
3852                 CreatorInstance.NonterminalUnion!([16, 18]) r;
3853                 Location rl;
3854                 gotoParent = parse49(r, rl, currentStart, next);
3855                 if (gotoParent < 0)
3856                     return gotoParent;
3857                 currentResult = r;
3858                 currentResultLocation = rl;
3859             }
3860             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
3861             {
3862                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
3863                 currentResultLocation = currentResultLocation;
3864             }
3865             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
3866             {
3867                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
3868                 NonterminalType!(19) r;
3869                 Location rl;
3870                 gotoParent = parse63(r, rl, currentStart, next);
3871                 if (gotoParent < 0)
3872                     return gotoParent;
3873                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
3874                 currentResultLocation = rl;
3875             }
3876             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
3877             {
3878                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
3879                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
3880                 Location rl;
3881                 gotoParent = parse80(r, rl, currentStart, next);
3882                 if (gotoParent < 0)
3883                     return gotoParent;
3884                 currentResult = r;
3885                 currentResultLocation = rl;
3886             }
3887             else
3888                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
3889         }
3890 
3891         result = currentResult.get!(15/*Alternation*/);
3892         resultLocation = currentResultLocation;
3893         return gotoParent - 1;
3894     }
3895     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" Concatenation
3896     // type: unknown
3897     //  Alternation ->  Alternation "|" Concatenation. {";", ")", ",", "}", "|"}
3898     private int parse48(ref NonterminalType!(15) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!15/*Alternation*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!16/*Concatenation*/) stack1)
3899     {
3900         alias ThisParseResult = typeof(result);
3901         Location currentStart = lexer.front.currentLocation;
3902         {
3903             auto tmp = reduce60_Alternation/*Alternation = Alternation "|" Concatenation*/(parseStart3, stack3, stack2, stack1);
3904             result = tmp.val;
3905             resultLocation = tmp.start;
3906             return 2;
3907         }
3908     }
3909     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus
3910     // type: unknown
3911     //  Concatenation                   ->  TokenMinus. {";", ")", ",", "}", "|"}
3912     //  Concatenation                   ->  TokenMinus.TokenMinus+ @regArray_ProductionAnnotation* {";", ")", ",", "}", "|"}
3913     //  Concatenation                   ->  TokenMinus.@regArray_ProductionAnnotation+ {";", ")", ",", "}", "|"}
3914     //  TokenMinus                      ->  TokenMinus."-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3915     //  Annotation                      ->            ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3916     //  NegativeLookahead               ->            ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3917     //  NegativeLookahead               ->            ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3918     //  TokenMinus                      ->            .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3919     //  TokenMinus                      ->            .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3920     //  AnnotatedExpression             ->            .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
3921     //  TokenMinus+                     ->            .TokenMinus {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3922     //  TokenMinus+                     ->            .TokenMinus+ TokenMinus {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3923     //  @regArray_ExpressionAnnotation* ->            . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
3924     //  $regarray_1                     ->            .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3925     //  $regarray_1                     ->            .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
3926     //  @regArray_ProductionAnnotation+ ---> $regarray_1
3927     //  @regArray_ExpressionAnnotation* ---> $regarray_1
3928     //  $regarrayedge_0_1 ---> Annotation
3929     //  $regarrayedge_0_1 ---> NegativeLookahead
3930     private int parse49(ref CreatorInstance.NonterminalUnion!([16, 18]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack1)
3931     {
3932         alias ThisParseResult = typeof(result);
3933         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 16, 18, 19, 46, 51, 57]);
3934         ParseResultIn currentResult;
3935         Location currentResultLocation;
3936         int gotoParent = -1;
3937         Location currentStart = lexer.front.currentLocation;
3938         if (lexer.empty)
3939         {
3940             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
3941             return -1;
3942         }
3943         else if (lexer.front.symbol == Lexer.tokenID!"Identifier" || lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
3944         {
3945             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
3946             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
3947             currentResultLocation = tmp.start;
3948             gotoParent = 0;
3949         }
3950         else if (lexer.front.symbol == Lexer.tokenID!q{";"} || lexer.front.symbol == Lexer.tokenID!q{")"} || lexer.front.symbol == Lexer.tokenID!q{","} || lexer.front.symbol == Lexer.tokenID!q{"}"} || lexer.front.symbol == Lexer.tokenID!q{"|"})
3951         {
3952             auto tmp = reduce61_Concatenation/*Concatenation = <TokenMinus*/(parseStart1, stack1);
3953             result = ThisParseResult.create(16/*Concatenation*/, tmp.val);
3954             resultLocation = tmp.start;
3955             return 0;
3956         }
3957         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
3958         {
3959             auto next = popToken();
3960             NonterminalType!(10) r;
3961             Location rl;
3962             gotoParent = parse8(r, rl, currentStart, next);
3963             if (gotoParent < 0)
3964                 return gotoParent;
3965             currentResult = ParseResultIn.create(10/*Annotation*/, r);
3966             currentResultLocation = rl;
3967         }
3968         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
3969         {
3970             auto next = popToken();
3971             NonterminalType!(13) r;
3972             Location rl;
3973             gotoParent = parse53(r, rl, currentStart, next);
3974             if (gotoParent < 0)
3975                 return gotoParent;
3976             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
3977             currentResultLocation = rl;
3978         }
3979         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
3980         {
3981             auto next = popToken();
3982             NonterminalType!(18) r;
3983             Location rl;
3984             gotoParent = parse51(r, rl, parseStart1, stack1, next);
3985             if (gotoParent < 0)
3986                 return gotoParent;
3987             assert(gotoParent > 0);
3988             result = ThisParseResult.create(18/*TokenMinus*/, r);
3989             resultLocation = rl;
3990             return gotoParent - 1;
3991         }
3992         else
3993         {
3994             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
3995                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
3996             return -1;
3997         }
3998 
3999         while (gotoParent == 0)
4000         {
4001             if (currentResult.nonterminalID == 10/*Annotation*/)
4002             {
4003                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
4004                 NonterminalType!(57) r;
4005                 Location rl;
4006                 gotoParent = parse43(r, rl, currentStart, next);
4007                 if (gotoParent < 0)
4008                     return gotoParent;
4009                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4010                 currentResultLocation = rl;
4011             }
4012             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
4013             {
4014                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
4015                 NonterminalType!(57) r;
4016                 Location rl;
4017                 gotoParent = parse43(r, rl, currentStart, next);
4018                 if (gotoParent < 0)
4019                     return gotoParent;
4020                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4021                 currentResultLocation = rl;
4022             }
4023             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
4024             {
4025                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
4026                 CreatorInstance.NonterminalUnion!([18, 46]) r;
4027                 Location rl;
4028                 gotoParent = parse50(r, rl, currentStart, next);
4029                 if (gotoParent < 0)
4030                     return gotoParent;
4031                 currentResult = r;
4032                 currentResultLocation = rl;
4033             }
4034             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
4035             {
4036                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
4037                 currentResultLocation = currentResultLocation;
4038             }
4039             else if (currentResult.nonterminalID == 46/*TokenMinus+*/)
4040             {
4041                 auto next = ParseStackElem!(Location, NonterminalType!46/*TokenMinus+*/)(currentResultLocation, currentResult.get!(46/*TokenMinus+*/)());
4042                 CreatorInstance.NonterminalUnion!([16, 46]) r;
4043                 Location rl;
4044                 gotoParent = parse109(r, rl, parseStart1, stack1, currentStart, next);
4045                 if (gotoParent < 0)
4046                     return gotoParent;
4047                 currentResult = r;
4048                 currentResultLocation = rl;
4049             }
4050             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
4051             {
4052                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
4053                 NonterminalType!(19) r;
4054                 Location rl;
4055                 gotoParent = parse63(r, rl, currentStart, next);
4056                 if (gotoParent < 0)
4057                     return gotoParent;
4058                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
4059                 currentResultLocation = rl;
4060             }
4061             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
4062             {
4063                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
4064                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
4065                 Location rl;
4066                 gotoParent = parse113(r, rl, parseStart1, stack1, currentStart, next);
4067                 if (gotoParent < 0)
4068                     return gotoParent;
4069                 currentResult = r;
4070                 currentResultLocation = rl;
4071             }
4072             else
4073                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4074         }
4075 
4076         result = currentResult;
4077         resultLocation = currentResultLocation;
4078         return gotoParent - 1;
4079     }
4080     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus
4081     // type: unknown
4082     //  TokenMinus  ->  TokenMinus."-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
4083     //  TokenMinus+ ->  TokenMinus. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4084     private int parse50(ref CreatorInstance.NonterminalUnion!([18, 46]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack1)
4085     {
4086         alias ThisParseResult = typeof(result);
4087         alias ParseResultIn = CreatorInstance.NonterminalUnion!([18, 46]);
4088         ParseResultIn currentResult;
4089         Location currentResultLocation;
4090         int gotoParent = -1;
4091         Location currentStart = lexer.front.currentLocation;
4092         if (lexer.empty)
4093         {
4094             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4095             return -1;
4096         }
4097         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
4098         {
4099             auto next = popToken();
4100             NonterminalType!(18) r;
4101             Location rl;
4102             gotoParent = parse51(r, rl, parseStart1, stack1, next);
4103             if (gotoParent < 0)
4104                 return gotoParent;
4105             assert(gotoParent > 0);
4106             result = ThisParseResult.create(18/*TokenMinus*/, r);
4107             resultLocation = rl;
4108             return gotoParent - 1;
4109         }
4110         else
4111         {
4112             auto tmp = reduce62/*TokenMinus+ @array = TokenMinus [virtual]*/(parseStart1, stack1);
4113             result = ThisParseResult.create(46/*TokenMinus+*/, tmp.val);
4114             resultLocation = tmp.start;
4115             return 0;
4116         }
4117     }
4118     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-"
4119     // type: unknown
4120     //  TokenMinus                      ->  TokenMinus "-".AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
4121     //  Annotation                      ->                ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
4122     //  NegativeLookahead               ->                ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
4123     //  NegativeLookahead               ->                ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
4124     //  AnnotatedExpression             ->                .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
4125     //  @regArray_ExpressionAnnotation* ->                . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4126     //  $regarray_1                     ->                .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
4127     //  $regarray_1                     ->                .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
4128     //  @regArray_ExpressionAnnotation* ---> $regarray_1
4129     //  $regarrayedge_0_1 ---> Annotation
4130     //  $regarrayedge_0_1 ---> NegativeLookahead
4131     private int parse51(ref NonterminalType!(18) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack2, ParseStackElem!(Location, Token) stack1)
4132     {
4133         alias ThisParseResult = typeof(result);
4134         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 18, 19, 51, 57]);
4135         ParseResultIn currentResult;
4136         Location currentResultLocation;
4137         int gotoParent = -1;
4138         Location currentStart = lexer.front.currentLocation;
4139         if (lexer.empty)
4140         {
4141             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4142             return -1;
4143         }
4144         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
4145         {
4146             auto next = popToken();
4147             NonterminalType!(10) r;
4148             Location rl;
4149             gotoParent = parse8(r, rl, currentStart, next);
4150             if (gotoParent < 0)
4151                 return gotoParent;
4152             currentResult = ParseResultIn.create(10/*Annotation*/, r);
4153             currentResultLocation = rl;
4154         }
4155         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
4156         {
4157             auto next = popToken();
4158             NonterminalType!(13) r;
4159             Location rl;
4160             gotoParent = parse53(r, rl, currentStart, next);
4161             if (gotoParent < 0)
4162                 return gotoParent;
4163             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
4164             currentResultLocation = rl;
4165         }
4166         else
4167         {
4168             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
4169             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
4170             currentResultLocation = tmp.start;
4171             gotoParent = 0;
4172         }
4173 
4174         while (gotoParent == 0)
4175         {
4176             if (currentResult.nonterminalID == 10/*Annotation*/)
4177             {
4178                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
4179                 NonterminalType!(57) r;
4180                 Location rl;
4181                 gotoParent = parse43(r, rl, currentStart, next);
4182                 if (gotoParent < 0)
4183                     return gotoParent;
4184                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4185                 currentResultLocation = rl;
4186             }
4187             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
4188             {
4189                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
4190                 NonterminalType!(57) r;
4191                 Location rl;
4192                 gotoParent = parse43(r, rl, currentStart, next);
4193                 if (gotoParent < 0)
4194                     return gotoParent;
4195                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4196                 currentResultLocation = rl;
4197             }
4198             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
4199             {
4200                 auto next = ParseStackElem!(Location, NonterminalType!19/*AnnotatedExpression*/)(currentResultLocation, currentResult.get!(19/*AnnotatedExpression*/)());
4201                 NonterminalType!(18) r;
4202                 Location rl;
4203                 gotoParent = parse52(r, rl, parseStart2, stack2, stack1, next);
4204                 if (gotoParent < 0)
4205                     return gotoParent;
4206                 assert(gotoParent > 0);
4207                 result = r;
4208                 resultLocation = rl;
4209                 return gotoParent - 1;
4210             }
4211             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
4212             {
4213                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
4214                 NonterminalType!(19) r;
4215                 Location rl;
4216                 gotoParent = parse63(r, rl, currentStart, next);
4217                 if (gotoParent < 0)
4218                     return gotoParent;
4219                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
4220                 currentResultLocation = rl;
4221             }
4222             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
4223             {
4224                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
4225                 CreatorInstance.NonterminalUnion!([19, 57]) r;
4226                 Location rl;
4227                 gotoParent = parse108(r, rl, currentStart, next);
4228                 if (gotoParent < 0)
4229                     return gotoParent;
4230                 currentResult = r;
4231                 currentResultLocation = rl;
4232             }
4233             else
4234                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4235         }
4236 
4237         result = currentResult.get!(18/*TokenMinus*/);
4238         resultLocation = currentResultLocation;
4239         return gotoParent - 1;
4240     }
4241     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" AnnotatedExpression
4242     // type: unknown
4243     //  TokenMinus ->  TokenMinus "-" AnnotatedExpression. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
4244     private int parse52(ref NonterminalType!(18) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!19/*AnnotatedExpression*/) stack1)
4245     {
4246         alias ThisParseResult = typeof(result);
4247         Location currentStart = lexer.front.currentLocation;
4248         {
4249             auto tmp = reduce76_TokenMinus/*TokenMinus = TokenMinus "-" AnnotatedExpression*/(parseStart3, stack3, stack2, stack1);
4250             result = tmp.val;
4251             resultLocation = tmp.start;
4252             return 2;
4253         }
4254     }
4255     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!"
4256     // type: unknown
4257     //  NegativeLookahead ->  "!".Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4258     //  NegativeLookahead ->  "!"."anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4259     //  Symbol            ->     .Name {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4260     //  Symbol            ->     .Token {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4261     //  Symbol            ->     .MacroInstance {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4262     //  Name              ->     .Identifier {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4263     //  Token             ->     .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4264     //  Token             ->     .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4265     //  MacroInstance     ->     .Identifier "(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
4266     private int parse53(ref NonterminalType!(13) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
4267     {
4268         alias ThisParseResult = typeof(result);
4269         alias ParseResultIn = CreatorInstance.NonterminalUnion!([13, 28, 29, 30, 33]);
4270         ParseResultIn currentResult;
4271         Location currentResultLocation;
4272         int gotoParent = -1;
4273         Location currentStart = lexer.front.currentLocation;
4274         if (lexer.empty)
4275         {
4276             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4277             return -1;
4278         }
4279         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
4280         {
4281             auto next = popToken();
4282             CreatorInstance.NonterminalUnion!([29, 33]) r;
4283             Location rl;
4284             gotoParent = parse54(r, rl, currentStart, next);
4285             if (gotoParent < 0)
4286                 return gotoParent;
4287             currentResult = r;
4288             currentResultLocation = rl;
4289         }
4290         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
4291         {
4292             auto next = popToken();
4293             NonterminalType!(30) r;
4294             Location rl;
4295             gotoParent = parse75(r, rl, currentStart, next);
4296             if (gotoParent < 0)
4297                 return gotoParent;
4298             currentResult = ParseResultIn.create(30/*Token*/, r);
4299             currentResultLocation = rl;
4300         }
4301         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
4302         {
4303             auto next = popToken();
4304             NonterminalType!(30) r;
4305             Location rl;
4306             gotoParent = parse76(r, rl, currentStart, next);
4307             if (gotoParent < 0)
4308                 return gotoParent;
4309             currentResult = ParseResultIn.create(30/*Token*/, r);
4310             currentResultLocation = rl;
4311         }
4312         else if (lexer.front.symbol == Lexer.tokenID!q{"anytoken"})
4313         {
4314             auto next = popToken();
4315             NonterminalType!(13) r;
4316             Location rl;
4317             gotoParent = parse107(r, rl, parseStart1, stack1, next);
4318             if (gotoParent < 0)
4319                 return gotoParent;
4320             assert(gotoParent > 0);
4321             result = r;
4322             resultLocation = rl;
4323             return gotoParent - 1;
4324         }
4325         else
4326         {
4327             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
4328                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
4329             return -1;
4330         }
4331 
4332         while (gotoParent == 0)
4333         {
4334             if (currentResult.nonterminalID == 28/*Symbol*/)
4335             {
4336                 auto next = ParseStackElem!(Location, NonterminalType!28/*Symbol*/)(currentResultLocation, currentResult.get!(28/*Symbol*/)());
4337                 NonterminalType!(13) r;
4338                 Location rl;
4339                 gotoParent = parse106(r, rl, parseStart1, stack1, next);
4340                 if (gotoParent < 0)
4341                     return gotoParent;
4342                 assert(gotoParent > 0);
4343                 result = r;
4344                 resultLocation = rl;
4345                 return gotoParent - 1;
4346             }
4347             else if (currentResult.nonterminalID == 29/*Name*/)
4348             {
4349                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(29/*Name*/));
4350                 currentResultLocation = currentResultLocation;
4351             }
4352             else if (currentResult.nonterminalID == 30/*Token*/)
4353             {
4354                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(30/*Token*/));
4355                 currentResultLocation = currentResultLocation;
4356             }
4357             else if (currentResult.nonterminalID == 33/*MacroInstance*/)
4358             {
4359                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(33/*MacroInstance*/));
4360                 currentResultLocation = currentResultLocation;
4361             }
4362             else
4363                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4364         }
4365 
4366         result = currentResult.get!(13/*NegativeLookahead*/);
4367         resultLocation = currentResultLocation;
4368         return gotoParent - 1;
4369     }
4370     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier
4371     // type: unknown
4372     //  Name          ->  Identifier. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
4373     //  MacroInstance ->  Identifier."(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
4374     private int parse54(ref CreatorInstance.NonterminalUnion!([29, 33]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
4375     {
4376         alias ThisParseResult = typeof(result);
4377         alias ParseResultIn = CreatorInstance.NonterminalUnion!([29, 33]);
4378         ParseResultIn currentResult;
4379         Location currentResultLocation;
4380         int gotoParent = -1;
4381         Location currentStart = lexer.front.currentLocation;
4382         if (lexer.empty)
4383         {
4384             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4385             return -1;
4386         }
4387         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
4388         {
4389             auto next = popToken();
4390             NonterminalType!(33) r;
4391             Location rl;
4392             gotoParent = parse55(r, rl, parseStart1, stack1, next);
4393             if (gotoParent < 0)
4394                 return gotoParent;
4395             assert(gotoParent > 0);
4396             result = ThisParseResult.create(33/*MacroInstance*/, r);
4397             resultLocation = rl;
4398             return gotoParent - 1;
4399         }
4400         else
4401         {
4402             auto tmp = reduce108_Name/*Name = Identifier*/(parseStart1, stack1);
4403             result = ThisParseResult.create(29/*Name*/, tmp.val);
4404             resultLocation = tmp.start;
4405             return 0;
4406         }
4407     }
4408     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "("
4409     // type: unknown
4410     //  MacroInstance                   ->  Identifier "(".ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
4411     //  Annotation                      ->                ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4412     //  NegativeLookahead               ->                ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4413     //  NegativeLookahead               ->                ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4414     //  Expression                      ->                .Alternation {")", ","}
4415     //  Alternation                     ->                .Alternation "|" Concatenation {")", ",", "|"}
4416     //  Alternation                     ->                .Concatenation {")", ",", "|"}
4417     //  Concatenation                   ->                .TokenMinus {")", ",", "|"}
4418     //  Concatenation                   ->                .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {")", ",", "|"}
4419     //  Concatenation                   ->                .TokenMinus @regArray_ProductionAnnotation+ {")", ",", "|"}
4420     //  Concatenation                   ->                .@regArray_ProductionAnnotation+ {")", ",", "|"}
4421     //  TokenMinus                      ->                .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4422     //  TokenMinus                      ->                .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4423     //  AnnotatedExpression             ->                .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4424     //  ExpressionList                  ->                .Expression {")", ","}
4425     //  ExpressionList                  ->                .ExpressionList "," Expression {")", ","}
4426     //  @regArray_ExpressionAnnotation* ->                . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4427     //  ExpressionList?                 ->                . {")"}
4428     //  $regarray_1                     ->                .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4429     //  $regarray_1                     ->                .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4430     //  ExpressionList? ---> ExpressionList
4431     //  @regArray_ProductionAnnotation+ ---> $regarray_1
4432     //  @regArray_ExpressionAnnotation* ---> $regarray_1
4433     //  $regarrayedge_0_1 ---> Annotation
4434     //  $regarrayedge_0_1 ---> NegativeLookahead
4435     private int parse55(ref NonterminalType!(33) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
4436     {
4437         alias ThisParseResult = typeof(result);
4438         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 14, 15, 16, 18, 19, 33, 35, 51, 55, 57]);
4439         ParseResultIn currentResult;
4440         Location currentResultLocation;
4441         int gotoParent = -1;
4442         Location currentStart = lexer.front.currentLocation;
4443         if (lexer.empty)
4444         {
4445             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4446             return -1;
4447         }
4448         else if (lexer.front.symbol == Lexer.tokenID!"Identifier" || lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
4449         {
4450             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
4451             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
4452             currentResultLocation = tmp.start;
4453             gotoParent = 0;
4454         }
4455         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
4456         {
4457             auto tmp = reduce115/*ExpressionList? = [virtual]*/();
4458             currentResult = ParseResultIn.create(55/*ExpressionList?*/, tmp.val);
4459             currentResultLocation = tmp.start;
4460             gotoParent = 0;
4461         }
4462         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
4463         {
4464             auto next = popToken();
4465             NonterminalType!(10) r;
4466             Location rl;
4467             gotoParent = parse8(r, rl, currentStart, next);
4468             if (gotoParent < 0)
4469                 return gotoParent;
4470             currentResult = ParseResultIn.create(10/*Annotation*/, r);
4471             currentResultLocation = rl;
4472         }
4473         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
4474         {
4475             auto next = popToken();
4476             NonterminalType!(13) r;
4477             Location rl;
4478             gotoParent = parse53(r, rl, currentStart, next);
4479             if (gotoParent < 0)
4480                 return gotoParent;
4481             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
4482             currentResultLocation = rl;
4483         }
4484         else
4485         {
4486             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
4487                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
4488             return -1;
4489         }
4490 
4491         while (gotoParent == 0)
4492         {
4493             if (currentResult.nonterminalID == 10/*Annotation*/)
4494             {
4495                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
4496                 NonterminalType!(57) r;
4497                 Location rl;
4498                 gotoParent = parse43(r, rl, currentStart, next);
4499                 if (gotoParent < 0)
4500                     return gotoParent;
4501                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4502                 currentResultLocation = rl;
4503             }
4504             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
4505             {
4506                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
4507                 NonterminalType!(57) r;
4508                 Location rl;
4509                 gotoParent = parse43(r, rl, currentStart, next);
4510                 if (gotoParent < 0)
4511                     return gotoParent;
4512                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4513                 currentResultLocation = rl;
4514             }
4515             else if (currentResult.nonterminalID == 14/*Expression*/)
4516             {
4517                 auto next = ParseStackElem!(Location, NonterminalType!14/*Expression*/)(currentResultLocation, currentResult.get!(14/*Expression*/)());
4518                 NonterminalType!(35) r;
4519                 Location rl;
4520                 gotoParent = parse56(r, rl, currentStart, next);
4521                 if (gotoParent < 0)
4522                     return gotoParent;
4523                 currentResult = ParseResultIn.create(35/*ExpressionList*/, r);
4524                 currentResultLocation = rl;
4525             }
4526             else if (currentResult.nonterminalID == 15/*Alternation*/)
4527             {
4528                 auto next = ParseStackElem!(Location, NonterminalType!15/*Alternation*/)(currentResultLocation, currentResult.get!(15/*Alternation*/)());
4529                 CreatorInstance.NonterminalUnion!([14, 15]) r;
4530                 Location rl;
4531                 gotoParent = parse46(r, rl, currentStart, next);
4532                 if (gotoParent < 0)
4533                     return gotoParent;
4534                 currentResult = r;
4535                 currentResultLocation = rl;
4536             }
4537             else if (currentResult.nonterminalID == 16/*Concatenation*/)
4538             {
4539                 currentResult = ParseResultIn.create(15/*Alternation*/, currentResult.get!(16/*Concatenation*/));
4540                 currentResultLocation = currentResultLocation;
4541             }
4542             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
4543             {
4544                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
4545                 CreatorInstance.NonterminalUnion!([16, 18]) r;
4546                 Location rl;
4547                 gotoParent = parse49(r, rl, currentStart, next);
4548                 if (gotoParent < 0)
4549                     return gotoParent;
4550                 currentResult = r;
4551                 currentResultLocation = rl;
4552             }
4553             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
4554             {
4555                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
4556                 currentResultLocation = currentResultLocation;
4557             }
4558             else if (currentResult.nonterminalID == 35/*ExpressionList*/)
4559             {
4560                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(35/*ExpressionList*/)());
4561                 CreatorInstance.NonterminalUnion!([33, 35]) r;
4562                 Location rl;
4563                 gotoParent = parse59(r, rl, parseStart2, stack2, stack1, currentStart, next);
4564                 if (gotoParent < 0)
4565                     return gotoParent;
4566                 currentResult = r;
4567                 currentResultLocation = rl;
4568             }
4569             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
4570             {
4571                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
4572                 NonterminalType!(19) r;
4573                 Location rl;
4574                 gotoParent = parse63(r, rl, currentStart, next);
4575                 if (gotoParent < 0)
4576                     return gotoParent;
4577                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
4578                 currentResultLocation = rl;
4579             }
4580             else if (currentResult.nonterminalID == 55/*ExpressionList?*/)
4581             {
4582                 auto next = ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/)(currentResultLocation, currentResult.get!(55/*ExpressionList?*/)());
4583                 NonterminalType!(33) r;
4584                 Location rl;
4585                 gotoParent = parse105(r, rl, parseStart2, stack2, stack1, next);
4586                 if (gotoParent < 0)
4587                     return gotoParent;
4588                 assert(gotoParent > 0);
4589                 result = r;
4590                 resultLocation = rl;
4591                 return gotoParent - 1;
4592             }
4593             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
4594             {
4595                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
4596                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
4597                 Location rl;
4598                 gotoParent = parse80(r, rl, currentStart, next);
4599                 if (gotoParent < 0)
4600                     return gotoParent;
4601                 currentResult = r;
4602                 currentResultLocation = rl;
4603             }
4604             else
4605                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4606         }
4607 
4608         result = currentResult.get!(33/*MacroInstance*/);
4609         resultLocation = currentResultLocation;
4610         return gotoParent - 1;
4611     }
4612     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" Expression
4613     // type: unknown
4614     //  ExpressionList ->  Expression. {")", ","}
4615     private int parse56(ref NonterminalType!(35) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack1)
4616     {
4617         alias ThisParseResult = typeof(result);
4618         Location currentStart = lexer.front.currentLocation;
4619         {
4620             auto tmp = reduce118_ExpressionList/*ExpressionList @array = Expression*/(parseStart1, stack1);
4621             result = tmp.val;
4622             resultLocation = tmp.start;
4623             return 0;
4624         }
4625     }
4626     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList
4627     // type: unknown
4628     //  MacroInstance  ->  Identifier "(" ExpressionList?.")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
4629     //  ExpressionList ->                  ExpressionList."," Expression {")", ","}
4630     private int parse59(ref CreatorInstance.NonterminalUnion!([33, 35]) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
4631     {
4632         alias ThisParseResult = typeof(result);
4633         alias ParseResultIn = CreatorInstance.NonterminalUnion!([33, 35]);
4634         ParseResultIn currentResult;
4635         Location currentResultLocation;
4636         int gotoParent = -1;
4637         Location currentStart = lexer.front.currentLocation;
4638         if (lexer.empty)
4639         {
4640             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4641             return -1;
4642         }
4643         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
4644         {
4645             auto next = popToken();
4646             NonterminalType!(33) r;
4647             Location rl;
4648             gotoParent = parse60(r, rl, parseStart3, stack3, stack2, stack1, next);
4649             if (gotoParent < 0)
4650                 return gotoParent;
4651             assert(gotoParent > 0);
4652             result = ThisParseResult.create(33/*MacroInstance*/, r);
4653             resultLocation = rl;
4654             return gotoParent - 1;
4655         }
4656         else if (lexer.front.symbol == Lexer.tokenID!q{","})
4657         {
4658             auto next = popToken();
4659             NonterminalType!(35) r;
4660             Location rl;
4661             gotoParent = parse61(r, rl, parseStart1, stack1, next);
4662             if (gotoParent < 0)
4663                 return gotoParent;
4664             assert(gotoParent > 0);
4665             result = ThisParseResult.create(35/*ExpressionList*/, r);
4666             resultLocation = rl;
4667             return gotoParent - 1;
4668         }
4669         else
4670         {
4671             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
4672                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
4673             return -1;
4674         }
4675     }
4676     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList ")"
4677     // type: unknown
4678     //  MacroInstance ->  Identifier "(" ExpressionList? ")". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
4679     private int parse60(ref NonterminalType!(33) result, ref Location resultLocation, Location parseStart4, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/) stack2, ParseStackElem!(Location, Token) stack1)
4680     {
4681         alias ThisParseResult = typeof(result);
4682         Location currentStart = lexer.front.currentLocation;
4683         {
4684             auto tmp = reduce116_MacroInstance/*MacroInstance = Identifier "(" ExpressionList? ")"*/(parseStart4, stack4, stack3, stack2, stack1);
4685             result = tmp.val;
4686             resultLocation = tmp.start;
4687             return 3;
4688         }
4689     }
4690     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList ","
4691     // type: unknown
4692     //  ExpressionList                  ->  ExpressionList ",".Expression {")", ","}
4693     //  Annotation                      ->                    ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4694     //  NegativeLookahead               ->                    ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4695     //  NegativeLookahead               ->                    ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4696     //  Expression                      ->                    .Alternation {")", ","}
4697     //  Alternation                     ->                    .Alternation "|" Concatenation {")", ",", "|"}
4698     //  Alternation                     ->                    .Concatenation {")", ",", "|"}
4699     //  Concatenation                   ->                    .TokenMinus {")", ",", "|"}
4700     //  Concatenation                   ->                    .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {")", ",", "|"}
4701     //  Concatenation                   ->                    .TokenMinus @regArray_ProductionAnnotation+ {")", ",", "|"}
4702     //  Concatenation                   ->                    .@regArray_ProductionAnnotation+ {")", ",", "|"}
4703     //  TokenMinus                      ->                    .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4704     //  TokenMinus                      ->                    .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4705     //  AnnotatedExpression             ->                    .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
4706     //  @regArray_ExpressionAnnotation* ->                    . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4707     //  $regarray_1                     ->                    .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4708     //  $regarray_1                     ->                    .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
4709     //  @regArray_ProductionAnnotation+ ---> $regarray_1
4710     //  @regArray_ExpressionAnnotation* ---> $regarray_1
4711     //  $regarrayedge_0_1 ---> Annotation
4712     //  $regarrayedge_0_1 ---> NegativeLookahead
4713     private int parse61(ref NonterminalType!(35) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!35/*ExpressionList*/) stack2, ParseStackElem!(Location, Token) stack1)
4714     {
4715         alias ThisParseResult = typeof(result);
4716         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 14, 15, 16, 18, 19, 35, 51, 57]);
4717         ParseResultIn currentResult;
4718         Location currentResultLocation;
4719         int gotoParent = -1;
4720         Location currentStart = lexer.front.currentLocation;
4721         if (lexer.empty)
4722         {
4723             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4724             return -1;
4725         }
4726         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
4727         {
4728             auto next = popToken();
4729             NonterminalType!(10) r;
4730             Location rl;
4731             gotoParent = parse8(r, rl, currentStart, next);
4732             if (gotoParent < 0)
4733                 return gotoParent;
4734             currentResult = ParseResultIn.create(10/*Annotation*/, r);
4735             currentResultLocation = rl;
4736         }
4737         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
4738         {
4739             auto next = popToken();
4740             NonterminalType!(13) r;
4741             Location rl;
4742             gotoParent = parse53(r, rl, currentStart, next);
4743             if (gotoParent < 0)
4744                 return gotoParent;
4745             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
4746             currentResultLocation = rl;
4747         }
4748         else
4749         {
4750             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
4751             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
4752             currentResultLocation = tmp.start;
4753             gotoParent = 0;
4754         }
4755 
4756         while (gotoParent == 0)
4757         {
4758             if (currentResult.nonterminalID == 10/*Annotation*/)
4759             {
4760                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
4761                 NonterminalType!(57) r;
4762                 Location rl;
4763                 gotoParent = parse43(r, rl, currentStart, next);
4764                 if (gotoParent < 0)
4765                     return gotoParent;
4766                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4767                 currentResultLocation = rl;
4768             }
4769             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
4770             {
4771                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
4772                 NonterminalType!(57) r;
4773                 Location rl;
4774                 gotoParent = parse43(r, rl, currentStart, next);
4775                 if (gotoParent < 0)
4776                     return gotoParent;
4777                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
4778                 currentResultLocation = rl;
4779             }
4780             else if (currentResult.nonterminalID == 14/*Expression*/)
4781             {
4782                 auto next = ParseStackElem!(Location, NonterminalType!14/*Expression*/)(currentResultLocation, currentResult.get!(14/*Expression*/)());
4783                 NonterminalType!(35) r;
4784                 Location rl;
4785                 gotoParent = parse62(r, rl, parseStart2, stack2, stack1, next);
4786                 if (gotoParent < 0)
4787                     return gotoParent;
4788                 assert(gotoParent > 0);
4789                 result = r;
4790                 resultLocation = rl;
4791                 return gotoParent - 1;
4792             }
4793             else if (currentResult.nonterminalID == 15/*Alternation*/)
4794             {
4795                 auto next = ParseStackElem!(Location, NonterminalType!15/*Alternation*/)(currentResultLocation, currentResult.get!(15/*Alternation*/)());
4796                 CreatorInstance.NonterminalUnion!([14, 15]) r;
4797                 Location rl;
4798                 gotoParent = parse46(r, rl, currentStart, next);
4799                 if (gotoParent < 0)
4800                     return gotoParent;
4801                 currentResult = r;
4802                 currentResultLocation = rl;
4803             }
4804             else if (currentResult.nonterminalID == 16/*Concatenation*/)
4805             {
4806                 currentResult = ParseResultIn.create(15/*Alternation*/, currentResult.get!(16/*Concatenation*/));
4807                 currentResultLocation = currentResultLocation;
4808             }
4809             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
4810             {
4811                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
4812                 CreatorInstance.NonterminalUnion!([16, 18]) r;
4813                 Location rl;
4814                 gotoParent = parse49(r, rl, currentStart, next);
4815                 if (gotoParent < 0)
4816                     return gotoParent;
4817                 currentResult = r;
4818                 currentResultLocation = rl;
4819             }
4820             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
4821             {
4822                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
4823                 currentResultLocation = currentResultLocation;
4824             }
4825             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
4826             {
4827                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
4828                 NonterminalType!(19) r;
4829                 Location rl;
4830                 gotoParent = parse63(r, rl, currentStart, next);
4831                 if (gotoParent < 0)
4832                     return gotoParent;
4833                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
4834                 currentResultLocation = rl;
4835             }
4836             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
4837             {
4838                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
4839                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
4840                 Location rl;
4841                 gotoParent = parse80(r, rl, currentStart, next);
4842                 if (gotoParent < 0)
4843                     return gotoParent;
4844                 currentResult = r;
4845                 currentResultLocation = rl;
4846             }
4847             else
4848                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4849         }
4850 
4851         result = currentResult.get!(35/*ExpressionList*/);
4852         resultLocation = currentResultLocation;
4853         return gotoParent - 1;
4854     }
4855     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," Expression
4856     // type: unknown
4857     //  ExpressionList ->  ExpressionList "," Expression. {")", ","}
4858     private int parse62(ref NonterminalType!(35) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!35/*ExpressionList*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack1)
4859     {
4860         alias ThisParseResult = typeof(result);
4861         Location currentStart = lexer.front.currentLocation;
4862         {
4863             auto tmp = reduce119_ExpressionList/*ExpressionList @array = ExpressionList "," Expression*/(parseStart3, stack3, stack2, stack1);
4864             result = tmp.val;
4865             resultLocation = tmp.start;
4866             return 2;
4867         }
4868     }
4869     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation*
4870     // type: unknown
4871     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation*.ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
4872     //  ExpressionName      ->                                 .Identifier ":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4873     //  ExpressionName?     ->                                 . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4874     //  ExpressionName? ---> ExpressionName
4875     private int parse63(ref NonterminalType!(19) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/) stack1)
4876     {
4877         alias ThisParseResult = typeof(result);
4878         alias ParseResultIn = CreatorInstance.NonterminalUnion!([19, 21, 52]);
4879         ParseResultIn currentResult;
4880         Location currentResultLocation;
4881         int gotoParent = -1;
4882         Location currentStart = lexer.front.currentLocation;
4883         if (lexer.empty)
4884         {
4885             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4886             return -1;
4887         }
4888         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
4889         {
4890             Lexer tmpLexer = *lexer;
4891             tmpLexer.popFront();
4892             if (!tmpLexer.empty && tmpLexer.front.symbol == Lexer.tokenID!q{":"})
4893             {
4894                 auto next = popToken();
4895                 NonterminalType!(21) r;
4896                 Location rl;
4897                 gotoParent = parse64(r, rl, currentStart, next);
4898                 if (gotoParent < 0)
4899                     return gotoParent;
4900                 currentResult = ParseResultIn.create(21/*ExpressionName*/, r);
4901                 currentResultLocation = rl;
4902             }
4903             else if (!tmpLexer.empty && (tmpLexer.front.symbol == Lexer.tokenID!"Identifier" || tmpLexer.front.symbol == Lexer.tokenID!"StringLiteral" || tmpLexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || tmpLexer.front.symbol == Lexer.tokenID!q{";"} || tmpLexer.front.symbol == Lexer.tokenID!q{"("} || tmpLexer.front.symbol == Lexer.tokenID!q{")"} || tmpLexer.front.symbol == Lexer.tokenID!q{","} || tmpLexer.front.symbol == Lexer.tokenID!q{"..."} || tmpLexer.front.symbol == Lexer.tokenID!q{"@"} || tmpLexer.front.symbol == Lexer.tokenID!q{"{"} || tmpLexer.front.symbol == Lexer.tokenID!q{"}"} || tmpLexer.front.symbol == Lexer.tokenID!q{"?"} || tmpLexer.front.symbol == Lexer.tokenID!q{"!"} || tmpLexer.front.symbol == Lexer.tokenID!q{"<"} || tmpLexer.front.symbol == Lexer.tokenID!q{"*"} || tmpLexer.front.symbol == Lexer.tokenID!q{">>"} || tmpLexer.front.symbol == Lexer.tokenID!q{"-"} || tmpLexer.front.symbol == Lexer.tokenID!q{"|"} || tmpLexer.front.symbol == Lexer.tokenID!q{"^"} || tmpLexer.front.symbol == Lexer.tokenID!q{"+"} || tmpLexer.front.symbol == Lexer.tokenID!q{"t("}))
4904             {
4905                 auto tmp = reduce82/*ExpressionName? = [virtual]*/();
4906                 currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
4907                 currentResultLocation = tmp.start;
4908                 gotoParent = 0;
4909             }
4910             else
4911             {
4912                 lastError = new SingleParseException!Location(text("unexpected Token \"", tmpLexer.front.content, "\"  \"", lexer.tokenName(tmpLexer.front.symbol), "\""),
4913                     tmpLexer.front.currentLocation, tmpLexer.front.currentTokenEnd);
4914                 return -1;
4915             }
4916         }
4917         else
4918         {
4919             auto tmp = reduce82/*ExpressionName? = [virtual]*/();
4920             currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
4921             currentResultLocation = tmp.start;
4922             gotoParent = 0;
4923         }
4924 
4925         while (gotoParent == 0)
4926         {
4927             if (currentResult.nonterminalID == 21/*ExpressionName*/)
4928             {
4929                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(21/*ExpressionName*/)());
4930                 NonterminalType!(19) r;
4931                 Location rl;
4932                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
4933                 if (gotoParent < 0)
4934                     return gotoParent;
4935                 assert(gotoParent > 0);
4936                 result = r;
4937                 resultLocation = rl;
4938                 return gotoParent - 1;
4939             }
4940             else if (currentResult.nonterminalID == 52/*ExpressionName?*/)
4941             {
4942                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(52/*ExpressionName?*/)());
4943                 NonterminalType!(19) r;
4944                 Location rl;
4945                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
4946                 if (gotoParent < 0)
4947                     return gotoParent;
4948                 assert(gotoParent > 0);
4949                 result = r;
4950                 resultLocation = rl;
4951                 return gotoParent - 1;
4952             }
4953             else
4954                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
4955         }
4956 
4957         result = currentResult.get!(19/*AnnotatedExpression*/);
4958         resultLocation = currentResultLocation;
4959         return gotoParent - 1;
4960     }
4961     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* Identifier
4962     // type: unknown
4963     //  ExpressionName ->  Identifier.":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
4964     private int parse64(ref NonterminalType!(21) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
4965     {
4966         alias ThisParseResult = typeof(result);
4967         alias ParseResultIn = CreatorInstance.NonterminalUnion!([21]);
4968         ParseResultIn currentResult;
4969         Location currentResultLocation;
4970         int gotoParent = -1;
4971         Location currentStart = lexer.front.currentLocation;
4972         if (lexer.empty)
4973         {
4974             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
4975             return -1;
4976         }
4977         else if (lexer.front.symbol == Lexer.tokenID!q{":"})
4978         {
4979             auto next = popToken();
4980             NonterminalType!(21) r;
4981             Location rl;
4982             gotoParent = parse65(r, rl, parseStart1, stack1, next);
4983             if (gotoParent < 0)
4984                 return gotoParent;
4985             assert(gotoParent > 0);
4986             result = r;
4987             resultLocation = rl;
4988             return gotoParent - 1;
4989         }
4990         else
4991         {
4992             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
4993                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
4994             return -1;
4995         }
4996     }
4997     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* Identifier ":"
4998     // type: unknown
4999     //  ExpressionName ->  Identifier ":". {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5000     private int parse65(ref NonterminalType!(21) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
5001     {
5002         alias ThisParseResult = typeof(result);
5003         Location currentStart = lexer.front.currentLocation;
5004         {
5005             auto tmp = reduce90_ExpressionName/*ExpressionName = Identifier ":"*/(parseStart2, stack2, stack1);
5006             result = tmp.val;
5007             resultLocation = tmp.start;
5008             return 1;
5009         }
5010     }
5011     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName
5012     // type: unknown
5013     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation* ExpressionName?.ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5014     //  ExpressionPrefix    ->                                                 ."<" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5015     //  ExpressionPrefix    ->                                                 ."^" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5016     //  ExpressionPrefix+   ->                                                 .ExpressionPrefix {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5017     //  ExpressionPrefix+   ->                                                 .ExpressionPrefix+ ExpressionPrefix {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5018     //  ExpressionPrefix*   ->                                                 . {Identifier, StringLiteral, CharacterSetLiteral, "{", "t("}
5019     //  ExpressionPrefix*   ->                                                 .ExpressionPrefix+ {Identifier, StringLiteral, CharacterSetLiteral, "{", "t("}
5020     private int parse66(ref NonterminalType!(19) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/) stack2, ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/) stack1)
5021     {
5022         alias ThisParseResult = typeof(result);
5023         alias ParseResultIn = CreatorInstance.NonterminalUnion!([19, 22, 53, 54]);
5024         ParseResultIn currentResult;
5025         Location currentResultLocation;
5026         int gotoParent = -1;
5027         Location currentStart = lexer.front.currentLocation;
5028         if (lexer.empty)
5029         {
5030             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5031             return -1;
5032         }
5033         else if (lexer.front.symbol == Lexer.tokenID!q{"<"})
5034         {
5035             auto next = popToken();
5036             NonterminalType!(22) r;
5037             Location rl;
5038             gotoParent = parse68(r, rl, currentStart, next);
5039             if (gotoParent < 0)
5040                 return gotoParent;
5041             currentResult = ParseResultIn.create(22/*ExpressionPrefix*/, r);
5042             currentResultLocation = rl;
5043         }
5044         else if (lexer.front.symbol == Lexer.tokenID!q{"^"})
5045         {
5046             auto next = popToken();
5047             NonterminalType!(22) r;
5048             Location rl;
5049             gotoParent = parse69(r, rl, currentStart, next);
5050             if (gotoParent < 0)
5051                 return gotoParent;
5052             currentResult = ParseResultIn.create(22/*ExpressionPrefix*/, r);
5053             currentResultLocation = rl;
5054         }
5055         else
5056         {
5057             auto tmp = reduce85/*ExpressionPrefix* @array = [virtual]*/();
5058             currentResult = ParseResultIn.create(54/*ExpressionPrefix**/, tmp.val);
5059             currentResultLocation = tmp.start;
5060             gotoParent = 0;
5061         }
5062 
5063         while (gotoParent == 0)
5064         {
5065             if (currentResult.nonterminalID == 22/*ExpressionPrefix*/)
5066             {
5067                 auto next = ParseStackElem!(Location, NonterminalType!22/*ExpressionPrefix*/)(currentResultLocation, currentResult.get!(22/*ExpressionPrefix*/)());
5068                 NonterminalType!(53) r;
5069                 Location rl;
5070                 gotoParent = parse67(r, rl, currentStart, next);
5071                 if (gotoParent < 0)
5072                     return gotoParent;
5073                 currentResult = ParseResultIn.create(53/*ExpressionPrefix+*/, r);
5074                 currentResultLocation = rl;
5075             }
5076             else if (currentResult.nonterminalID == 53/*ExpressionPrefix+*/)
5077             {
5078                 auto next = ParseStackElem!(Location, NonterminalType!53/*ExpressionPrefix+*/)(currentResultLocation, currentResult.get!(53/*ExpressionPrefix+*/)());
5079                 CreatorInstance.NonterminalUnion!([53, 54]) r;
5080                 Location rl;
5081                 gotoParent = parse70(r, rl, currentStart, next);
5082                 if (gotoParent < 0)
5083                     return gotoParent;
5084                 currentResult = r;
5085                 currentResultLocation = rl;
5086             }
5087             else if (currentResult.nonterminalID == 54/*ExpressionPrefix**/)
5088             {
5089                 auto next = ParseStackElem!(Location, NonterminalType!54/*ExpressionPrefix**/)(currentResultLocation, currentResult.get!(54/*ExpressionPrefix**/)());
5090                 NonterminalType!(19) r;
5091                 Location rl;
5092                 gotoParent = parse72(r, rl, parseStart2, stack2, stack1, next);
5093                 if (gotoParent < 0)
5094                     return gotoParent;
5095                 assert(gotoParent > 0);
5096                 result = r;
5097                 resultLocation = rl;
5098                 return gotoParent - 1;
5099             }
5100             else
5101                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
5102         }
5103 
5104         result = currentResult.get!(19/*AnnotatedExpression*/);
5105         resultLocation = currentResultLocation;
5106         return gotoParent - 1;
5107     }
5108     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix
5109     // type: unknown
5110     //  ExpressionPrefix+ ->  ExpressionPrefix. {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5111     private int parse67(ref NonterminalType!(53) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!22/*ExpressionPrefix*/) stack1)
5112     {
5113         alias ThisParseResult = typeof(result);
5114         Location currentStart = lexer.front.currentLocation;
5115         {
5116             auto tmp = reduce83/*ExpressionPrefix+ @array = ExpressionPrefix [virtual]*/(parseStart1, stack1);
5117             result = tmp.val;
5118             resultLocation = tmp.start;
5119             return 0;
5120         }
5121     }
5122     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName "<"
5123     // type: unknown
5124     //  ExpressionPrefix ->  "<". {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5125     private int parse68(ref NonterminalType!(22) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5126     {
5127         alias ThisParseResult = typeof(result);
5128         Location currentStart = lexer.front.currentLocation;
5129         {
5130             auto tmp = reduce91_ExpressionPrefix/*ExpressionPrefix = "<"*/(parseStart1, stack1);
5131             result = tmp.val;
5132             resultLocation = tmp.start;
5133             return 0;
5134         }
5135     }
5136     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName "^"
5137     // type: unknown
5138     //  ExpressionPrefix ->  "^". {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5139     private int parse69(ref NonterminalType!(22) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5140     {
5141         alias ThisParseResult = typeof(result);
5142         Location currentStart = lexer.front.currentLocation;
5143         {
5144             auto tmp = reduce92_ExpressionPrefix/*ExpressionPrefix = "^"*/(parseStart1, stack1);
5145             result = tmp.val;
5146             resultLocation = tmp.start;
5147             return 0;
5148         }
5149     }
5150     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix+
5151     // type: unknown
5152     //  ExpressionPrefix+ ->  ExpressionPrefix+.ExpressionPrefix {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5153     //  ExpressionPrefix* ->  ExpressionPrefix+. {Identifier, StringLiteral, CharacterSetLiteral, "{", "t("}
5154     //  ExpressionPrefix  ->                   ."<" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5155     //  ExpressionPrefix  ->                   ."^" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5156     private int parse70(ref CreatorInstance.NonterminalUnion!([53, 54]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!53/*ExpressionPrefix+*/) stack1)
5157     {
5158         alias ThisParseResult = typeof(result);
5159         alias ParseResultIn = CreatorInstance.NonterminalUnion!([22, 53, 54]);
5160         ParseResultIn currentResult;
5161         Location currentResultLocation;
5162         int gotoParent = -1;
5163         Location currentStart = lexer.front.currentLocation;
5164         if (lexer.empty)
5165         {
5166             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5167             return -1;
5168         }
5169         else if (lexer.front.symbol == Lexer.tokenID!q{"<"})
5170         {
5171             auto next = popToken();
5172             NonterminalType!(22) r;
5173             Location rl;
5174             gotoParent = parse68(r, rl, currentStart, next);
5175             if (gotoParent < 0)
5176                 return gotoParent;
5177             currentResult = ParseResultIn.create(22/*ExpressionPrefix*/, r);
5178             currentResultLocation = rl;
5179         }
5180         else if (lexer.front.symbol == Lexer.tokenID!q{"^"})
5181         {
5182             auto next = popToken();
5183             NonterminalType!(22) r;
5184             Location rl;
5185             gotoParent = parse69(r, rl, currentStart, next);
5186             if (gotoParent < 0)
5187                 return gotoParent;
5188             currentResult = ParseResultIn.create(22/*ExpressionPrefix*/, r);
5189             currentResultLocation = rl;
5190         }
5191         else
5192         {
5193             auto tmp = reduce86/*ExpressionPrefix* @array = ExpressionPrefix+ [virtual]*/(parseStart1, stack1);
5194             result = ThisParseResult.create(54/*ExpressionPrefix**/, tmp.val);
5195             resultLocation = tmp.start;
5196             return 0;
5197         }
5198 
5199         while (gotoParent == 0)
5200         {
5201             if (currentResult.nonterminalID == 22/*ExpressionPrefix*/)
5202             {
5203                 auto next = ParseStackElem!(Location, NonterminalType!22/*ExpressionPrefix*/)(currentResultLocation, currentResult.get!(22/*ExpressionPrefix*/)());
5204                 NonterminalType!(53) r;
5205                 Location rl;
5206                 gotoParent = parse71(r, rl, parseStart1, stack1, next);
5207                 if (gotoParent < 0)
5208                     return gotoParent;
5209                 assert(gotoParent > 0);
5210                 result = ThisParseResult.create(53/*ExpressionPrefix+*/, r);
5211                 resultLocation = rl;
5212                 return gotoParent - 1;
5213             }
5214             else
5215                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
5216         }
5217 
5218         result = currentResult;
5219         resultLocation = currentResultLocation;
5220         return gotoParent - 1;
5221     }
5222     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix+ ExpressionPrefix
5223     // type: unknown
5224     //  ExpressionPrefix+ ->  ExpressionPrefix+ ExpressionPrefix. {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5225     private int parse71(ref NonterminalType!(53) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!53/*ExpressionPrefix+*/) stack2, ParseStackElem!(Location, NonterminalType!22/*ExpressionPrefix*/) stack1)
5226     {
5227         alias ThisParseResult = typeof(result);
5228         Location currentStart = lexer.front.currentLocation;
5229         {
5230             auto tmp = reduce84/*ExpressionPrefix+ @array = ExpressionPrefix+ ExpressionPrefix [virtual]*/(parseStart2, stack2, stack1);
5231             result = tmp.val;
5232             resultLocation = tmp.start;
5233             return 1;
5234         }
5235     }
5236     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix*
5237     // type: unknown
5238     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix*.PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5239     //  PostfixExpression   ->                                                                   .Optional {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5240     //  PostfixExpression   ->                                                                   .Repetition {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5241     //  PostfixExpression   ->                                                                   .RepetitionPlus {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5242     //  PostfixExpression   ->                                                                   .AtomExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5243     //  Optional            ->                                                                   .PostfixExpression "?" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5244     //  Repetition          ->                                                                   .PostfixExpression "*" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5245     //  RepetitionPlus      ->                                                                   .PostfixExpression "+" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5246     //  AtomExpression      ->                                                                   .Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5247     //  AtomExpression      ->                                                                   .UnpackVariadicList {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5248     //  AtomExpression      ->                                                                   .SubToken {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5249     //  AtomExpression      ->                                                                   .ParenExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5250     //  AtomExpression      ->                                                                   .Tuple {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5251     //  Symbol              ->                                                                   .Name {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5252     //  Symbol              ->                                                                   .Token {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5253     //  Symbol              ->                                                                   .MacroInstance {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5254     //  Name                ->                                                                   .Identifier {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5255     //  Token               ->                                                                   .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5256     //  Token               ->                                                                   .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5257     //  UnpackVariadicList  ->                                                                   .Identifier "..." {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5258     //  SubToken            ->                                                                   .Symbol ">>" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5259     //  SubToken            ->                                                                   .Symbol ">>" ParenExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5260     //  MacroInstance       ->                                                                   .Identifier "(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5261     //  ParenExpression     ->                                                                   ."{" Expression "}" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5262     //  Tuple               ->                                                                   ."t(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5263     private int parse72(ref NonterminalType!(19) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/) stack3, ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/) stack2, ParseStackElem!(Location, NonterminalType!54/*ExpressionPrefix**/) stack1)
5264     {
5265         alias ThisParseResult = typeof(result);
5266         alias ParseResultIn = CreatorInstance.NonterminalUnion!([19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36]);
5267         ParseResultIn currentResult;
5268         Location currentResultLocation;
5269         int gotoParent = -1;
5270         Location currentStart = lexer.front.currentLocation;
5271         if (lexer.empty)
5272         {
5273             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5274             return -1;
5275         }
5276         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
5277         {
5278             auto next = popToken();
5279             CreatorInstance.NonterminalUnion!([29, 31, 33]) r;
5280             Location rl;
5281             gotoParent = parse73(r, rl, currentStart, next);
5282             if (gotoParent < 0)
5283                 return gotoParent;
5284             currentResult = r;
5285             currentResultLocation = rl;
5286         }
5287         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
5288         {
5289             auto next = popToken();
5290             NonterminalType!(30) r;
5291             Location rl;
5292             gotoParent = parse75(r, rl, currentStart, next);
5293             if (gotoParent < 0)
5294                 return gotoParent;
5295             currentResult = ParseResultIn.create(30/*Token*/, r);
5296             currentResultLocation = rl;
5297         }
5298         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
5299         {
5300             auto next = popToken();
5301             NonterminalType!(30) r;
5302             Location rl;
5303             gotoParent = parse76(r, rl, currentStart, next);
5304             if (gotoParent < 0)
5305                 return gotoParent;
5306             currentResult = ParseResultIn.create(30/*Token*/, r);
5307             currentResultLocation = rl;
5308         }
5309         else if (lexer.front.symbol == Lexer.tokenID!q{"{"})
5310         {
5311             auto next = popToken();
5312             NonterminalType!(34) r;
5313             Location rl;
5314             gotoParent = parse77(r, rl, currentStart, next);
5315             if (gotoParent < 0)
5316                 return gotoParent;
5317             currentResult = ParseResultIn.create(34/*ParenExpression*/, r);
5318             currentResultLocation = rl;
5319         }
5320         else if (lexer.front.symbol == Lexer.tokenID!q{"t("})
5321         {
5322             auto next = popToken();
5323             NonterminalType!(36) r;
5324             Location rl;
5325             gotoParent = parse99(r, rl, currentStart, next);
5326             if (gotoParent < 0)
5327                 return gotoParent;
5328             currentResult = ParseResultIn.create(36/*Tuple*/, r);
5329             currentResultLocation = rl;
5330         }
5331         else
5332         {
5333             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
5334                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
5335             return -1;
5336         }
5337 
5338         while (gotoParent == 0)
5339         {
5340             if (currentResult.nonterminalID == 23/*PostfixExpression*/)
5341             {
5342                 auto next = ParseStackElem!(Location, NonterminalType!23/*PostfixExpression*/)(currentResultLocation, currentResult.get!(23/*PostfixExpression*/)());
5343                 CreatorInstance.NonterminalUnion!([19, 24, 25, 26]) r;
5344                 Location rl;
5345                 gotoParent = parse82(r, rl, parseStart3, stack3, stack2, stack1, currentStart, next);
5346                 if (gotoParent < 0)
5347                     return gotoParent;
5348                 currentResult = r;
5349                 currentResultLocation = rl;
5350             }
5351             else if (currentResult.nonterminalID == 24/*Optional*/)
5352             {
5353                 currentResult = ParseResultIn.create(23/*PostfixExpression*/, currentResult.get!(24/*Optional*/));
5354                 currentResultLocation = currentResultLocation;
5355             }
5356             else if (currentResult.nonterminalID == 25/*Repetition*/)
5357             {
5358                 currentResult = ParseResultIn.create(23/*PostfixExpression*/, currentResult.get!(25/*Repetition*/));
5359                 currentResultLocation = currentResultLocation;
5360             }
5361             else if (currentResult.nonterminalID == 26/*RepetitionPlus*/)
5362             {
5363                 currentResult = ParseResultIn.create(23/*PostfixExpression*/, currentResult.get!(26/*RepetitionPlus*/));
5364                 currentResultLocation = currentResultLocation;
5365             }
5366             else if (currentResult.nonterminalID == 27/*AtomExpression*/)
5367             {
5368                 currentResult = ParseResultIn.create(23/*PostfixExpression*/, currentResult.get!(27/*AtomExpression*/));
5369                 currentResultLocation = currentResultLocation;
5370             }
5371             else if (currentResult.nonterminalID == 28/*Symbol*/)
5372             {
5373                 auto next = ParseStackElem!(Location, NonterminalType!28/*Symbol*/)(currentResultLocation, currentResult.get!(28/*Symbol*/)());
5374                 CreatorInstance.NonterminalUnion!([27, 32]) r;
5375                 Location rl;
5376                 gotoParent = parse90(r, rl, currentStart, next);
5377                 if (gotoParent < 0)
5378                     return gotoParent;
5379                 currentResult = r;
5380                 currentResultLocation = rl;
5381             }
5382             else if (currentResult.nonterminalID == 29/*Name*/)
5383             {
5384                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(29/*Name*/));
5385                 currentResultLocation = currentResultLocation;
5386             }
5387             else if (currentResult.nonterminalID == 30/*Token*/)
5388             {
5389                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(30/*Token*/));
5390                 currentResultLocation = currentResultLocation;
5391             }
5392             else if (currentResult.nonterminalID == 31/*UnpackVariadicList*/)
5393             {
5394                 currentResult = ParseResultIn.create(27/*AtomExpression*/, currentResult.get!(31/*UnpackVariadicList*/));
5395                 currentResultLocation = currentResultLocation;
5396             }
5397             else if (currentResult.nonterminalID == 32/*SubToken*/)
5398             {
5399                 currentResult = ParseResultIn.create(27/*AtomExpression*/, currentResult.get!(32/*SubToken*/));
5400                 currentResultLocation = currentResultLocation;
5401             }
5402             else if (currentResult.nonterminalID == 33/*MacroInstance*/)
5403             {
5404                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(33/*MacroInstance*/));
5405                 currentResultLocation = currentResultLocation;
5406             }
5407             else if (currentResult.nonterminalID == 34/*ParenExpression*/)
5408             {
5409                 currentResult = ParseResultIn.create(27/*AtomExpression*/, currentResult.get!(34/*ParenExpression*/));
5410                 currentResultLocation = currentResultLocation;
5411             }
5412             else if (currentResult.nonterminalID == 36/*Tuple*/)
5413             {
5414                 currentResult = ParseResultIn.create(27/*AtomExpression*/, currentResult.get!(36/*Tuple*/));
5415                 currentResultLocation = currentResultLocation;
5416             }
5417             else
5418                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
5419         }
5420 
5421         result = currentResult.get!(19/*AnnotatedExpression*/);
5422         resultLocation = currentResultLocation;
5423         return gotoParent - 1;
5424     }
5425     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Identifier
5426     // type: unknown
5427     //  Name               ->  Identifier. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5428     //  UnpackVariadicList ->  Identifier."..." {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5429     //  MacroInstance      ->  Identifier."(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5430     private int parse73(ref CreatorInstance.NonterminalUnion!([29, 31, 33]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5431     {
5432         alias ThisParseResult = typeof(result);
5433         alias ParseResultIn = CreatorInstance.NonterminalUnion!([29, 31, 33]);
5434         ParseResultIn currentResult;
5435         Location currentResultLocation;
5436         int gotoParent = -1;
5437         Location currentStart = lexer.front.currentLocation;
5438         if (lexer.empty)
5439         {
5440             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5441             return -1;
5442         }
5443         else if (lexer.front.symbol == Lexer.tokenID!q{"("})
5444         {
5445             auto next = popToken();
5446             NonterminalType!(33) r;
5447             Location rl;
5448             gotoParent = parse55(r, rl, parseStart1, stack1, next);
5449             if (gotoParent < 0)
5450                 return gotoParent;
5451             assert(gotoParent > 0);
5452             result = ThisParseResult.create(33/*MacroInstance*/, r);
5453             resultLocation = rl;
5454             return gotoParent - 1;
5455         }
5456         else if (lexer.front.symbol == Lexer.tokenID!q{"..."})
5457         {
5458             auto next = popToken();
5459             NonterminalType!(31) r;
5460             Location rl;
5461             gotoParent = parse74(r, rl, parseStart1, stack1, next);
5462             if (gotoParent < 0)
5463                 return gotoParent;
5464             assert(gotoParent > 0);
5465             result = ThisParseResult.create(31/*UnpackVariadicList*/, r);
5466             resultLocation = rl;
5467             return gotoParent - 1;
5468         }
5469         else
5470         {
5471             auto tmp = reduce108_Name/*Name = Identifier*/(parseStart1, stack1);
5472             result = ThisParseResult.create(29/*Name*/, tmp.val);
5473             resultLocation = tmp.start;
5474             return 0;
5475         }
5476     }
5477     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Identifier "..."
5478     // type: unknown
5479     //  UnpackVariadicList ->  Identifier "...". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5480     private int parse74(ref NonterminalType!(31) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
5481     {
5482         alias ThisParseResult = typeof(result);
5483         Location currentStart = lexer.front.currentLocation;
5484         {
5485             auto tmp = reduce111_UnpackVariadicList/*UnpackVariadicList = Identifier "..."*/(parseStart2, stack2, stack1);
5486             result = tmp.val;
5487             resultLocation = tmp.start;
5488             return 1;
5489         }
5490     }
5491     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* StringLiteral
5492     // type: unknown
5493     //  Token ->  StringLiteral. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5494     private int parse75(ref NonterminalType!(30) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5495     {
5496         alias ThisParseResult = typeof(result);
5497         Location currentStart = lexer.front.currentLocation;
5498         {
5499             auto tmp = reduce109_Token/*Token = StringLiteral*/(parseStart1, stack1);
5500             result = tmp.val;
5501             resultLocation = tmp.start;
5502             return 0;
5503         }
5504     }
5505     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* CharacterSetLiteral
5506     // type: unknown
5507     //  Token ->  CharacterSetLiteral. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
5508     private int parse76(ref NonterminalType!(30) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5509     {
5510         alias ThisParseResult = typeof(result);
5511         Location currentStart = lexer.front.currentLocation;
5512         {
5513             auto tmp = reduce110_Token/*Token = CharacterSetLiteral*/(parseStart1, stack1);
5514             result = tmp.val;
5515             resultLocation = tmp.start;
5516             return 0;
5517         }
5518     }
5519     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "{"
5520     // type: unknown
5521     //  ParenExpression                 ->  "{".Expression "}" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5522     //  Annotation                      ->     ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "|", "^", "t("}
5523     //  NegativeLookahead               ->     ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "|", "^", "t("}
5524     //  NegativeLookahead               ->     ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "|", "^", "t("}
5525     //  Expression                      ->     .Alternation {"}"}
5526     //  Alternation                     ->     .Alternation "|" Concatenation {"}", "|"}
5527     //  Alternation                     ->     .Concatenation {"}", "|"}
5528     //  Concatenation                   ->     .TokenMinus {"}", "|"}
5529     //  Concatenation                   ->     .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {"}", "|"}
5530     //  Concatenation                   ->     .TokenMinus @regArray_ProductionAnnotation+ {"}", "|"}
5531     //  Concatenation                   ->     .@regArray_ProductionAnnotation+ {"}", "|"}
5532     //  TokenMinus                      ->     .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5533     //  TokenMinus                      ->     .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5534     //  AnnotatedExpression             ->     .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5535     //  @regArray_ExpressionAnnotation* ->     . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5536     //  $regarray_1                     ->     .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "|", "^", "t("}
5537     //  $regarray_1                     ->     .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "}", "!", "<", "|", "^", "t("}
5538     //  @regArray_ProductionAnnotation+ ---> $regarray_1
5539     //  @regArray_ExpressionAnnotation* ---> $regarray_1
5540     //  $regarrayedge_0_1 ---> Annotation
5541     //  $regarrayedge_0_1 ---> NegativeLookahead
5542     private int parse77(ref NonterminalType!(34) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
5543     {
5544         alias ThisParseResult = typeof(result);
5545         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 14, 15, 16, 18, 19, 34, 51, 57]);
5546         ParseResultIn currentResult;
5547         Location currentResultLocation;
5548         int gotoParent = -1;
5549         Location currentStart = lexer.front.currentLocation;
5550         if (lexer.empty)
5551         {
5552             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5553             return -1;
5554         }
5555         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
5556         {
5557             auto next = popToken();
5558             NonterminalType!(10) r;
5559             Location rl;
5560             gotoParent = parse8(r, rl, currentStart, next);
5561             if (gotoParent < 0)
5562                 return gotoParent;
5563             currentResult = ParseResultIn.create(10/*Annotation*/, r);
5564             currentResultLocation = rl;
5565         }
5566         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
5567         {
5568             auto next = popToken();
5569             NonterminalType!(13) r;
5570             Location rl;
5571             gotoParent = parse53(r, rl, currentStart, next);
5572             if (gotoParent < 0)
5573                 return gotoParent;
5574             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
5575             currentResultLocation = rl;
5576         }
5577         else
5578         {
5579             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
5580             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
5581             currentResultLocation = tmp.start;
5582             gotoParent = 0;
5583         }
5584 
5585         while (gotoParent == 0)
5586         {
5587             if (currentResult.nonterminalID == 10/*Annotation*/)
5588             {
5589                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
5590                 NonterminalType!(57) r;
5591                 Location rl;
5592                 gotoParent = parse43(r, rl, currentStart, next);
5593                 if (gotoParent < 0)
5594                     return gotoParent;
5595                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
5596                 currentResultLocation = rl;
5597             }
5598             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
5599             {
5600                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
5601                 NonterminalType!(57) r;
5602                 Location rl;
5603                 gotoParent = parse43(r, rl, currentStart, next);
5604                 if (gotoParent < 0)
5605                     return gotoParent;
5606                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
5607                 currentResultLocation = rl;
5608             }
5609             else if (currentResult.nonterminalID == 14/*Expression*/)
5610             {
5611                 auto next = ParseStackElem!(Location, NonterminalType!14/*Expression*/)(currentResultLocation, currentResult.get!(14/*Expression*/)());
5612                 NonterminalType!(34) r;
5613                 Location rl;
5614                 gotoParent = parse78(r, rl, parseStart1, stack1, next);
5615                 if (gotoParent < 0)
5616                     return gotoParent;
5617                 assert(gotoParent > 0);
5618                 result = r;
5619                 resultLocation = rl;
5620                 return gotoParent - 1;
5621             }
5622             else if (currentResult.nonterminalID == 15/*Alternation*/)
5623             {
5624                 auto next = ParseStackElem!(Location, NonterminalType!15/*Alternation*/)(currentResultLocation, currentResult.get!(15/*Alternation*/)());
5625                 CreatorInstance.NonterminalUnion!([14, 15]) r;
5626                 Location rl;
5627                 gotoParent = parse46(r, rl, currentStart, next);
5628                 if (gotoParent < 0)
5629                     return gotoParent;
5630                 currentResult = r;
5631                 currentResultLocation = rl;
5632             }
5633             else if (currentResult.nonterminalID == 16/*Concatenation*/)
5634             {
5635                 currentResult = ParseResultIn.create(15/*Alternation*/, currentResult.get!(16/*Concatenation*/));
5636                 currentResultLocation = currentResultLocation;
5637             }
5638             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
5639             {
5640                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
5641                 CreatorInstance.NonterminalUnion!([16, 18]) r;
5642                 Location rl;
5643                 gotoParent = parse49(r, rl, currentStart, next);
5644                 if (gotoParent < 0)
5645                     return gotoParent;
5646                 currentResult = r;
5647                 currentResultLocation = rl;
5648             }
5649             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
5650             {
5651                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
5652                 currentResultLocation = currentResultLocation;
5653             }
5654             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
5655             {
5656                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
5657                 NonterminalType!(19) r;
5658                 Location rl;
5659                 gotoParent = parse63(r, rl, currentStart, next);
5660                 if (gotoParent < 0)
5661                     return gotoParent;
5662                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
5663                 currentResultLocation = rl;
5664             }
5665             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
5666             {
5667                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
5668                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
5669                 Location rl;
5670                 gotoParent = parse80(r, rl, currentStart, next);
5671                 if (gotoParent < 0)
5672                     return gotoParent;
5673                 currentResult = r;
5674                 currentResultLocation = rl;
5675             }
5676             else
5677                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
5678         }
5679 
5680         result = currentResult.get!(34/*ParenExpression*/);
5681         resultLocation = currentResultLocation;
5682         return gotoParent - 1;
5683     }
5684     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "{" Expression
5685     // type: unknown
5686     //  ParenExpression ->  "{" Expression."}" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5687     private int parse78(ref NonterminalType!(34) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack1)
5688     {
5689         alias ThisParseResult = typeof(result);
5690         alias ParseResultIn = CreatorInstance.NonterminalUnion!([34]);
5691         ParseResultIn currentResult;
5692         Location currentResultLocation;
5693         int gotoParent = -1;
5694         Location currentStart = lexer.front.currentLocation;
5695         if (lexer.empty)
5696         {
5697             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5698             return -1;
5699         }
5700         else if (lexer.front.symbol == Lexer.tokenID!q{"}"})
5701         {
5702             auto next = popToken();
5703             NonterminalType!(34) r;
5704             Location rl;
5705             gotoParent = parse79(r, rl, parseStart2, stack2, stack1, next);
5706             if (gotoParent < 0)
5707                 return gotoParent;
5708             assert(gotoParent > 0);
5709             result = r;
5710             resultLocation = rl;
5711             return gotoParent - 1;
5712         }
5713         else
5714         {
5715             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
5716                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
5717             return -1;
5718         }
5719     }
5720     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "{" Expression "}"
5721     // type: unknown
5722     //  ParenExpression ->  "{" Expression "}". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5723     private int parse79(ref NonterminalType!(34) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!14/*Expression*/) stack2, ParseStackElem!(Location, Token) stack1)
5724     {
5725         alias ThisParseResult = typeof(result);
5726         Location currentStart = lexer.front.currentLocation;
5727         {
5728             auto tmp = reduce117_ParenExpression/*ParenExpression = "{" Expression "}"*/(parseStart3, stack3, stack2, stack1);
5729             result = tmp.val;
5730             resultLocation = tmp.start;
5731             return 2;
5732         }
5733     }
5734     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "{" $regarray_1
5735     // type: unknown
5736     //  Concatenation       ->  @regArray_ProductionAnnotation+. {";", ")", ",", "}", "|"}
5737     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation*.ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5738     //  $regarray_1         ->                      $regarray_1.$regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
5739     //  Annotation          ->                                 ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
5740     //  NegativeLookahead   ->                                 ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
5741     //  NegativeLookahead   ->                                 ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
5742     //  ExpressionName      ->                                 .Identifier ":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5743     //  ExpressionName?     ->                                 . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
5744     //  ExpressionName? ---> ExpressionName
5745     //  $regarrayedge_1_1 ---> Annotation
5746     //  $regarrayedge_1_1 ---> NegativeLookahead
5747     private int parse80(ref CreatorInstance.NonterminalUnion!([16, 19, 57]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
5748     {
5749         alias ThisParseResult = typeof(result);
5750         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 16, 19, 21, 52, 57]);
5751         ParseResultIn currentResult;
5752         Location currentResultLocation;
5753         int gotoParent = -1;
5754         Location currentStart = lexer.front.currentLocation;
5755         if (lexer.empty)
5756         {
5757             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5758             return -1;
5759         }
5760         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
5761         {
5762             Lexer tmpLexer = *lexer;
5763             tmpLexer.popFront();
5764             if (!tmpLexer.empty && tmpLexer.front.symbol == Lexer.tokenID!q{":"})
5765             {
5766                 auto next = popToken();
5767                 NonterminalType!(21) r;
5768                 Location rl;
5769                 gotoParent = parse64(r, rl, currentStart, next);
5770                 if (gotoParent < 0)
5771                     return gotoParent;
5772                 currentResult = ParseResultIn.create(21/*ExpressionName*/, r);
5773                 currentResultLocation = rl;
5774             }
5775             else if (!tmpLexer.empty && (tmpLexer.front.symbol == Lexer.tokenID!"Identifier" || tmpLexer.front.symbol == Lexer.tokenID!"StringLiteral" || tmpLexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || tmpLexer.front.symbol == Lexer.tokenID!q{";"} || tmpLexer.front.symbol == Lexer.tokenID!q{"("} || tmpLexer.front.symbol == Lexer.tokenID!q{")"} || tmpLexer.front.symbol == Lexer.tokenID!q{","} || tmpLexer.front.symbol == Lexer.tokenID!q{"..."} || tmpLexer.front.symbol == Lexer.tokenID!q{"@"} || tmpLexer.front.symbol == Lexer.tokenID!q{"{"} || tmpLexer.front.symbol == Lexer.tokenID!q{"}"} || tmpLexer.front.symbol == Lexer.tokenID!q{"?"} || tmpLexer.front.symbol == Lexer.tokenID!q{"!"} || tmpLexer.front.symbol == Lexer.tokenID!q{"<"} || tmpLexer.front.symbol == Lexer.tokenID!q{"*"} || tmpLexer.front.symbol == Lexer.tokenID!q{">>"} || tmpLexer.front.symbol == Lexer.tokenID!q{"-"} || tmpLexer.front.symbol == Lexer.tokenID!q{"|"} || tmpLexer.front.symbol == Lexer.tokenID!q{"^"} || tmpLexer.front.symbol == Lexer.tokenID!q{"+"} || tmpLexer.front.symbol == Lexer.tokenID!q{"t("}))
5776             {
5777                 auto tmp = reduce82/*ExpressionName? = [virtual]*/();
5778                 currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
5779                 currentResultLocation = tmp.start;
5780                 gotoParent = 0;
5781             }
5782             else
5783             {
5784                 lastError = new SingleParseException!Location(text("unexpected Token \"", tmpLexer.front.content, "\"  \"", lexer.tokenName(tmpLexer.front.symbol), "\""),
5785                     tmpLexer.front.currentLocation, tmpLexer.front.currentTokenEnd);
5786                 return -1;
5787             }
5788         }
5789         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
5790         {
5791             auto tmp = reduce82/*ExpressionName? = [virtual]*/();
5792             currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
5793             currentResultLocation = tmp.start;
5794             gotoParent = 0;
5795         }
5796         else if (lexer.front.symbol == Lexer.tokenID!q{";"} || lexer.front.symbol == Lexer.tokenID!q{")"} || lexer.front.symbol == Lexer.tokenID!q{","} || lexer.front.symbol == Lexer.tokenID!q{"}"} || lexer.front.symbol == Lexer.tokenID!q{"|"})
5797         {
5798             auto tmp = reduce72_Concatenation/*Concatenation = @regArray @regArray_ProductionAnnotation+*/(parseStart1, stack1);
5799             result = ThisParseResult.create(16/*Concatenation*/, tmp.val);
5800             resultLocation = tmp.start;
5801             return 0;
5802         }
5803         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
5804         {
5805             auto next = popToken();
5806             NonterminalType!(10) r;
5807             Location rl;
5808             gotoParent = parse8(r, rl, currentStart, next);
5809             if (gotoParent < 0)
5810                 return gotoParent;
5811             currentResult = ParseResultIn.create(10/*Annotation*/, r);
5812             currentResultLocation = rl;
5813         }
5814         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
5815         {
5816             auto next = popToken();
5817             NonterminalType!(13) r;
5818             Location rl;
5819             gotoParent = parse53(r, rl, currentStart, next);
5820             if (gotoParent < 0)
5821                 return gotoParent;
5822             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
5823             currentResultLocation = rl;
5824         }
5825         else
5826         {
5827             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
5828                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
5829             return -1;
5830         }
5831 
5832         while (gotoParent == 0)
5833         {
5834             if (currentResult.nonterminalID == 10/*Annotation*/)
5835             {
5836                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
5837                 NonterminalType!(57) r;
5838                 Location rl;
5839                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
5840                 if (gotoParent < 0)
5841                     return gotoParent;
5842                 assert(gotoParent > 0);
5843                 result = ThisParseResult.create(57/*$regarray_1*/, r);
5844                 resultLocation = rl;
5845                 return gotoParent - 1;
5846             }
5847             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
5848             {
5849                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
5850                 NonterminalType!(57) r;
5851                 Location rl;
5852                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
5853                 if (gotoParent < 0)
5854                     return gotoParent;
5855                 assert(gotoParent > 0);
5856                 result = ThisParseResult.create(57/*$regarray_1*/, r);
5857                 resultLocation = rl;
5858                 return gotoParent - 1;
5859             }
5860             else if (currentResult.nonterminalID == 21/*ExpressionName*/)
5861             {
5862                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(21/*ExpressionName*/)());
5863                 NonterminalType!(19) r;
5864                 Location rl;
5865                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
5866                 if (gotoParent < 0)
5867                     return gotoParent;
5868                 assert(gotoParent > 0);
5869                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
5870                 resultLocation = rl;
5871                 return gotoParent - 1;
5872             }
5873             else if (currentResult.nonterminalID == 52/*ExpressionName?*/)
5874             {
5875                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(52/*ExpressionName?*/)());
5876                 NonterminalType!(19) r;
5877                 Location rl;
5878                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
5879                 if (gotoParent < 0)
5880                     return gotoParent;
5881                 assert(gotoParent > 0);
5882                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
5883                 resultLocation = rl;
5884                 return gotoParent - 1;
5885             }
5886             else
5887                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
5888         }
5889 
5890         result = currentResult;
5891         resultLocation = currentResultLocation;
5892         return gotoParent - 1;
5893     }
5894     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "{" $regarray_1 Annotation
5895     // type: unknown
5896     //  $regarray_1 ->  $regarray_1 $regarrayedge_1_1. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
5897     private int parse81(ref NonterminalType!(57) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!57/*$regarray_1*/) stack2, ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/) stack1)
5898     {
5899         alias ThisParseResult = typeof(result);
5900         Location currentStart = lexer.front.currentLocation;
5901         {
5902             auto tmp = reduce121/*$regarray_1 @array @directUnwrap = @inheritAnyTag $regarray_1 $regarrayedge_1_1*/(parseStart2, stack2, stack1);
5903             result = tmp.val;
5904             resultLocation = tmp.start;
5905             return 1;
5906         }
5907     }
5908     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* PostfixExpression
5909     // type: unknown
5910     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
5911     //  Optional            ->                                                                    PostfixExpression."?" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5912     //  Repetition          ->                                                                    PostfixExpression."*" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5913     //  RepetitionPlus      ->                                                                    PostfixExpression."+" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5914     private int parse82(ref CreatorInstance.NonterminalUnion!([19, 24, 25, 26]) result, ref Location resultLocation, Location parseStart4, ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/) stack4, ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/) stack3, ParseStackElem!(Location, NonterminalType!54/*ExpressionPrefix**/) stack2, Location parseStart1, ParseStackElem!(Location, NonterminalType!23/*PostfixExpression*/) stack1)
5915     {
5916         alias ThisParseResult = typeof(result);
5917         alias ParseResultIn = CreatorInstance.NonterminalUnion!([19, 24, 25, 26]);
5918         ParseResultIn currentResult;
5919         Location currentResultLocation;
5920         int gotoParent = -1;
5921         Location currentStart = lexer.front.currentLocation;
5922         if (lexer.empty)
5923         {
5924             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
5925             return -1;
5926         }
5927         else if (lexer.front.symbol == Lexer.tokenID!q{"?"})
5928         {
5929             auto next = popToken();
5930             NonterminalType!(24) r;
5931             Location rl;
5932             gotoParent = parse83(r, rl, parseStart1, stack1, next);
5933             if (gotoParent < 0)
5934                 return gotoParent;
5935             assert(gotoParent > 0);
5936             result = ThisParseResult.create(24/*Optional*/, r);
5937             resultLocation = rl;
5938             return gotoParent - 1;
5939         }
5940         else if (lexer.front.symbol == Lexer.tokenID!q{"*"})
5941         {
5942             auto next = popToken();
5943             NonterminalType!(25) r;
5944             Location rl;
5945             gotoParent = parse84(r, rl, parseStart1, stack1, next);
5946             if (gotoParent < 0)
5947                 return gotoParent;
5948             assert(gotoParent > 0);
5949             result = ThisParseResult.create(25/*Repetition*/, r);
5950             resultLocation = rl;
5951             return gotoParent - 1;
5952         }
5953         else if (lexer.front.symbol == Lexer.tokenID!q{"+"})
5954         {
5955             auto next = popToken();
5956             NonterminalType!(26) r;
5957             Location rl;
5958             gotoParent = parse85(r, rl, parseStart1, stack1, next);
5959             if (gotoParent < 0)
5960                 return gotoParent;
5961             assert(gotoParent > 0);
5962             result = ThisParseResult.create(26/*RepetitionPlus*/, r);
5963             resultLocation = rl;
5964             return gotoParent - 1;
5965         }
5966         else
5967         {
5968             auto tmp = reduce87_AnnotatedExpression/*AnnotatedExpression = @regArray @regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression*/(parseStart4, stack4, stack3, stack2, stack1);
5969             result = ThisParseResult.create(19/*AnnotatedExpression*/, tmp.val);
5970             resultLocation = tmp.start;
5971             return 3;
5972         }
5973     }
5974     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* PostfixExpression "?"
5975     // type: unknown
5976     //  Optional ->  PostfixExpression "?". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5977     private int parse83(ref NonterminalType!(24) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!23/*PostfixExpression*/) stack2, ParseStackElem!(Location, Token) stack1)
5978     {
5979         alias ThisParseResult = typeof(result);
5980         Location currentStart = lexer.front.currentLocation;
5981         {
5982             auto tmp = reduce97_Optional/*Optional = PostfixExpression "?"*/(parseStart2, stack2, stack1);
5983             result = tmp.val;
5984             resultLocation = tmp.start;
5985             return 1;
5986         }
5987     }
5988     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* PostfixExpression "*"
5989     // type: unknown
5990     //  Repetition ->  PostfixExpression "*". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
5991     private int parse84(ref NonterminalType!(25) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!23/*PostfixExpression*/) stack2, ParseStackElem!(Location, Token) stack1)
5992     {
5993         alias ThisParseResult = typeof(result);
5994         Location currentStart = lexer.front.currentLocation;
5995         {
5996             auto tmp = reduce98_Repetition/*Repetition = PostfixExpression "*"*/(parseStart2, stack2, stack1);
5997             result = tmp.val;
5998             resultLocation = tmp.start;
5999             return 1;
6000         }
6001     }
6002     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* PostfixExpression "+"
6003     // type: unknown
6004     //  RepetitionPlus ->  PostfixExpression "+". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6005     private int parse85(ref NonterminalType!(26) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!23/*PostfixExpression*/) stack2, ParseStackElem!(Location, Token) stack1)
6006     {
6007         alias ThisParseResult = typeof(result);
6008         Location currentStart = lexer.front.currentLocation;
6009         {
6010             auto tmp = reduce99_RepetitionPlus/*RepetitionPlus = PostfixExpression "+"*/(parseStart2, stack2, stack1);
6011             result = tmp.val;
6012             resultLocation = tmp.start;
6013             return 1;
6014         }
6015     }
6016     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Symbol
6017     // type: unknown
6018     //  AtomExpression ->  Symbol. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6019     //  SubToken       ->  Symbol.">>" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6020     //  SubToken       ->  Symbol.">>" ParenExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6021     private int parse90(ref CreatorInstance.NonterminalUnion!([27, 32]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack1)
6022     {
6023         alias ThisParseResult = typeof(result);
6024         alias ParseResultIn = CreatorInstance.NonterminalUnion!([27, 32]);
6025         ParseResultIn currentResult;
6026         Location currentResultLocation;
6027         int gotoParent = -1;
6028         Location currentStart = lexer.front.currentLocation;
6029         if (lexer.empty)
6030         {
6031             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6032             return -1;
6033         }
6034         else if (lexer.front.symbol == Lexer.tokenID!q{">>"})
6035         {
6036             auto next = popToken();
6037             NonterminalType!(32) r;
6038             Location rl;
6039             gotoParent = parse91(r, rl, parseStart1, stack1, next);
6040             if (gotoParent < 0)
6041                 return gotoParent;
6042             assert(gotoParent > 0);
6043             result = ThisParseResult.create(32/*SubToken*/, r);
6044             resultLocation = rl;
6045             return gotoParent - 1;
6046         }
6047         else
6048         {
6049             auto tmp = reduce100_AtomExpression/*AtomExpression = <Symbol*/(parseStart1, stack1);
6050             result = ThisParseResult.create(27/*AtomExpression*/, tmp.val);
6051             resultLocation = tmp.start;
6052             return 0;
6053         }
6054     }
6055     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Symbol ">>"
6056     // type: unknown
6057     //  SubToken        ->  Symbol ">>".Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6058     //  SubToken        ->  Symbol ">>".ParenExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6059     //  Symbol          ->             .Name {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6060     //  Symbol          ->             .Token {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6061     //  Symbol          ->             .MacroInstance {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6062     //  Name            ->             .Identifier {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6063     //  Token           ->             .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6064     //  Token           ->             .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6065     //  MacroInstance   ->             .Identifier "(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6066     //  ParenExpression ->             ."{" Expression "}" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6067     private int parse91(ref NonterminalType!(32) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack2, ParseStackElem!(Location, Token) stack1)
6068     {
6069         alias ThisParseResult = typeof(result);
6070         alias ParseResultIn = CreatorInstance.NonterminalUnion!([28, 29, 30, 32, 33, 34]);
6071         ParseResultIn currentResult;
6072         Location currentResultLocation;
6073         int gotoParent = -1;
6074         Location currentStart = lexer.front.currentLocation;
6075         if (lexer.empty)
6076         {
6077             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6078             return -1;
6079         }
6080         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
6081         {
6082             auto next = popToken();
6083             CreatorInstance.NonterminalUnion!([29, 33]) r;
6084             Location rl;
6085             gotoParent = parse54(r, rl, currentStart, next);
6086             if (gotoParent < 0)
6087                 return gotoParent;
6088             currentResult = r;
6089             currentResultLocation = rl;
6090         }
6091         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
6092         {
6093             auto next = popToken();
6094             NonterminalType!(30) r;
6095             Location rl;
6096             gotoParent = parse75(r, rl, currentStart, next);
6097             if (gotoParent < 0)
6098                 return gotoParent;
6099             currentResult = ParseResultIn.create(30/*Token*/, r);
6100             currentResultLocation = rl;
6101         }
6102         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
6103         {
6104             auto next = popToken();
6105             NonterminalType!(30) r;
6106             Location rl;
6107             gotoParent = parse76(r, rl, currentStart, next);
6108             if (gotoParent < 0)
6109                 return gotoParent;
6110             currentResult = ParseResultIn.create(30/*Token*/, r);
6111             currentResultLocation = rl;
6112         }
6113         else if (lexer.front.symbol == Lexer.tokenID!q{"{"})
6114         {
6115             auto next = popToken();
6116             NonterminalType!(34) r;
6117             Location rl;
6118             gotoParent = parse77(r, rl, currentStart, next);
6119             if (gotoParent < 0)
6120                 return gotoParent;
6121             currentResult = ParseResultIn.create(34/*ParenExpression*/, r);
6122             currentResultLocation = rl;
6123         }
6124         else
6125         {
6126             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6127                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6128             return -1;
6129         }
6130 
6131         while (gotoParent == 0)
6132         {
6133             if (currentResult.nonterminalID == 28/*Symbol*/)
6134             {
6135                 auto next = ParseStackElem!(Location, NonterminalType!28/*Symbol*/)(currentResultLocation, currentResult.get!(28/*Symbol*/)());
6136                 NonterminalType!(32) r;
6137                 Location rl;
6138                 gotoParent = parse92(r, rl, parseStart2, stack2, stack1, next);
6139                 if (gotoParent < 0)
6140                     return gotoParent;
6141                 assert(gotoParent > 0);
6142                 result = r;
6143                 resultLocation = rl;
6144                 return gotoParent - 1;
6145             }
6146             else if (currentResult.nonterminalID == 29/*Name*/)
6147             {
6148                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(29/*Name*/));
6149                 currentResultLocation = currentResultLocation;
6150             }
6151             else if (currentResult.nonterminalID == 30/*Token*/)
6152             {
6153                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(30/*Token*/));
6154                 currentResultLocation = currentResultLocation;
6155             }
6156             else if (currentResult.nonterminalID == 33/*MacroInstance*/)
6157             {
6158                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(33/*MacroInstance*/));
6159                 currentResultLocation = currentResultLocation;
6160             }
6161             else if (currentResult.nonterminalID == 34/*ParenExpression*/)
6162             {
6163                 auto next = ParseStackElem!(Location, NonterminalType!34/*ParenExpression*/)(currentResultLocation, currentResult.get!(34/*ParenExpression*/)());
6164                 NonterminalType!(32) r;
6165                 Location rl;
6166                 gotoParent = parse96(r, rl, parseStart2, stack2, stack1, next);
6167                 if (gotoParent < 0)
6168                     return gotoParent;
6169                 assert(gotoParent > 0);
6170                 result = r;
6171                 resultLocation = rl;
6172                 return gotoParent - 1;
6173             }
6174             else
6175                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
6176         }
6177 
6178         result = currentResult.get!(32/*SubToken*/);
6179         resultLocation = currentResultLocation;
6180         return gotoParent - 1;
6181     }
6182     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Symbol ">>" Symbol
6183     // type: unknown
6184     //  SubToken ->  Symbol ">>" Symbol. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6185     private int parse92(ref NonterminalType!(32) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack1)
6186     {
6187         alias ThisParseResult = typeof(result);
6188         Location currentStart = lexer.front.currentLocation;
6189         {
6190             auto tmp = reduce112_SubToken/*SubToken = Symbol ">>" Symbol*/(parseStart3, stack3, stack2, stack1);
6191             result = tmp.val;
6192             resultLocation = tmp.start;
6193             return 2;
6194         }
6195     }
6196     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* Symbol ">>" ParenExpression
6197     // type: unknown
6198     //  SubToken ->  Symbol ">>" ParenExpression. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6199     private int parse96(ref NonterminalType!(32) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!34/*ParenExpression*/) stack1)
6200     {
6201         alias ThisParseResult = typeof(result);
6202         Location currentStart = lexer.front.currentLocation;
6203         {
6204             auto tmp = reduce113_SubToken/*SubToken = Symbol ">>" ParenExpression*/(parseStart3, stack3, stack2, stack1);
6205             result = tmp.val;
6206             resultLocation = tmp.start;
6207             return 2;
6208         }
6209     }
6210     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "t("
6211     // type: unknown
6212     //  Tuple                           ->  "t(".ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6213     //  Annotation                      ->      ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
6214     //  NegativeLookahead               ->      ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
6215     //  NegativeLookahead               ->      ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
6216     //  Expression                      ->      .Alternation {")", ","}
6217     //  Alternation                     ->      .Alternation "|" Concatenation {")", ",", "|"}
6218     //  Alternation                     ->      .Concatenation {")", ",", "|"}
6219     //  Concatenation                   ->      .TokenMinus {")", ",", "|"}
6220     //  Concatenation                   ->      .TokenMinus TokenMinus+ @regArray_ProductionAnnotation* {")", ",", "|"}
6221     //  Concatenation                   ->      .TokenMinus @regArray_ProductionAnnotation+ {")", ",", "|"}
6222     //  Concatenation                   ->      .@regArray_ProductionAnnotation+ {")", ",", "|"}
6223     //  TokenMinus                      ->      .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
6224     //  TokenMinus                      ->      .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
6225     //  AnnotatedExpression             ->      .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "-", "|", "^", "t("}
6226     //  ExpressionList                  ->      .Expression {")", ","}
6227     //  ExpressionList                  ->      .ExpressionList "," Expression {")", ","}
6228     //  @regArray_ExpressionAnnotation* ->      . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6229     //  ExpressionList?                 ->      . {")"}
6230     //  $regarray_1                     ->      .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
6231     //  $regarray_1                     ->      .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ")", ",", "@", "{", "!", "<", "|", "^", "t("}
6232     //  ExpressionList? ---> ExpressionList
6233     //  @regArray_ProductionAnnotation+ ---> $regarray_1
6234     //  @regArray_ExpressionAnnotation* ---> $regarray_1
6235     //  $regarrayedge_0_1 ---> Annotation
6236     //  $regarrayedge_0_1 ---> NegativeLookahead
6237     private int parse99(ref NonterminalType!(36) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
6238     {
6239         alias ThisParseResult = typeof(result);
6240         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 14, 15, 16, 18, 19, 35, 36, 51, 55, 57]);
6241         ParseResultIn currentResult;
6242         Location currentResultLocation;
6243         int gotoParent = -1;
6244         Location currentStart = lexer.front.currentLocation;
6245         if (lexer.empty)
6246         {
6247             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6248             return -1;
6249         }
6250         else if (lexer.front.symbol == Lexer.tokenID!"Identifier" || lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
6251         {
6252             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
6253             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
6254             currentResultLocation = tmp.start;
6255             gotoParent = 0;
6256         }
6257         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
6258         {
6259             auto tmp = reduce115/*ExpressionList? = [virtual]*/();
6260             currentResult = ParseResultIn.create(55/*ExpressionList?*/, tmp.val);
6261             currentResultLocation = tmp.start;
6262             gotoParent = 0;
6263         }
6264         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
6265         {
6266             auto next = popToken();
6267             NonterminalType!(10) r;
6268             Location rl;
6269             gotoParent = parse8(r, rl, currentStart, next);
6270             if (gotoParent < 0)
6271                 return gotoParent;
6272             currentResult = ParseResultIn.create(10/*Annotation*/, r);
6273             currentResultLocation = rl;
6274         }
6275         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
6276         {
6277             auto next = popToken();
6278             NonterminalType!(13) r;
6279             Location rl;
6280             gotoParent = parse53(r, rl, currentStart, next);
6281             if (gotoParent < 0)
6282                 return gotoParent;
6283             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
6284             currentResultLocation = rl;
6285         }
6286         else
6287         {
6288             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6289                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6290             return -1;
6291         }
6292 
6293         while (gotoParent == 0)
6294         {
6295             if (currentResult.nonterminalID == 10/*Annotation*/)
6296             {
6297                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
6298                 NonterminalType!(57) r;
6299                 Location rl;
6300                 gotoParent = parse43(r, rl, currentStart, next);
6301                 if (gotoParent < 0)
6302                     return gotoParent;
6303                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
6304                 currentResultLocation = rl;
6305             }
6306             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
6307             {
6308                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
6309                 NonterminalType!(57) r;
6310                 Location rl;
6311                 gotoParent = parse43(r, rl, currentStart, next);
6312                 if (gotoParent < 0)
6313                     return gotoParent;
6314                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
6315                 currentResultLocation = rl;
6316             }
6317             else if (currentResult.nonterminalID == 14/*Expression*/)
6318             {
6319                 auto next = ParseStackElem!(Location, NonterminalType!14/*Expression*/)(currentResultLocation, currentResult.get!(14/*Expression*/)());
6320                 NonterminalType!(35) r;
6321                 Location rl;
6322                 gotoParent = parse56(r, rl, currentStart, next);
6323                 if (gotoParent < 0)
6324                     return gotoParent;
6325                 currentResult = ParseResultIn.create(35/*ExpressionList*/, r);
6326                 currentResultLocation = rl;
6327             }
6328             else if (currentResult.nonterminalID == 15/*Alternation*/)
6329             {
6330                 auto next = ParseStackElem!(Location, NonterminalType!15/*Alternation*/)(currentResultLocation, currentResult.get!(15/*Alternation*/)());
6331                 CreatorInstance.NonterminalUnion!([14, 15]) r;
6332                 Location rl;
6333                 gotoParent = parse46(r, rl, currentStart, next);
6334                 if (gotoParent < 0)
6335                     return gotoParent;
6336                 currentResult = r;
6337                 currentResultLocation = rl;
6338             }
6339             else if (currentResult.nonterminalID == 16/*Concatenation*/)
6340             {
6341                 currentResult = ParseResultIn.create(15/*Alternation*/, currentResult.get!(16/*Concatenation*/));
6342                 currentResultLocation = currentResultLocation;
6343             }
6344             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
6345             {
6346                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
6347                 CreatorInstance.NonterminalUnion!([16, 18]) r;
6348                 Location rl;
6349                 gotoParent = parse49(r, rl, currentStart, next);
6350                 if (gotoParent < 0)
6351                     return gotoParent;
6352                 currentResult = r;
6353                 currentResultLocation = rl;
6354             }
6355             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
6356             {
6357                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
6358                 currentResultLocation = currentResultLocation;
6359             }
6360             else if (currentResult.nonterminalID == 35/*ExpressionList*/)
6361             {
6362                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(35/*ExpressionList*/)());
6363                 CreatorInstance.NonterminalUnion!([35, 36]) r;
6364                 Location rl;
6365                 gotoParent = parse100(r, rl, parseStart1, stack1, currentStart, next);
6366                 if (gotoParent < 0)
6367                     return gotoParent;
6368                 currentResult = r;
6369                 currentResultLocation = rl;
6370             }
6371             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
6372             {
6373                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
6374                 NonterminalType!(19) r;
6375                 Location rl;
6376                 gotoParent = parse63(r, rl, currentStart, next);
6377                 if (gotoParent < 0)
6378                     return gotoParent;
6379                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
6380                 currentResultLocation = rl;
6381             }
6382             else if (currentResult.nonterminalID == 55/*ExpressionList?*/)
6383             {
6384                 auto next = ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/)(currentResultLocation, currentResult.get!(55/*ExpressionList?*/)());
6385                 NonterminalType!(36) r;
6386                 Location rl;
6387                 gotoParent = parse102(r, rl, parseStart1, stack1, next);
6388                 if (gotoParent < 0)
6389                     return gotoParent;
6390                 assert(gotoParent > 0);
6391                 result = r;
6392                 resultLocation = rl;
6393                 return gotoParent - 1;
6394             }
6395             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
6396             {
6397                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
6398                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
6399                 Location rl;
6400                 gotoParent = parse80(r, rl, currentStart, next);
6401                 if (gotoParent < 0)
6402                     return gotoParent;
6403                 currentResult = r;
6404                 currentResultLocation = rl;
6405             }
6406             else
6407                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
6408         }
6409 
6410         result = currentResult.get!(36/*Tuple*/);
6411         resultLocation = currentResultLocation;
6412         return gotoParent - 1;
6413     }
6414     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "t(" ExpressionList
6415     // type: unknown
6416     //  Tuple          ->  "t(" ExpressionList?.")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6417     //  ExpressionList ->        ExpressionList."," Expression {")", ","}
6418     private int parse100(ref CreatorInstance.NonterminalUnion!([35, 36]) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
6419     {
6420         alias ThisParseResult = typeof(result);
6421         alias ParseResultIn = CreatorInstance.NonterminalUnion!([35, 36]);
6422         ParseResultIn currentResult;
6423         Location currentResultLocation;
6424         int gotoParent = -1;
6425         Location currentStart = lexer.front.currentLocation;
6426         if (lexer.empty)
6427         {
6428             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6429             return -1;
6430         }
6431         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
6432         {
6433             auto next = popToken();
6434             NonterminalType!(36) r;
6435             Location rl;
6436             gotoParent = parse101(r, rl, parseStart2, stack2, stack1, next);
6437             if (gotoParent < 0)
6438                 return gotoParent;
6439             assert(gotoParent > 0);
6440             result = ThisParseResult.create(36/*Tuple*/, r);
6441             resultLocation = rl;
6442             return gotoParent - 1;
6443         }
6444         else if (lexer.front.symbol == Lexer.tokenID!q{","})
6445         {
6446             auto next = popToken();
6447             NonterminalType!(35) r;
6448             Location rl;
6449             gotoParent = parse61(r, rl, parseStart1, stack1, next);
6450             if (gotoParent < 0)
6451                 return gotoParent;
6452             assert(gotoParent > 0);
6453             result = ThisParseResult.create(35/*ExpressionList*/, r);
6454             resultLocation = rl;
6455             return gotoParent - 1;
6456         }
6457         else
6458         {
6459             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6460                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6461             return -1;
6462         }
6463     }
6464     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "t(" ExpressionList ")"
6465     // type: unknown
6466     //  Tuple ->  "t(" ExpressionList? ")". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6467     private int parse101(ref NonterminalType!(36) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/) stack2, ParseStackElem!(Location, Token) stack1)
6468     {
6469         alias ThisParseResult = typeof(result);
6470         Location currentStart = lexer.front.currentLocation;
6471         {
6472             auto tmp = reduce120_Tuple/*Tuple = "t(" ExpressionList? ")"*/(parseStart3, stack3, stack2, stack1);
6473             result = tmp.val;
6474             resultLocation = tmp.start;
6475             return 2;
6476         }
6477     }
6478     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList "," @regArray_ExpressionAnnotation* ExpressionName ExpressionPrefix* "t(" ExpressionList?
6479     // type: unknown
6480     //  Tuple ->  "t(" ExpressionList?.")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", "-", "|", "^", "+", "t("}
6481     private int parse102(ref NonterminalType!(36) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/) stack1)
6482     {
6483         alias ThisParseResult = typeof(result);
6484         alias ParseResultIn = CreatorInstance.NonterminalUnion!([36]);
6485         ParseResultIn currentResult;
6486         Location currentResultLocation;
6487         int gotoParent = -1;
6488         Location currentStart = lexer.front.currentLocation;
6489         if (lexer.empty)
6490         {
6491             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6492             return -1;
6493         }
6494         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
6495         {
6496             auto next = popToken();
6497             NonterminalType!(36) r;
6498             Location rl;
6499             gotoParent = parse101(r, rl, parseStart2, stack2, stack1, next);
6500             if (gotoParent < 0)
6501                 return gotoParent;
6502             assert(gotoParent > 0);
6503             result = r;
6504             resultLocation = rl;
6505             return gotoParent - 1;
6506         }
6507         else
6508         {
6509             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6510                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6511             return -1;
6512         }
6513     }
6514     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Identifier "(" ExpressionList?
6515     // type: unknown
6516     //  MacroInstance ->  Identifier "(" ExpressionList?.")" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "?", "!", "<", "*", ">>", "-", "|", "^", "+", "t("}
6517     private int parse105(ref NonterminalType!(33) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!55/*ExpressionList?*/) stack1)
6518     {
6519         alias ThisParseResult = typeof(result);
6520         alias ParseResultIn = CreatorInstance.NonterminalUnion!([33]);
6521         ParseResultIn currentResult;
6522         Location currentResultLocation;
6523         int gotoParent = -1;
6524         Location currentStart = lexer.front.currentLocation;
6525         if (lexer.empty)
6526         {
6527             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6528             return -1;
6529         }
6530         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
6531         {
6532             auto next = popToken();
6533             NonterminalType!(33) r;
6534             Location rl;
6535             gotoParent = parse60(r, rl, parseStart3, stack3, stack2, stack1, next);
6536             if (gotoParent < 0)
6537                 return gotoParent;
6538             assert(gotoParent > 0);
6539             result = r;
6540             resultLocation = rl;
6541             return gotoParent - 1;
6542         }
6543         else
6544         {
6545             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6546                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6547             return -1;
6548         }
6549     }
6550     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" Symbol
6551     // type: unknown
6552     //  NegativeLookahead ->  "!" Symbol. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6553     private int parse106(ref NonterminalType!(13) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack1)
6554     {
6555         alias ThisParseResult = typeof(result);
6556         Location currentStart = lexer.front.currentLocation;
6557         {
6558             auto tmp = reduce56_NegativeLookahead/*NegativeLookahead = "!" Symbol*/(parseStart2, stack2, stack1);
6559             result = tmp.val;
6560             resultLocation = tmp.start;
6561             return 1;
6562         }
6563     }
6564     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" "!" "anytoken"
6565     // type: unknown
6566     //  NegativeLookahead ->  "!" "anytoken". {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6567     private int parse107(ref NonterminalType!(13) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
6568     {
6569         alias ThisParseResult = typeof(result);
6570         Location currentStart = lexer.front.currentLocation;
6571         {
6572             auto tmp = reduce57_NegativeLookahead/*NegativeLookahead = "!" "anytoken"*/(parseStart2, stack2, stack1);
6573             result = tmp.val;
6574             resultLocation = tmp.start;
6575             return 1;
6576         }
6577     }
6578     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus "-" $regarray_1
6579     // type: unknown
6580     //  AnnotatedExpression ->  @regArray_ExpressionAnnotation*.ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6581     //  $regarray_1         ->                      $regarray_1.$regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
6582     //  Annotation          ->                                 ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
6583     //  NegativeLookahead   ->                                 ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
6584     //  NegativeLookahead   ->                                 ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, "@", "{", "!", "<", "^", "t("}
6585     //  ExpressionName      ->                                 .Identifier ":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6586     //  ExpressionName?     ->                                 . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6587     //  ExpressionName? ---> ExpressionName
6588     //  $regarrayedge_1_1 ---> Annotation
6589     //  $regarrayedge_1_1 ---> NegativeLookahead
6590     private int parse108(ref CreatorInstance.NonterminalUnion!([19, 57]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
6591     {
6592         alias ThisParseResult = typeof(result);
6593         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 19, 21, 52, 57]);
6594         ParseResultIn currentResult;
6595         Location currentResultLocation;
6596         int gotoParent = -1;
6597         Location currentStart = lexer.front.currentLocation;
6598         if (lexer.empty)
6599         {
6600             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6601             return -1;
6602         }
6603         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
6604         {
6605             Lexer tmpLexer = *lexer;
6606             tmpLexer.popFront();
6607             if (!tmpLexer.empty && tmpLexer.front.symbol == Lexer.tokenID!q{":"})
6608             {
6609                 auto next = popToken();
6610                 NonterminalType!(21) r;
6611                 Location rl;
6612                 gotoParent = parse64(r, rl, currentStart, next);
6613                 if (gotoParent < 0)
6614                     return gotoParent;
6615                 currentResult = ParseResultIn.create(21/*ExpressionName*/, r);
6616                 currentResultLocation = rl;
6617             }
6618             else if (!tmpLexer.empty && (tmpLexer.front.symbol == Lexer.tokenID!"Identifier" || tmpLexer.front.symbol == Lexer.tokenID!"StringLiteral" || tmpLexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || tmpLexer.front.symbol == Lexer.tokenID!q{";"} || tmpLexer.front.symbol == Lexer.tokenID!q{"("} || tmpLexer.front.symbol == Lexer.tokenID!q{")"} || tmpLexer.front.symbol == Lexer.tokenID!q{","} || tmpLexer.front.symbol == Lexer.tokenID!q{"..."} || tmpLexer.front.symbol == Lexer.tokenID!q{"@"} || tmpLexer.front.symbol == Lexer.tokenID!q{"{"} || tmpLexer.front.symbol == Lexer.tokenID!q{"}"} || tmpLexer.front.symbol == Lexer.tokenID!q{"?"} || tmpLexer.front.symbol == Lexer.tokenID!q{"!"} || tmpLexer.front.symbol == Lexer.tokenID!q{"<"} || tmpLexer.front.symbol == Lexer.tokenID!q{"*"} || tmpLexer.front.symbol == Lexer.tokenID!q{">>"} || tmpLexer.front.symbol == Lexer.tokenID!q{"-"} || tmpLexer.front.symbol == Lexer.tokenID!q{"|"} || tmpLexer.front.symbol == Lexer.tokenID!q{"^"} || tmpLexer.front.symbol == Lexer.tokenID!q{"+"} || tmpLexer.front.symbol == Lexer.tokenID!q{"t("}))
6619             {
6620                 auto tmp = reduce82/*ExpressionName? = [virtual]*/();
6621                 currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
6622                 currentResultLocation = tmp.start;
6623                 gotoParent = 0;
6624             }
6625             else
6626             {
6627                 lastError = new SingleParseException!Location(text("unexpected Token \"", tmpLexer.front.content, "\"  \"", lexer.tokenName(tmpLexer.front.symbol), "\""),
6628                     tmpLexer.front.currentLocation, tmpLexer.front.currentTokenEnd);
6629                 return -1;
6630             }
6631         }
6632         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
6633         {
6634             auto next = popToken();
6635             NonterminalType!(10) r;
6636             Location rl;
6637             gotoParent = parse8(r, rl, currentStart, next);
6638             if (gotoParent < 0)
6639                 return gotoParent;
6640             currentResult = ParseResultIn.create(10/*Annotation*/, r);
6641             currentResultLocation = rl;
6642         }
6643         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
6644         {
6645             auto next = popToken();
6646             NonterminalType!(13) r;
6647             Location rl;
6648             gotoParent = parse53(r, rl, currentStart, next);
6649             if (gotoParent < 0)
6650                 return gotoParent;
6651             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
6652             currentResultLocation = rl;
6653         }
6654         else
6655         {
6656             auto tmp = reduce82/*ExpressionName? = [virtual]*/();
6657             currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
6658             currentResultLocation = tmp.start;
6659             gotoParent = 0;
6660         }
6661 
6662         while (gotoParent == 0)
6663         {
6664             if (currentResult.nonterminalID == 10/*Annotation*/)
6665             {
6666                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
6667                 NonterminalType!(57) r;
6668                 Location rl;
6669                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
6670                 if (gotoParent < 0)
6671                     return gotoParent;
6672                 assert(gotoParent > 0);
6673                 result = ThisParseResult.create(57/*$regarray_1*/, r);
6674                 resultLocation = rl;
6675                 return gotoParent - 1;
6676             }
6677             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
6678             {
6679                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
6680                 NonterminalType!(57) r;
6681                 Location rl;
6682                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
6683                 if (gotoParent < 0)
6684                     return gotoParent;
6685                 assert(gotoParent > 0);
6686                 result = ThisParseResult.create(57/*$regarray_1*/, r);
6687                 resultLocation = rl;
6688                 return gotoParent - 1;
6689             }
6690             else if (currentResult.nonterminalID == 21/*ExpressionName*/)
6691             {
6692                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(21/*ExpressionName*/)());
6693                 NonterminalType!(19) r;
6694                 Location rl;
6695                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
6696                 if (gotoParent < 0)
6697                     return gotoParent;
6698                 assert(gotoParent > 0);
6699                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
6700                 resultLocation = rl;
6701                 return gotoParent - 1;
6702             }
6703             else if (currentResult.nonterminalID == 52/*ExpressionName?*/)
6704             {
6705                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(52/*ExpressionName?*/)());
6706                 NonterminalType!(19) r;
6707                 Location rl;
6708                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
6709                 if (gotoParent < 0)
6710                     return gotoParent;
6711                 assert(gotoParent > 0);
6712                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
6713                 resultLocation = rl;
6714                 return gotoParent - 1;
6715             }
6716             else
6717                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
6718         }
6719 
6720         result = currentResult;
6721         resultLocation = currentResultLocation;
6722         return gotoParent - 1;
6723     }
6724     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus+
6725     // type: unknown
6726     //  Concatenation                   ->  TokenMinus TokenMinus+.@regArray_ProductionAnnotation* {";", ")", ",", "}", "|"}
6727     //  TokenMinus+                     ->             TokenMinus+.TokenMinus {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6728     //  Annotation                      ->                        ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6729     //  NegativeLookahead               ->                        ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6730     //  NegativeLookahead               ->                        ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6731     //  TokenMinus                      ->                        .TokenMinus "-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6732     //  TokenMinus                      ->                        .AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6733     //  AnnotatedExpression             ->                        .@regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6734     //  @regArray_ProductionAnnotation* ->                        . {";", ")", ",", "}", "|"}
6735     //  @regArray_ExpressionAnnotation* ->                        . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6736     //  $regarray_1                     ->                        .$regarray_1 $regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6737     //  $regarray_1                     ->                        .$regarrayedge_0_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6738     //  @regArray_ProductionAnnotation* ---> $regarray_1
6739     //  @regArray_ExpressionAnnotation* ---> $regarray_1
6740     //  $regarrayedge_0_1 ---> Annotation
6741     //  $regarrayedge_0_1 ---> NegativeLookahead
6742     private int parse109(ref CreatorInstance.NonterminalUnion!([16, 46]) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack2, Location parseStart1, ParseStackElem!(Location, NonterminalType!46/*TokenMinus+*/) stack1)
6743     {
6744         alias ThisParseResult = typeof(result);
6745         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 16, 18, 19, 46, 48, 51, 57]);
6746         ParseResultIn currentResult;
6747         Location currentResultLocation;
6748         int gotoParent = -1;
6749         Location currentStart = lexer.front.currentLocation;
6750         if (lexer.empty)
6751         {
6752             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6753             return -1;
6754         }
6755         else if (lexer.front.symbol == Lexer.tokenID!"Identifier" || lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
6756         {
6757             auto tmp = reduce127/*@regArray_ExpressionAnnotation* @array @directUnwrap @regArray =*/();
6758             currentResult = ParseResultIn.create(51/*@regArray_ExpressionAnnotation**/, tmp.val);
6759             currentResultLocation = tmp.start;
6760             gotoParent = 0;
6761         }
6762         else if (lexer.front.symbol == Lexer.tokenID!q{";"} || lexer.front.symbol == Lexer.tokenID!q{")"} || lexer.front.symbol == Lexer.tokenID!q{","} || lexer.front.symbol == Lexer.tokenID!q{"}"} || lexer.front.symbol == Lexer.tokenID!q{"|"})
6763         {
6764             auto tmp = reduce128/*@regArray_ProductionAnnotation* @array @directUnwrap @regArray =*/();
6765             currentResult = ParseResultIn.create(48/*@regArray_ProductionAnnotation**/, tmp.val);
6766             currentResultLocation = tmp.start;
6767             gotoParent = 0;
6768         }
6769         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
6770         {
6771             auto next = popToken();
6772             NonterminalType!(10) r;
6773             Location rl;
6774             gotoParent = parse8(r, rl, currentStart, next);
6775             if (gotoParent < 0)
6776                 return gotoParent;
6777             currentResult = ParseResultIn.create(10/*Annotation*/, r);
6778             currentResultLocation = rl;
6779         }
6780         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
6781         {
6782             auto next = popToken();
6783             NonterminalType!(13) r;
6784             Location rl;
6785             gotoParent = parse53(r, rl, currentStart, next);
6786             if (gotoParent < 0)
6787                 return gotoParent;
6788             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
6789             currentResultLocation = rl;
6790         }
6791         else
6792         {
6793             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
6794                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
6795             return -1;
6796         }
6797 
6798         while (gotoParent == 0)
6799         {
6800             if (currentResult.nonterminalID == 10/*Annotation*/)
6801             {
6802                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
6803                 NonterminalType!(57) r;
6804                 Location rl;
6805                 gotoParent = parse43(r, rl, currentStart, next);
6806                 if (gotoParent < 0)
6807                     return gotoParent;
6808                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
6809                 currentResultLocation = rl;
6810             }
6811             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
6812             {
6813                 auto next = ParseStackElem!(Location, NonterminalType!58/*$regarrayedge_0_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
6814                 NonterminalType!(57) r;
6815                 Location rl;
6816                 gotoParent = parse43(r, rl, currentStart, next);
6817                 if (gotoParent < 0)
6818                     return gotoParent;
6819                 currentResult = ParseResultIn.create(57/*$regarray_1*/, r);
6820                 currentResultLocation = rl;
6821             }
6822             else if (currentResult.nonterminalID == 18/*TokenMinus*/)
6823             {
6824                 auto next = ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/)(currentResultLocation, currentResult.get!(18/*TokenMinus*/)());
6825                 CreatorInstance.NonterminalUnion!([18, 46]) r;
6826                 Location rl;
6827                 gotoParent = parse110(r, rl, parseStart1, stack1, currentStart, next);
6828                 if (gotoParent < 0)
6829                     return gotoParent;
6830                 currentResult = r;
6831                 currentResultLocation = rl;
6832             }
6833             else if (currentResult.nonterminalID == 19/*AnnotatedExpression*/)
6834             {
6835                 currentResult = ParseResultIn.create(18/*TokenMinus*/, currentResult.get!(19/*AnnotatedExpression*/));
6836                 currentResultLocation = currentResultLocation;
6837             }
6838             else if (currentResult.nonterminalID == 48/*@regArray_ProductionAnnotation**/)
6839             {
6840                 auto next = ParseStackElem!(Location, NonterminalType!48/*@regArray_ProductionAnnotation**/)(currentResultLocation, currentResult.get!(48/*@regArray_ProductionAnnotation**/)());
6841                 NonterminalType!(16) r;
6842                 Location rl;
6843                 gotoParent = parse111(r, rl, parseStart2, stack2, stack1, next);
6844                 if (gotoParent < 0)
6845                     return gotoParent;
6846                 assert(gotoParent > 0);
6847                 result = ThisParseResult.create(16/*Concatenation*/, r);
6848                 resultLocation = rl;
6849                 return gotoParent - 1;
6850             }
6851             else if (currentResult.nonterminalID == 51/*@regArray_ExpressionAnnotation**/)
6852             {
6853                 auto next = ParseStackElem!(Location, NonterminalType!51/*@regArray_ExpressionAnnotation**/)(currentResultLocation, currentResult.get!(51/*@regArray_ExpressionAnnotation**/)());
6854                 NonterminalType!(19) r;
6855                 Location rl;
6856                 gotoParent = parse63(r, rl, currentStart, next);
6857                 if (gotoParent < 0)
6858                     return gotoParent;
6859                 currentResult = ParseResultIn.create(19/*AnnotatedExpression*/, r);
6860                 currentResultLocation = rl;
6861             }
6862             else if (currentResult.nonterminalID == 57/*$regarray_1*/)
6863             {
6864                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(57/*$regarray_1*/)());
6865                 CreatorInstance.NonterminalUnion!([16, 19, 57]) r;
6866                 Location rl;
6867                 gotoParent = parse112(r, rl, parseStart2, stack2, stack1, currentStart, next);
6868                 if (gotoParent < 0)
6869                     return gotoParent;
6870                 currentResult = r;
6871                 currentResultLocation = rl;
6872             }
6873             else
6874                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
6875         }
6876 
6877         result = currentResult;
6878         resultLocation = currentResultLocation;
6879         return gotoParent - 1;
6880     }
6881     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus+ TokenMinus
6882     // type: unknown
6883     //  TokenMinus+ ->  TokenMinus+ TokenMinus. {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6884     //  TokenMinus  ->              TokenMinus."-" AnnotatedExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6885     private int parse110(ref CreatorInstance.NonterminalUnion!([18, 46]) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!46/*TokenMinus+*/) stack2, Location parseStart1, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack1)
6886     {
6887         alias ThisParseResult = typeof(result);
6888         alias ParseResultIn = CreatorInstance.NonterminalUnion!([18, 46]);
6889         ParseResultIn currentResult;
6890         Location currentResultLocation;
6891         int gotoParent = -1;
6892         Location currentStart = lexer.front.currentLocation;
6893         if (lexer.empty)
6894         {
6895             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6896             return -1;
6897         }
6898         else if (lexer.front.symbol == Lexer.tokenID!q{"-"})
6899         {
6900             auto next = popToken();
6901             NonterminalType!(18) r;
6902             Location rl;
6903             gotoParent = parse51(r, rl, parseStart1, stack1, next);
6904             if (gotoParent < 0)
6905                 return gotoParent;
6906             assert(gotoParent > 0);
6907             result = ThisParseResult.create(18/*TokenMinus*/, r);
6908             resultLocation = rl;
6909             return gotoParent - 1;
6910         }
6911         else
6912         {
6913             auto tmp = reduce63/*TokenMinus+ @array = TokenMinus+ TokenMinus [virtual]*/(parseStart2, stack2, stack1);
6914             result = ThisParseResult.create(46/*TokenMinus+*/, tmp.val);
6915             resultLocation = tmp.start;
6916             return 1;
6917         }
6918     }
6919     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus+ @regArray_ProductionAnnotation*
6920     // type: unknown
6921     //  Concatenation ->  TokenMinus TokenMinus+ @regArray_ProductionAnnotation*. {";", ")", ",", "}", "|"}
6922     private int parse111(ref NonterminalType!(16) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack3, ParseStackElem!(Location, NonterminalType!46/*TokenMinus+*/) stack2, ParseStackElem!(Location, NonterminalType!48/*@regArray_ProductionAnnotation**/) stack1)
6923     {
6924         alias ThisParseResult = typeof(result);
6925         Location currentStart = lexer.front.currentLocation;
6926         {
6927             auto tmp = reduce68_Concatenation/*Concatenation = TokenMinus TokenMinus+ @regArray @regArray_ProductionAnnotation**/(parseStart3, stack3, stack2, stack1);
6928             result = tmp.val;
6929             resultLocation = tmp.start;
6930             return 2;
6931         }
6932     }
6933     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus TokenMinus+ $regarray_1
6934     // type: unknown
6935     //  Concatenation       ->  TokenMinus TokenMinus+ @regArray_ProductionAnnotation*. {";", ")", ",", "}", "|"}
6936     //  AnnotatedExpression ->                         @regArray_ExpressionAnnotation*.ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
6937     //  $regarray_1         ->                                             $regarray_1.$regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6938     //  Annotation          ->                                                        ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6939     //  NegativeLookahead   ->                                                        ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6940     //  NegativeLookahead   ->                                                        ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
6941     //  ExpressionName      ->                                                        .Identifier ":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6942     //  ExpressionName?     ->                                                        . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
6943     //  ExpressionName? ---> ExpressionName
6944     //  $regarrayedge_1_1 ---> Annotation
6945     //  $regarrayedge_1_1 ---> NegativeLookahead
6946     private int parse112(ref CreatorInstance.NonterminalUnion!([16, 19, 57]) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack3, ParseStackElem!(Location, NonterminalType!46/*TokenMinus+*/) stack2, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
6947     {
6948         alias ThisParseResult = typeof(result);
6949         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 16, 19, 21, 52, 57]);
6950         ParseResultIn currentResult;
6951         Location currentResultLocation;
6952         int gotoParent = -1;
6953         Location currentStart = lexer.front.currentLocation;
6954         if (lexer.empty)
6955         {
6956             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
6957             return -1;
6958         }
6959         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
6960         {
6961             Lexer tmpLexer = *lexer;
6962             tmpLexer.popFront();
6963             if (!tmpLexer.empty && tmpLexer.front.symbol == Lexer.tokenID!q{":"})
6964             {
6965                 auto next = popToken();
6966                 NonterminalType!(21) r;
6967                 Location rl;
6968                 gotoParent = parse64(r, rl, currentStart, next);
6969                 if (gotoParent < 0)
6970                     return gotoParent;
6971                 currentResult = ParseResultIn.create(21/*ExpressionName*/, r);
6972                 currentResultLocation = rl;
6973             }
6974             else if (!tmpLexer.empty && (tmpLexer.front.symbol == Lexer.tokenID!"Identifier" || tmpLexer.front.symbol == Lexer.tokenID!"StringLiteral" || tmpLexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || tmpLexer.front.symbol == Lexer.tokenID!q{";"} || tmpLexer.front.symbol == Lexer.tokenID!q{"("} || tmpLexer.front.symbol == Lexer.tokenID!q{")"} || tmpLexer.front.symbol == Lexer.tokenID!q{","} || tmpLexer.front.symbol == Lexer.tokenID!q{"..."} || tmpLexer.front.symbol == Lexer.tokenID!q{"@"} || tmpLexer.front.symbol == Lexer.tokenID!q{"{"} || tmpLexer.front.symbol == Lexer.tokenID!q{"}"} || tmpLexer.front.symbol == Lexer.tokenID!q{"?"} || tmpLexer.front.symbol == Lexer.tokenID!q{"!"} || tmpLexer.front.symbol == Lexer.tokenID!q{"<"} || tmpLexer.front.symbol == Lexer.tokenID!q{"*"} || tmpLexer.front.symbol == Lexer.tokenID!q{">>"} || tmpLexer.front.symbol == Lexer.tokenID!q{"-"} || tmpLexer.front.symbol == Lexer.tokenID!q{"|"} || tmpLexer.front.symbol == Lexer.tokenID!q{"^"} || tmpLexer.front.symbol == Lexer.tokenID!q{"+"} || tmpLexer.front.symbol == Lexer.tokenID!q{"t("}))
6975             {
6976                 auto tmp = reduce82/*ExpressionName? = [virtual]*/();
6977                 currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
6978                 currentResultLocation = tmp.start;
6979                 gotoParent = 0;
6980             }
6981             else
6982             {
6983                 lastError = new SingleParseException!Location(text("unexpected Token \"", tmpLexer.front.content, "\"  \"", lexer.tokenName(tmpLexer.front.symbol), "\""),
6984                     tmpLexer.front.currentLocation, tmpLexer.front.currentTokenEnd);
6985                 return -1;
6986             }
6987         }
6988         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
6989         {
6990             auto tmp = reduce82/*ExpressionName? = [virtual]*/();
6991             currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
6992             currentResultLocation = tmp.start;
6993             gotoParent = 0;
6994         }
6995         else if (lexer.front.symbol == Lexer.tokenID!q{";"} || lexer.front.symbol == Lexer.tokenID!q{")"} || lexer.front.symbol == Lexer.tokenID!q{","} || lexer.front.symbol == Lexer.tokenID!q{"}"} || lexer.front.symbol == Lexer.tokenID!q{"|"})
6996         {
6997             auto tmp = reduce68_Concatenation/*Concatenation = TokenMinus TokenMinus+ @regArray @regArray_ProductionAnnotation**/(parseStart3, stack3, stack2, stack1);
6998             result = ThisParseResult.create(16/*Concatenation*/, tmp.val);
6999             resultLocation = tmp.start;
7000             return 2;
7001         }
7002         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
7003         {
7004             auto next = popToken();
7005             NonterminalType!(10) r;
7006             Location rl;
7007             gotoParent = parse8(r, rl, currentStart, next);
7008             if (gotoParent < 0)
7009                 return gotoParent;
7010             currentResult = ParseResultIn.create(10/*Annotation*/, r);
7011             currentResultLocation = rl;
7012         }
7013         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
7014         {
7015             auto next = popToken();
7016             NonterminalType!(13) r;
7017             Location rl;
7018             gotoParent = parse53(r, rl, currentStart, next);
7019             if (gotoParent < 0)
7020                 return gotoParent;
7021             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
7022             currentResultLocation = rl;
7023         }
7024         else
7025         {
7026             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7027                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7028             return -1;
7029         }
7030 
7031         while (gotoParent == 0)
7032         {
7033             if (currentResult.nonterminalID == 10/*Annotation*/)
7034             {
7035                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
7036                 NonterminalType!(57) r;
7037                 Location rl;
7038                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
7039                 if (gotoParent < 0)
7040                     return gotoParent;
7041                 assert(gotoParent > 0);
7042                 result = ThisParseResult.create(57/*$regarray_1*/, r);
7043                 resultLocation = rl;
7044                 return gotoParent - 1;
7045             }
7046             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
7047             {
7048                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
7049                 NonterminalType!(57) r;
7050                 Location rl;
7051                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
7052                 if (gotoParent < 0)
7053                     return gotoParent;
7054                 assert(gotoParent > 0);
7055                 result = ThisParseResult.create(57/*$regarray_1*/, r);
7056                 resultLocation = rl;
7057                 return gotoParent - 1;
7058             }
7059             else if (currentResult.nonterminalID == 21/*ExpressionName*/)
7060             {
7061                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(21/*ExpressionName*/)());
7062                 NonterminalType!(19) r;
7063                 Location rl;
7064                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
7065                 if (gotoParent < 0)
7066                     return gotoParent;
7067                 assert(gotoParent > 0);
7068                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
7069                 resultLocation = rl;
7070                 return gotoParent - 1;
7071             }
7072             else if (currentResult.nonterminalID == 52/*ExpressionName?*/)
7073             {
7074                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(52/*ExpressionName?*/)());
7075                 NonterminalType!(19) r;
7076                 Location rl;
7077                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
7078                 if (gotoParent < 0)
7079                     return gotoParent;
7080                 assert(gotoParent > 0);
7081                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
7082                 resultLocation = rl;
7083                 return gotoParent - 1;
7084             }
7085             else
7086                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
7087         }
7088 
7089         result = currentResult;
7090         resultLocation = currentResultLocation;
7091         return gotoParent - 1;
7092     }
7093     // path: EBNF DeclarationType Identifier MacroParametersPart Annotation* "=" Alternation "|" TokenMinus $regarray_1
7094     // type: unknown
7095     //  Concatenation       ->  TokenMinus @regArray_ProductionAnnotation+. {";", ")", ",", "}", "|"}
7096     //  AnnotatedExpression ->             @regArray_ExpressionAnnotation*.ExpressionName? ExpressionPrefix* PostfixExpression {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "-", "|", "^", "t("}
7097     //  $regarray_1         ->                                 $regarray_1.$regarrayedge_1_1 {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
7098     //  Annotation          ->                                            ."@" Identifier AnnotationParams? {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
7099     //  NegativeLookahead   ->                                            ."!" Symbol {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
7100     //  NegativeLookahead   ->                                            ."!" "anytoken" {Identifier, StringLiteral, CharacterSetLiteral, ";", ")", ",", "@", "{", "}", "!", "<", "|", "^", "t("}
7101     //  ExpressionName      ->                                            .Identifier ":" {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
7102     //  ExpressionName?     ->                                            . {Identifier, StringLiteral, CharacterSetLiteral, "{", "<", "^", "t("}
7103     //  ExpressionName? ---> ExpressionName
7104     //  $regarrayedge_1_1 ---> Annotation
7105     //  $regarrayedge_1_1 ---> NegativeLookahead
7106     private int parse113(ref CreatorInstance.NonterminalUnion!([16, 19, 57]) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!18/*TokenMinus*/) stack2, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
7107     {
7108         alias ThisParseResult = typeof(result);
7109         alias ParseResultIn = CreatorInstance.NonterminalUnion!([10, 13, 16, 19, 21, 52, 57]);
7110         ParseResultIn currentResult;
7111         Location currentResultLocation;
7112         int gotoParent = -1;
7113         Location currentStart = lexer.front.currentLocation;
7114         if (lexer.empty)
7115         {
7116             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7117             return -1;
7118         }
7119         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7120         {
7121             Lexer tmpLexer = *lexer;
7122             tmpLexer.popFront();
7123             if (!tmpLexer.empty && tmpLexer.front.symbol == Lexer.tokenID!q{":"})
7124             {
7125                 auto next = popToken();
7126                 NonterminalType!(21) r;
7127                 Location rl;
7128                 gotoParent = parse64(r, rl, currentStart, next);
7129                 if (gotoParent < 0)
7130                     return gotoParent;
7131                 currentResult = ParseResultIn.create(21/*ExpressionName*/, r);
7132                 currentResultLocation = rl;
7133             }
7134             else if (!tmpLexer.empty && (tmpLexer.front.symbol == Lexer.tokenID!"Identifier" || tmpLexer.front.symbol == Lexer.tokenID!"StringLiteral" || tmpLexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || tmpLexer.front.symbol == Lexer.tokenID!q{";"} || tmpLexer.front.symbol == Lexer.tokenID!q{"("} || tmpLexer.front.symbol == Lexer.tokenID!q{")"} || tmpLexer.front.symbol == Lexer.tokenID!q{","} || tmpLexer.front.symbol == Lexer.tokenID!q{"..."} || tmpLexer.front.symbol == Lexer.tokenID!q{"@"} || tmpLexer.front.symbol == Lexer.tokenID!q{"{"} || tmpLexer.front.symbol == Lexer.tokenID!q{"}"} || tmpLexer.front.symbol == Lexer.tokenID!q{"?"} || tmpLexer.front.symbol == Lexer.tokenID!q{"!"} || tmpLexer.front.symbol == Lexer.tokenID!q{"<"} || tmpLexer.front.symbol == Lexer.tokenID!q{"*"} || tmpLexer.front.symbol == Lexer.tokenID!q{">>"} || tmpLexer.front.symbol == Lexer.tokenID!q{"-"} || tmpLexer.front.symbol == Lexer.tokenID!q{"|"} || tmpLexer.front.symbol == Lexer.tokenID!q{"^"} || tmpLexer.front.symbol == Lexer.tokenID!q{"+"} || tmpLexer.front.symbol == Lexer.tokenID!q{"t("}))
7135             {
7136                 auto tmp = reduce82/*ExpressionName? = [virtual]*/();
7137                 currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
7138                 currentResultLocation = tmp.start;
7139                 gotoParent = 0;
7140             }
7141             else
7142             {
7143                 lastError = new SingleParseException!Location(text("unexpected Token \"", tmpLexer.front.content, "\"  \"", lexer.tokenName(tmpLexer.front.symbol), "\""),
7144                     tmpLexer.front.currentLocation, tmpLexer.front.currentTokenEnd);
7145                 return -1;
7146             }
7147         }
7148         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral" || lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral" || lexer.front.symbol == Lexer.tokenID!q{"{"} || lexer.front.symbol == Lexer.tokenID!q{"<"} || lexer.front.symbol == Lexer.tokenID!q{"^"} || lexer.front.symbol == Lexer.tokenID!q{"t("})
7149         {
7150             auto tmp = reduce82/*ExpressionName? = [virtual]*/();
7151             currentResult = ParseResultIn.create(52/*ExpressionName?*/, tmp.val);
7152             currentResultLocation = tmp.start;
7153             gotoParent = 0;
7154         }
7155         else if (lexer.front.symbol == Lexer.tokenID!q{";"} || lexer.front.symbol == Lexer.tokenID!q{")"} || lexer.front.symbol == Lexer.tokenID!q{","} || lexer.front.symbol == Lexer.tokenID!q{"}"} || lexer.front.symbol == Lexer.tokenID!q{"|"})
7156         {
7157             auto tmp = reduce71_Concatenation/*Concatenation = TokenMinus @regArray @regArray_ProductionAnnotation+*/(parseStart2, stack2, stack1);
7158             result = ThisParseResult.create(16/*Concatenation*/, tmp.val);
7159             resultLocation = tmp.start;
7160             return 1;
7161         }
7162         else if (lexer.front.symbol == Lexer.tokenID!q{"@"})
7163         {
7164             auto next = popToken();
7165             NonterminalType!(10) r;
7166             Location rl;
7167             gotoParent = parse8(r, rl, currentStart, next);
7168             if (gotoParent < 0)
7169                 return gotoParent;
7170             currentResult = ParseResultIn.create(10/*Annotation*/, r);
7171             currentResultLocation = rl;
7172         }
7173         else if (lexer.front.symbol == Lexer.tokenID!q{"!"})
7174         {
7175             auto next = popToken();
7176             NonterminalType!(13) r;
7177             Location rl;
7178             gotoParent = parse53(r, rl, currentStart, next);
7179             if (gotoParent < 0)
7180                 return gotoParent;
7181             currentResult = ParseResultIn.create(13/*NegativeLookahead*/, r);
7182             currentResultLocation = rl;
7183         }
7184         else
7185         {
7186             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7187                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7188             return -1;
7189         }
7190 
7191         while (gotoParent == 0)
7192         {
7193             if (currentResult.nonterminalID == 10/*Annotation*/)
7194             {
7195                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(10/*Annotation*/)());
7196                 NonterminalType!(57) r;
7197                 Location rl;
7198                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
7199                 if (gotoParent < 0)
7200                     return gotoParent;
7201                 assert(gotoParent > 0);
7202                 result = ThisParseResult.create(57/*$regarray_1*/, r);
7203                 resultLocation = rl;
7204                 return gotoParent - 1;
7205             }
7206             else if (currentResult.nonterminalID == 13/*NegativeLookahead*/)
7207             {
7208                 auto next = ParseStackElem!(Location, NonterminalType!59/*$regarrayedge_1_1*/)(currentResultLocation, currentResult.get!(13/*NegativeLookahead*/)());
7209                 NonterminalType!(57) r;
7210                 Location rl;
7211                 gotoParent = parse81(r, rl, parseStart1, stack1, next);
7212                 if (gotoParent < 0)
7213                     return gotoParent;
7214                 assert(gotoParent > 0);
7215                 result = ThisParseResult.create(57/*$regarray_1*/, r);
7216                 resultLocation = rl;
7217                 return gotoParent - 1;
7218             }
7219             else if (currentResult.nonterminalID == 21/*ExpressionName*/)
7220             {
7221                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(21/*ExpressionName*/)());
7222                 NonterminalType!(19) r;
7223                 Location rl;
7224                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
7225                 if (gotoParent < 0)
7226                     return gotoParent;
7227                 assert(gotoParent > 0);
7228                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
7229                 resultLocation = rl;
7230                 return gotoParent - 1;
7231             }
7232             else if (currentResult.nonterminalID == 52/*ExpressionName?*/)
7233             {
7234                 auto next = ParseStackElem!(Location, NonterminalType!52/*ExpressionName?*/)(currentResultLocation, currentResult.get!(52/*ExpressionName?*/)());
7235                 NonterminalType!(19) r;
7236                 Location rl;
7237                 gotoParent = parse66(r, rl, parseStart1, stack1, next);
7238                 if (gotoParent < 0)
7239                     return gotoParent;
7240                 assert(gotoParent > 0);
7241                 result = ThisParseResult.create(19/*AnnotatedExpression*/, r);
7242                 resultLocation = rl;
7243                 return gotoParent - 1;
7244             }
7245             else
7246                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
7247         }
7248 
7249         result = currentResult;
7250         resultLocation = currentResultLocation;
7251         return gotoParent - 1;
7252     }
7253     // path: EBNF DeclarationType Identifier "("
7254     // type: unknown
7255     //  MacroParametersPart ->  "(".MacroParameters? ")" {";", "=", "@"}
7256     //  MacroParameters     ->     .MacroParameters "," MacroParameter {")", ","}
7257     //  MacroParameters     ->     .MacroParameter {")", ","}
7258     //  MacroParameter      ->     .Identifier {")", ","}
7259     //  MacroParameter      ->     .Identifier "..." {")", ","}
7260     //  MacroParameters?    ->     . {")"}
7261     //  MacroParameters? ---> MacroParameters
7262     private int parse114(ref NonterminalType!(4) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7263     {
7264         alias ThisParseResult = typeof(result);
7265         alias ParseResultIn = CreatorInstance.NonterminalUnion!([4, 5, 6, 42]);
7266         ParseResultIn currentResult;
7267         Location currentResultLocation;
7268         int gotoParent = -1;
7269         Location currentStart = lexer.front.currentLocation;
7270         if (lexer.empty)
7271         {
7272             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7273             return -1;
7274         }
7275         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7276         {
7277             auto next = popToken();
7278             NonterminalType!(6) r;
7279             Location rl;
7280             gotoParent = parse115(r, rl, currentStart, next);
7281             if (gotoParent < 0)
7282                 return gotoParent;
7283             currentResult = ParseResultIn.create(6/*MacroParameter*/, r);
7284             currentResultLocation = rl;
7285         }
7286         else
7287         {
7288             auto tmp = reduce20/*MacroParameters? = [virtual]*/();
7289             currentResult = ParseResultIn.create(42/*MacroParameters?*/, tmp.val);
7290             currentResultLocation = tmp.start;
7291             gotoParent = 0;
7292         }
7293 
7294         while (gotoParent == 0)
7295         {
7296             if (currentResult.nonterminalID == 5/*MacroParameters*/)
7297             {
7298                 auto next = ParseStackElem!(Location, CreatorInstance.NonterminalArray)(currentResultLocation, currentResult.get!(5/*MacroParameters*/)());
7299                 CreatorInstance.NonterminalUnion!([4, 5]) r;
7300                 Location rl;
7301                 gotoParent = parse117(r, rl, parseStart1, stack1, currentStart, next);
7302                 if (gotoParent < 0)
7303                     return gotoParent;
7304                 currentResult = r;
7305                 currentResultLocation = rl;
7306             }
7307             else if (currentResult.nonterminalID == 6/*MacroParameter*/)
7308             {
7309                 auto next = ParseStackElem!(Location, NonterminalType!6/*MacroParameter*/)(currentResultLocation, currentResult.get!(6/*MacroParameter*/)());
7310                 NonterminalType!(5) r;
7311                 Location rl;
7312                 gotoParent = parse121(r, rl, currentStart, next);
7313                 if (gotoParent < 0)
7314                     return gotoParent;
7315                 currentResult = ParseResultIn.create(5/*MacroParameters*/, r);
7316                 currentResultLocation = rl;
7317             }
7318             else if (currentResult.nonterminalID == 42/*MacroParameters?*/)
7319             {
7320                 auto next = ParseStackElem!(Location, NonterminalType!42/*MacroParameters?*/)(currentResultLocation, currentResult.get!(42/*MacroParameters?*/)());
7321                 NonterminalType!(4) r;
7322                 Location rl;
7323                 gotoParent = parse122(r, rl, parseStart1, stack1, next);
7324                 if (gotoParent < 0)
7325                     return gotoParent;
7326                 assert(gotoParent > 0);
7327                 result = r;
7328                 resultLocation = rl;
7329                 return gotoParent - 1;
7330             }
7331             else
7332                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
7333         }
7334 
7335         result = currentResult.get!(4/*MacroParametersPart*/);
7336         resultLocation = currentResultLocation;
7337         return gotoParent - 1;
7338     }
7339     // path: EBNF DeclarationType Identifier "(" Identifier
7340     // type: unknown
7341     //  MacroParameter ->  Identifier. {")", ","}
7342     //  MacroParameter ->  Identifier."..." {")", ","}
7343     private int parse115(ref NonterminalType!(6) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7344     {
7345         alias ThisParseResult = typeof(result);
7346         alias ParseResultIn = CreatorInstance.NonterminalUnion!([6]);
7347         ParseResultIn currentResult;
7348         Location currentResultLocation;
7349         int gotoParent = -1;
7350         Location currentStart = lexer.front.currentLocation;
7351         if (lexer.empty)
7352         {
7353             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7354             return -1;
7355         }
7356         else if (lexer.front.symbol == Lexer.tokenID!q{"..."})
7357         {
7358             auto next = popToken();
7359             NonterminalType!(6) r;
7360             Location rl;
7361             gotoParent = parse116(r, rl, parseStart1, stack1, next);
7362             if (gotoParent < 0)
7363                 return gotoParent;
7364             assert(gotoParent > 0);
7365             result = r;
7366             resultLocation = rl;
7367             return gotoParent - 1;
7368         }
7369         else
7370         {
7371             auto tmp = reduce24_MacroParameter/*MacroParameter = Identifier*/(parseStart1, stack1);
7372             result = tmp.val;
7373             resultLocation = tmp.start;
7374             return 0;
7375         }
7376     }
7377     // path: EBNF DeclarationType Identifier "(" Identifier "..."
7378     // type: unknown
7379     //  MacroParameter ->  Identifier "...". {")", ","}
7380     private int parse116(ref NonterminalType!(6) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
7381     {
7382         alias ThisParseResult = typeof(result);
7383         Location currentStart = lexer.front.currentLocation;
7384         {
7385             auto tmp = reduce25_MacroParameter/*MacroParameter = Identifier "..."*/(parseStart2, stack2, stack1);
7386             result = tmp.val;
7387             resultLocation = tmp.start;
7388             return 1;
7389         }
7390     }
7391     // path: EBNF DeclarationType Identifier "(" MacroParameters
7392     // type: unknown
7393     //  MacroParametersPart ->  "(" MacroParameters?.")" {";", "=", "@"}
7394     //  MacroParameters     ->       MacroParameters."," MacroParameter {")", ","}
7395     private int parse117(ref CreatorInstance.NonterminalUnion!([4, 5]) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, Location parseStart1, ParseStackElem!(Location, CreatorInstance.NonterminalArray) stack1)
7396     {
7397         alias ThisParseResult = typeof(result);
7398         alias ParseResultIn = CreatorInstance.NonterminalUnion!([4, 5]);
7399         ParseResultIn currentResult;
7400         Location currentResultLocation;
7401         int gotoParent = -1;
7402         Location currentStart = lexer.front.currentLocation;
7403         if (lexer.empty)
7404         {
7405             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7406             return -1;
7407         }
7408         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
7409         {
7410             auto next = popToken();
7411             NonterminalType!(4) r;
7412             Location rl;
7413             gotoParent = parse118(r, rl, parseStart2, stack2, stack1, next);
7414             if (gotoParent < 0)
7415                 return gotoParent;
7416             assert(gotoParent > 0);
7417             result = ThisParseResult.create(4/*MacroParametersPart*/, r);
7418             resultLocation = rl;
7419             return gotoParent - 1;
7420         }
7421         else if (lexer.front.symbol == Lexer.tokenID!q{","})
7422         {
7423             auto next = popToken();
7424             NonterminalType!(5) r;
7425             Location rl;
7426             gotoParent = parse119(r, rl, parseStart1, stack1, next);
7427             if (gotoParent < 0)
7428                 return gotoParent;
7429             assert(gotoParent > 0);
7430             result = ThisParseResult.create(5/*MacroParameters*/, r);
7431             resultLocation = rl;
7432             return gotoParent - 1;
7433         }
7434         else
7435         {
7436             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7437                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7438             return -1;
7439         }
7440     }
7441     // path: EBNF DeclarationType Identifier "(" MacroParameters ")"
7442     // type: unknown
7443     //  MacroParametersPart ->  "(" MacroParameters? ")". {";", "=", "@"}
7444     private int parse118(ref NonterminalType!(4) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!42/*MacroParameters?*/) stack2, ParseStackElem!(Location, Token) stack1)
7445     {
7446         alias ThisParseResult = typeof(result);
7447         Location currentStart = lexer.front.currentLocation;
7448         {
7449             auto tmp = reduce21_MacroParametersPart/*MacroParametersPart = "(" MacroParameters? ")"*/(parseStart3, stack3, stack2, stack1);
7450             result = tmp.val;
7451             resultLocation = tmp.start;
7452             return 2;
7453         }
7454     }
7455     // path: EBNF DeclarationType Identifier "(" MacroParameters ","
7456     // type: unknown
7457     //  MacroParameters ->  MacroParameters ",".MacroParameter {")", ","}
7458     //  MacroParameter  ->                     .Identifier {")", ","}
7459     //  MacroParameter  ->                     .Identifier "..." {")", ","}
7460     private int parse119(ref NonterminalType!(5) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!5/*MacroParameters*/) stack2, ParseStackElem!(Location, Token) stack1)
7461     {
7462         alias ThisParseResult = typeof(result);
7463         alias ParseResultIn = CreatorInstance.NonterminalUnion!([5, 6]);
7464         ParseResultIn currentResult;
7465         Location currentResultLocation;
7466         int gotoParent = -1;
7467         Location currentStart = lexer.front.currentLocation;
7468         if (lexer.empty)
7469         {
7470             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7471             return -1;
7472         }
7473         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7474         {
7475             auto next = popToken();
7476             NonterminalType!(6) r;
7477             Location rl;
7478             gotoParent = parse115(r, rl, currentStart, next);
7479             if (gotoParent < 0)
7480                 return gotoParent;
7481             currentResult = ParseResultIn.create(6/*MacroParameter*/, r);
7482             currentResultLocation = rl;
7483         }
7484         else
7485         {
7486             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7487                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7488             return -1;
7489         }
7490 
7491         while (gotoParent == 0)
7492         {
7493             if (currentResult.nonterminalID == 6/*MacroParameter*/)
7494             {
7495                 auto next = ParseStackElem!(Location, NonterminalType!6/*MacroParameter*/)(currentResultLocation, currentResult.get!(6/*MacroParameter*/)());
7496                 NonterminalType!(5) r;
7497                 Location rl;
7498                 gotoParent = parse120(r, rl, parseStart2, stack2, stack1, next);
7499                 if (gotoParent < 0)
7500                     return gotoParent;
7501                 assert(gotoParent > 0);
7502                 result = r;
7503                 resultLocation = rl;
7504                 return gotoParent - 1;
7505             }
7506             else
7507                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
7508         }
7509 
7510         result = currentResult.get!(5/*MacroParameters*/);
7511         resultLocation = currentResultLocation;
7512         return gotoParent - 1;
7513     }
7514     // path: EBNF DeclarationType Identifier "(" MacroParameters "," MacroParameter
7515     // type: unknown
7516     //  MacroParameters ->  MacroParameters "," MacroParameter. {")", ","}
7517     private int parse120(ref NonterminalType!(5) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, NonterminalType!5/*MacroParameters*/) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!6/*MacroParameter*/) stack1)
7518     {
7519         alias ThisParseResult = typeof(result);
7520         Location currentStart = lexer.front.currentLocation;
7521         {
7522             auto tmp = reduce23_MacroParameters/*MacroParameters @array = MacroParameters "," MacroParameter*/(parseStart3, stack3, stack2, stack1);
7523             result = tmp.val;
7524             resultLocation = tmp.start;
7525             return 2;
7526         }
7527     }
7528     // path: EBNF DeclarationType Identifier "(" MacroParameter
7529     // type: unknown
7530     //  MacroParameters ->  MacroParameter. {")", ","}
7531     private int parse121(ref NonterminalType!(5) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!6/*MacroParameter*/) stack1)
7532     {
7533         alias ThisParseResult = typeof(result);
7534         Location currentStart = lexer.front.currentLocation;
7535         {
7536             auto tmp = reduce22_MacroParameters/*MacroParameters @array = MacroParameter*/(parseStart1, stack1);
7537             result = tmp.val;
7538             resultLocation = tmp.start;
7539             return 0;
7540         }
7541     }
7542     // path: EBNF DeclarationType Identifier "(" MacroParameters?
7543     // type: unknown
7544     //  MacroParametersPart ->  "(" MacroParameters?.")" {";", "=", "@"}
7545     private int parse122(ref NonterminalType!(4) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!42/*MacroParameters?*/) stack1)
7546     {
7547         alias ThisParseResult = typeof(result);
7548         alias ParseResultIn = CreatorInstance.NonterminalUnion!([4]);
7549         ParseResultIn currentResult;
7550         Location currentResultLocation;
7551         int gotoParent = -1;
7552         Location currentStart = lexer.front.currentLocation;
7553         if (lexer.empty)
7554         {
7555             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7556             return -1;
7557         }
7558         else if (lexer.front.symbol == Lexer.tokenID!q{")"})
7559         {
7560             auto next = popToken();
7561             NonterminalType!(4) r;
7562             Location rl;
7563             gotoParent = parse118(r, rl, parseStart2, stack2, stack1, next);
7564             if (gotoParent < 0)
7565                 return gotoParent;
7566             assert(gotoParent > 0);
7567             result = r;
7568             resultLocation = rl;
7569             return gotoParent - 1;
7570         }
7571         else
7572         {
7573             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7574                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7575             return -1;
7576         }
7577     }
7578     // path: EBNF "fragment"
7579     // type: unknown
7580     //  DeclarationType ->  "fragment". {Identifier}
7581     private int parse124(ref NonterminalType!(3) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7582     {
7583         alias ThisParseResult = typeof(result);
7584         Location currentStart = lexer.front.currentLocation;
7585         {
7586             auto tmp = reduce17_DeclarationType/*DeclarationType = "fragment"*/(parseStart1, stack1);
7587             result = tmp.val;
7588             resultLocation = tmp.start;
7589             return 0;
7590         }
7591     }
7592     // path: EBNF "token"
7593     // type: unknown
7594     //  DeclarationType ->  "token". {Identifier}
7595     private int parse126(ref NonterminalType!(3) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7596     {
7597         alias ThisParseResult = typeof(result);
7598         Location currentStart = lexer.front.currentLocation;
7599         {
7600             auto tmp = reduce18_DeclarationType/*DeclarationType = "token"*/(parseStart1, stack1);
7601             result = tmp.val;
7602             resultLocation = tmp.start;
7603             return 0;
7604         }
7605     }
7606     // path: EBNF "option"
7607     // type: unknown
7608     //  OptionDeclaration ->  "option".Identifier "=" IntegerLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7609     private int parse128(ref NonterminalType!(7) result, ref Location resultLocation, Location parseStart1/+, ParseStackElem!(Location, Token) stack1+/)
7610     {
7611         alias ThisParseResult = typeof(result);
7612         alias ParseResultIn = CreatorInstance.NonterminalUnion!([7]);
7613         ParseResultIn currentResult;
7614         Location currentResultLocation;
7615         int gotoParent = -1;
7616         Location currentStart = lexer.front.currentLocation;
7617         if (lexer.empty)
7618         {
7619             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7620             return -1;
7621         }
7622         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7623         {
7624             auto next = popToken();
7625             NonterminalType!(7) r;
7626             Location rl;
7627             gotoParent = parse129(r, rl, parseStart1/*, stack1*/, next);
7628             if (gotoParent < 0)
7629                 return gotoParent;
7630             assert(gotoParent > 0);
7631             result = r;
7632             resultLocation = rl;
7633             return gotoParent - 1;
7634         }
7635         else
7636         {
7637             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7638                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7639             return -1;
7640         }
7641     }
7642     // path: EBNF "option" Identifier
7643     // type: unknown
7644     //  OptionDeclaration ->  "option" Identifier."=" IntegerLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7645     private int parse129(ref NonterminalType!(7) result, ref Location resultLocation, Location parseStart2/+, ParseStackElem!(Location, Token) stack2+/, ParseStackElem!(Location, Token) stack1)
7646     {
7647         alias ThisParseResult = typeof(result);
7648         alias ParseResultIn = CreatorInstance.NonterminalUnion!([7]);
7649         ParseResultIn currentResult;
7650         Location currentResultLocation;
7651         int gotoParent = -1;
7652         Location currentStart = lexer.front.currentLocation;
7653         if (lexer.empty)
7654         {
7655             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7656             return -1;
7657         }
7658         else if (lexer.front.symbol == Lexer.tokenID!q{"="})
7659         {
7660             auto next = popToken();
7661             NonterminalType!(7) r;
7662             Location rl;
7663             gotoParent = parse130(r, rl, parseStart2/*, stack2*/, stack1/*, next*/);
7664             if (gotoParent < 0)
7665                 return gotoParent;
7666             assert(gotoParent > 0);
7667             result = r;
7668             resultLocation = rl;
7669             return gotoParent - 1;
7670         }
7671         else
7672         {
7673             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7674                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7675             return -1;
7676         }
7677     }
7678     // path: EBNF "option" Identifier "="
7679     // type: unknown
7680     //  OptionDeclaration ->  "option" Identifier "=".IntegerLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7681     private int parse130(ref NonterminalType!(7) result, ref Location resultLocation, Location parseStart3/+, ParseStackElem!(Location, Token) stack3+/, ParseStackElem!(Location, Token) stack2/+, ParseStackElem!(Location, Token) stack1+/)
7682     {
7683         alias ThisParseResult = typeof(result);
7684         alias ParseResultIn = CreatorInstance.NonterminalUnion!([7]);
7685         ParseResultIn currentResult;
7686         Location currentResultLocation;
7687         int gotoParent = -1;
7688         Location currentStart = lexer.front.currentLocation;
7689         if (lexer.empty)
7690         {
7691             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7692             return -1;
7693         }
7694         else if (lexer.front.symbol == Lexer.tokenID!"IntegerLiteral")
7695         {
7696             auto next = popToken();
7697             NonterminalType!(7) r;
7698             Location rl;
7699             gotoParent = parse131(r, rl, parseStart3/*, stack3*/, stack2/*, stack1*/, next);
7700             if (gotoParent < 0)
7701                 return gotoParent;
7702             assert(gotoParent > 0);
7703             result = r;
7704             resultLocation = rl;
7705             return gotoParent - 1;
7706         }
7707         else
7708         {
7709             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7710                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7711             return -1;
7712         }
7713     }
7714     // path: EBNF "option" Identifier "=" IntegerLiteral
7715     // type: unknown
7716     //  OptionDeclaration ->  "option" Identifier "=" IntegerLiteral.";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7717     private int parse131(ref NonterminalType!(7) result, ref Location resultLocation, Location parseStart4/+, ParseStackElem!(Location, Token) stack4+/, ParseStackElem!(Location, Token) stack3/+, ParseStackElem!(Location, Token) stack2+/, ParseStackElem!(Location, Token) stack1)
7718     {
7719         alias ThisParseResult = typeof(result);
7720         alias ParseResultIn = CreatorInstance.NonterminalUnion!([7]);
7721         ParseResultIn currentResult;
7722         Location currentResultLocation;
7723         int gotoParent = -1;
7724         Location currentStart = lexer.front.currentLocation;
7725         if (lexer.empty)
7726         {
7727             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7728             return -1;
7729         }
7730         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
7731         {
7732             auto next = popToken();
7733             NonterminalType!(7) r;
7734             Location rl;
7735             gotoParent = parse132(r, rl, parseStart4/*, stack4*/, stack3/*, stack2*/, stack1/*, next*/);
7736             if (gotoParent < 0)
7737                 return gotoParent;
7738             assert(gotoParent > 0);
7739             result = r;
7740             resultLocation = rl;
7741             return gotoParent - 1;
7742         }
7743         else
7744         {
7745             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7746                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7747             return -1;
7748         }
7749     }
7750     // path: EBNF "option" Identifier "=" IntegerLiteral ";"
7751     // type: unknown
7752     //  OptionDeclaration ->  "option" Identifier "=" IntegerLiteral ";". {$end, Identifier, "fragment", "token", "option", "import", "match"}
7753     private int parse132(ref NonterminalType!(7) result, ref Location resultLocation, Location parseStart5/+, ParseStackElem!(Location, Token) stack5+/, ParseStackElem!(Location, Token) stack4/+, ParseStackElem!(Location, Token) stack3+/, ParseStackElem!(Location, Token) stack2/+, ParseStackElem!(Location, Token) stack1+/)
7754     {
7755         alias ThisParseResult = typeof(result);
7756         Location currentStart = lexer.front.currentLocation;
7757         {
7758             auto tmp = reduce26_OptionDeclaration/*OptionDeclaration = ^"option" Identifier ^"=" IntegerLiteral ^";"*/(parseStart5, /*dropped, */stack4, /*dropped, */stack2, /*dropped*/);
7759             result = tmp.val;
7760             resultLocation = tmp.start;
7761             return 4;
7762         }
7763     }
7764     // path: EBNF "import"
7765     // type: unknown
7766     //  Import ->  "import".StringLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7767     private int parse133(ref NonterminalType!(8) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7768     {
7769         alias ThisParseResult = typeof(result);
7770         alias ParseResultIn = CreatorInstance.NonterminalUnion!([8]);
7771         ParseResultIn currentResult;
7772         Location currentResultLocation;
7773         int gotoParent = -1;
7774         Location currentStart = lexer.front.currentLocation;
7775         if (lexer.empty)
7776         {
7777             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7778             return -1;
7779         }
7780         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
7781         {
7782             auto next = popToken();
7783             NonterminalType!(8) r;
7784             Location rl;
7785             gotoParent = parse134(r, rl, parseStart1, stack1, next);
7786             if (gotoParent < 0)
7787                 return gotoParent;
7788             assert(gotoParent > 0);
7789             result = r;
7790             resultLocation = rl;
7791             return gotoParent - 1;
7792         }
7793         else
7794         {
7795             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7796                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7797             return -1;
7798         }
7799     }
7800     // path: EBNF "import" StringLiteral
7801     // type: unknown
7802     //  Import ->  "import" StringLiteral.";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7803     private int parse134(ref NonterminalType!(8) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
7804     {
7805         alias ThisParseResult = typeof(result);
7806         alias ParseResultIn = CreatorInstance.NonterminalUnion!([8]);
7807         ParseResultIn currentResult;
7808         Location currentResultLocation;
7809         int gotoParent = -1;
7810         Location currentStart = lexer.front.currentLocation;
7811         if (lexer.empty)
7812         {
7813             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7814             return -1;
7815         }
7816         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
7817         {
7818             auto next = popToken();
7819             NonterminalType!(8) r;
7820             Location rl;
7821             gotoParent = parse135(r, rl, parseStart2, stack2, stack1, next);
7822             if (gotoParent < 0)
7823                 return gotoParent;
7824             assert(gotoParent > 0);
7825             result = r;
7826             resultLocation = rl;
7827             return gotoParent - 1;
7828         }
7829         else
7830         {
7831             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7832                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7833             return -1;
7834         }
7835     }
7836     // path: EBNF "import" StringLiteral ";"
7837     // type: unknown
7838     //  Import ->  "import" StringLiteral ";". {$end, Identifier, "fragment", "token", "option", "import", "match"}
7839     private int parse135(ref NonterminalType!(8) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, Token) stack1)
7840     {
7841         alias ThisParseResult = typeof(result);
7842         Location currentStart = lexer.front.currentLocation;
7843         {
7844             auto tmp = reduce27_Import/*Import = "import" StringLiteral ";"*/(parseStart3, stack3, stack2, stack1);
7845             result = tmp.val;
7846             resultLocation = tmp.start;
7847             return 2;
7848         }
7849     }
7850     // path: EBNF "match"
7851     // type: unknown
7852     //  MatchDeclaration ->  "match".Symbol Symbol ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7853     //  Symbol           ->         .Name {Identifier, StringLiteral, CharacterSetLiteral}
7854     //  Symbol           ->         .Token {Identifier, StringLiteral, CharacterSetLiteral}
7855     //  Symbol           ->         .MacroInstance {Identifier, StringLiteral, CharacterSetLiteral}
7856     //  Name             ->         .Identifier {Identifier, StringLiteral, CharacterSetLiteral}
7857     //  Token            ->         .StringLiteral {Identifier, StringLiteral, CharacterSetLiteral}
7858     //  Token            ->         .CharacterSetLiteral {Identifier, StringLiteral, CharacterSetLiteral}
7859     //  MacroInstance    ->         .Identifier "(" ExpressionList? ")" {Identifier, StringLiteral, CharacterSetLiteral}
7860     private int parse136(ref NonterminalType!(9) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, Token) stack1)
7861     {
7862         alias ThisParseResult = typeof(result);
7863         alias ParseResultIn = CreatorInstance.NonterminalUnion!([9, 28, 29, 30, 33]);
7864         ParseResultIn currentResult;
7865         Location currentResultLocation;
7866         int gotoParent = -1;
7867         Location currentStart = lexer.front.currentLocation;
7868         if (lexer.empty)
7869         {
7870             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7871             return -1;
7872         }
7873         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7874         {
7875             auto next = popToken();
7876             CreatorInstance.NonterminalUnion!([29, 33]) r;
7877             Location rl;
7878             gotoParent = parse54(r, rl, currentStart, next);
7879             if (gotoParent < 0)
7880                 return gotoParent;
7881             currentResult = r;
7882             currentResultLocation = rl;
7883         }
7884         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
7885         {
7886             auto next = popToken();
7887             NonterminalType!(30) r;
7888             Location rl;
7889             gotoParent = parse75(r, rl, currentStart, next);
7890             if (gotoParent < 0)
7891                 return gotoParent;
7892             currentResult = ParseResultIn.create(30/*Token*/, r);
7893             currentResultLocation = rl;
7894         }
7895         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
7896         {
7897             auto next = popToken();
7898             NonterminalType!(30) r;
7899             Location rl;
7900             gotoParent = parse76(r, rl, currentStart, next);
7901             if (gotoParent < 0)
7902                 return gotoParent;
7903             currentResult = ParseResultIn.create(30/*Token*/, r);
7904             currentResultLocation = rl;
7905         }
7906         else
7907         {
7908             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
7909                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
7910             return -1;
7911         }
7912 
7913         while (gotoParent == 0)
7914         {
7915             if (currentResult.nonterminalID == 28/*Symbol*/)
7916             {
7917                 auto next = ParseStackElem!(Location, NonterminalType!28/*Symbol*/)(currentResultLocation, currentResult.get!(28/*Symbol*/)());
7918                 NonterminalType!(9) r;
7919                 Location rl;
7920                 gotoParent = parse137(r, rl, parseStart1, stack1, next);
7921                 if (gotoParent < 0)
7922                     return gotoParent;
7923                 assert(gotoParent > 0);
7924                 result = r;
7925                 resultLocation = rl;
7926                 return gotoParent - 1;
7927             }
7928             else if (currentResult.nonterminalID == 29/*Name*/)
7929             {
7930                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(29/*Name*/));
7931                 currentResultLocation = currentResultLocation;
7932             }
7933             else if (currentResult.nonterminalID == 30/*Token*/)
7934             {
7935                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(30/*Token*/));
7936                 currentResultLocation = currentResultLocation;
7937             }
7938             else if (currentResult.nonterminalID == 33/*MacroInstance*/)
7939             {
7940                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(33/*MacroInstance*/));
7941                 currentResultLocation = currentResultLocation;
7942             }
7943             else
7944                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
7945         }
7946 
7947         result = currentResult.get!(9/*MatchDeclaration*/);
7948         resultLocation = currentResultLocation;
7949         return gotoParent - 1;
7950     }
7951     // path: EBNF "match" Symbol
7952     // type: unknown
7953     //  MatchDeclaration ->  "match" Symbol.Symbol ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
7954     //  Symbol           ->                .Name {";"}
7955     //  Symbol           ->                .Token {";"}
7956     //  Symbol           ->                .MacroInstance {";"}
7957     //  Name             ->                .Identifier {";"}
7958     //  Token            ->                .StringLiteral {";"}
7959     //  Token            ->                .CharacterSetLiteral {";"}
7960     //  MacroInstance    ->                .Identifier "(" ExpressionList? ")" {";"}
7961     private int parse137(ref NonterminalType!(9) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, Token) stack2, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack1)
7962     {
7963         alias ThisParseResult = typeof(result);
7964         alias ParseResultIn = CreatorInstance.NonterminalUnion!([9, 28, 29, 30, 33]);
7965         ParseResultIn currentResult;
7966         Location currentResultLocation;
7967         int gotoParent = -1;
7968         Location currentStart = lexer.front.currentLocation;
7969         if (lexer.empty)
7970         {
7971             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
7972             return -1;
7973         }
7974         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
7975         {
7976             auto next = popToken();
7977             CreatorInstance.NonterminalUnion!([29, 33]) r;
7978             Location rl;
7979             gotoParent = parse54(r, rl, currentStart, next);
7980             if (gotoParent < 0)
7981                 return gotoParent;
7982             currentResult = r;
7983             currentResultLocation = rl;
7984         }
7985         else if (lexer.front.symbol == Lexer.tokenID!"StringLiteral")
7986         {
7987             auto next = popToken();
7988             NonterminalType!(30) r;
7989             Location rl;
7990             gotoParent = parse75(r, rl, currentStart, next);
7991             if (gotoParent < 0)
7992                 return gotoParent;
7993             currentResult = ParseResultIn.create(30/*Token*/, r);
7994             currentResultLocation = rl;
7995         }
7996         else if (lexer.front.symbol == Lexer.tokenID!"CharacterSetLiteral")
7997         {
7998             auto next = popToken();
7999             NonterminalType!(30) r;
8000             Location rl;
8001             gotoParent = parse76(r, rl, currentStart, next);
8002             if (gotoParent < 0)
8003                 return gotoParent;
8004             currentResult = ParseResultIn.create(30/*Token*/, r);
8005             currentResultLocation = rl;
8006         }
8007         else
8008         {
8009             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
8010                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
8011             return -1;
8012         }
8013 
8014         while (gotoParent == 0)
8015         {
8016             if (currentResult.nonterminalID == 28/*Symbol*/)
8017             {
8018                 auto next = ParseStackElem!(Location, NonterminalType!28/*Symbol*/)(currentResultLocation, currentResult.get!(28/*Symbol*/)());
8019                 NonterminalType!(9) r;
8020                 Location rl;
8021                 gotoParent = parse138(r, rl, parseStart2, stack2, stack1, next);
8022                 if (gotoParent < 0)
8023                     return gotoParent;
8024                 assert(gotoParent > 0);
8025                 result = r;
8026                 resultLocation = rl;
8027                 return gotoParent - 1;
8028             }
8029             else if (currentResult.nonterminalID == 29/*Name*/)
8030             {
8031                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(29/*Name*/));
8032                 currentResultLocation = currentResultLocation;
8033             }
8034             else if (currentResult.nonterminalID == 30/*Token*/)
8035             {
8036                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(30/*Token*/));
8037                 currentResultLocation = currentResultLocation;
8038             }
8039             else if (currentResult.nonterminalID == 33/*MacroInstance*/)
8040             {
8041                 currentResult = ParseResultIn.create(28/*Symbol*/, currentResult.get!(33/*MacroInstance*/));
8042                 currentResultLocation = currentResultLocation;
8043             }
8044             else
8045                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
8046         }
8047 
8048         result = currentResult.get!(9/*MatchDeclaration*/);
8049         resultLocation = currentResultLocation;
8050         return gotoParent - 1;
8051     }
8052     // path: EBNF "match" Symbol Symbol
8053     // type: unknown
8054     //  MatchDeclaration ->  "match" Symbol Symbol.";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8055     private int parse138(ref NonterminalType!(9) result, ref Location resultLocation, Location parseStart3, ParseStackElem!(Location, Token) stack3, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack2, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack1)
8056     {
8057         alias ThisParseResult = typeof(result);
8058         alias ParseResultIn = CreatorInstance.NonterminalUnion!([9]);
8059         ParseResultIn currentResult;
8060         Location currentResultLocation;
8061         int gotoParent = -1;
8062         Location currentStart = lexer.front.currentLocation;
8063         if (lexer.empty)
8064         {
8065             lastError = new SingleParseException!Location("EOF", lexer.front.currentLocation, lexer.front.currentTokenEnd);
8066             return -1;
8067         }
8068         else if (lexer.front.symbol == Lexer.tokenID!q{";"})
8069         {
8070             auto next = popToken();
8071             NonterminalType!(9) r;
8072             Location rl;
8073             gotoParent = parse139(r, rl, parseStart3, stack3, stack2, stack1, next);
8074             if (gotoParent < 0)
8075                 return gotoParent;
8076             assert(gotoParent > 0);
8077             result = r;
8078             resultLocation = rl;
8079             return gotoParent - 1;
8080         }
8081         else
8082         {
8083             lastError = new SingleParseException!Location(text("unexpected Token \"", lexer.front.content, "\"  \"", lexer.tokenName(lexer.front.symbol), "\""),
8084                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
8085             return -1;
8086         }
8087     }
8088     // path: EBNF "match" Symbol Symbol ";"
8089     // type: unknown
8090     //  MatchDeclaration ->  "match" Symbol Symbol ";". {$end, Identifier, "fragment", "token", "option", "import", "match"}
8091     private int parse139(ref NonterminalType!(9) result, ref Location resultLocation, Location parseStart4, ParseStackElem!(Location, Token) stack4, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack3, ParseStackElem!(Location, NonterminalType!28/*Symbol*/) stack2, ParseStackElem!(Location, Token) stack1)
8092     {
8093         alias ThisParseResult = typeof(result);
8094         Location currentStart = lexer.front.currentLocation;
8095         {
8096             auto tmp = reduce28_MatchDeclaration/*MatchDeclaration = "match" Symbol Symbol ";"*/(parseStart4, stack4, stack3, stack2, stack1);
8097             result = tmp.val;
8098             resultLocation = tmp.start;
8099             return 3;
8100         }
8101     }
8102     // path: EBNF Declaration+
8103     // type: unknown
8104     //  EBNF              ->  Declaration+. {$end}
8105     //  Declaration+      ->  Declaration+.Declaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
8106     //  Declaration       ->              .SymbolDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
8107     //  Declaration       ->              .OptionDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
8108     //  Declaration       ->              .Import {$end, Identifier, "fragment", "token", "option", "import", "match"}
8109     //  Declaration       ->              .MatchDeclaration {$end, Identifier, "fragment", "token", "option", "import", "match"}
8110     //  SymbolDeclaration ->              .DeclarationType? Identifier MacroParametersPart? Annotation* ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8111     //  SymbolDeclaration ->              .DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8112     //  DeclarationType   ->              ."fragment" {Identifier}
8113     //  DeclarationType   ->              ."token" {Identifier}
8114     //  OptionDeclaration ->              ."option" Identifier "=" IntegerLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8115     //  Import            ->              ."import" StringLiteral ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8116     //  MatchDeclaration  ->              ."match" Symbol Symbol ";" {$end, Identifier, "fragment", "token", "option", "import", "match"}
8117     //  DeclarationType?  ->              . {Identifier}
8118     //  DeclarationType? ---> DeclarationType
8119     private int parse140(ref CreatorInstance.NonterminalUnion!([0, 37]) result, ref Location resultLocation, Location parseStart1, ParseStackElem!(Location, NonterminalType!37/*Declaration+*/) stack1)
8120     {
8121         alias ThisParseResult = typeof(result);
8122         alias ParseResultIn = CreatorInstance.NonterminalUnion!([0, 1, 2, 3, 7, 8, 9, 37, 38]);
8123         ParseResultIn currentResult;
8124         Location currentResultLocation;
8125         int gotoParent = -1;
8126         Location currentStart = lexer.front.currentLocation;
8127         if (lexer.empty)
8128         {
8129             auto tmp = reduce2_EBNF/*EBNF = Declaration+*/(parseStart1, stack1);
8130             result = ThisParseResult.create(0/*EBNF*/, tmp.val);
8131             resultLocation = tmp.start;
8132             return 0;
8133         }
8134         else if (lexer.front.symbol == Lexer.tokenID!"Identifier")
8135         {
8136             auto tmp = reduce8/*DeclarationType? = [virtual]*/();
8137             currentResult = ParseResultIn.create(38/*DeclarationType?*/, tmp.val);
8138             currentResultLocation = tmp.start;
8139             gotoParent = 0;
8140         }
8141         else if (lexer.front.symbol == Lexer.tokenID!q{"fragment"})
8142         {
8143             auto next = popToken();
8144             NonterminalType!(3) r;
8145             Location rl;
8146             gotoParent = parse124(r, rl, currentStart, next);
8147             if (gotoParent < 0)
8148                 return gotoParent;
8149             currentResult = ParseResultIn.create(3/*DeclarationType*/, r);
8150             currentResultLocation = rl;
8151         }
8152         else if (lexer.front.symbol == Lexer.tokenID!q{"token"})
8153         {
8154             auto next = popToken();
8155             NonterminalType!(3) r;
8156             Location rl;
8157             gotoParent = parse126(r, rl, currentStart, next);
8158             if (gotoParent < 0)
8159                 return gotoParent;
8160             currentResult = ParseResultIn.create(3/*DeclarationType*/, r);
8161             currentResultLocation = rl;
8162         }
8163         else if (lexer.front.symbol == Lexer.tokenID!q{"option"})
8164         {
8165             auto next = popToken();
8166             NonterminalType!(7) r;
8167             Location rl;
8168             gotoParent = parse128(r, rl, currentStart/*, next*/);
8169             if (gotoParent < 0)
8170                 return gotoParent;
8171             currentResult = ParseResultIn.create(7/*OptionDeclaration*/, r);
8172             currentResultLocation = rl;
8173         }
8174         else if (lexer.front.symbol == Lexer.tokenID!q{"import"})
8175         {
8176             auto next = popToken();
8177             NonterminalType!(8) r;
8178             Location rl;
8179             gotoParent = parse133(r, rl, currentStart, next);
8180             if (gotoParent < 0)
8181                 return gotoParent;
8182             currentResult = ParseResultIn.create(8/*Import*/, r);
8183             currentResultLocation = rl;
8184         }
8185         else if (lexer.front.symbol == Lexer.tokenID!q{"match"})
8186         {
8187             auto next = popToken();
8188             NonterminalType!(9) r;
8189             Location rl;
8190             gotoParent = parse136(r, rl, currentStart, next);
8191             if (gotoParent < 0)
8192                 return gotoParent;
8193             currentResult = ParseResultIn.create(9/*MatchDeclaration*/, r);
8194             currentResultLocation = rl;
8195         }
8196         else
8197         {
8198             auto tmp = reduce2_EBNF/*EBNF = Declaration+*/(parseStart1, stack1);
8199             result = ThisParseResult.create(0/*EBNF*/, tmp.val);
8200             resultLocation = tmp.start;
8201             return 0;
8202         }
8203 
8204         while (gotoParent == 0)
8205         {
8206             if (currentResult.nonterminalID == 1/*Declaration*/)
8207             {
8208                 auto next = ParseStackElem!(Location, NonterminalType!1/*Declaration*/)(currentResultLocation, currentResult.get!(1/*Declaration*/)());
8209                 NonterminalType!(37) r;
8210                 Location rl;
8211                 gotoParent = parse141(r, rl, parseStart1, stack1, next);
8212                 if (gotoParent < 0)
8213                     return gotoParent;
8214                 assert(gotoParent > 0);
8215                 result = ThisParseResult.create(37/*Declaration+*/, r);
8216                 resultLocation = rl;
8217                 return gotoParent - 1;
8218             }
8219             else if (currentResult.nonterminalID == 2/*SymbolDeclaration*/)
8220             {
8221                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(2/*SymbolDeclaration*/));
8222                 currentResultLocation = currentResultLocation;
8223             }
8224             else if (currentResult.nonterminalID == 3/*DeclarationType*/)
8225             {
8226                 auto next = ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/)(currentResultLocation, currentResult.get!(3/*DeclarationType*/)());
8227                 NonterminalType!(2) r;
8228                 Location rl;
8229                 gotoParent = parse4(r, rl, currentStart, next);
8230                 if (gotoParent < 0)
8231                     return gotoParent;
8232                 currentResult = ParseResultIn.create(2/*SymbolDeclaration*/, r);
8233                 currentResultLocation = rl;
8234             }
8235             else if (currentResult.nonterminalID == 7/*OptionDeclaration*/)
8236             {
8237                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(7/*OptionDeclaration*/));
8238                 currentResultLocation = currentResultLocation;
8239             }
8240             else if (currentResult.nonterminalID == 8/*Import*/)
8241             {
8242                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(8/*Import*/));
8243                 currentResultLocation = currentResultLocation;
8244             }
8245             else if (currentResult.nonterminalID == 9/*MatchDeclaration*/)
8246             {
8247                 currentResult = ParseResultIn.create(1/*Declaration*/, currentResult.get!(9/*MatchDeclaration*/));
8248                 currentResultLocation = currentResultLocation;
8249             }
8250             else if (currentResult.nonterminalID == 38/*DeclarationType?*/)
8251             {
8252                 auto next = ParseStackElem!(Location, NonterminalType!38/*DeclarationType?*/)(currentResultLocation, currentResult.get!(38/*DeclarationType?*/)());
8253                 NonterminalType!(2) r;
8254                 Location rl;
8255                 gotoParent = parse4(r, rl, currentStart, next);
8256                 if (gotoParent < 0)
8257                     return gotoParent;
8258                 currentResult = ParseResultIn.create(2/*SymbolDeclaration*/, r);
8259                 currentResultLocation = rl;
8260             }
8261             else
8262                 assert(0, text("no jump ", currentResult.nonterminalID, " ", allNonterminals[currentResult.nonterminalID].name));
8263         }
8264 
8265         result = currentResult;
8266         resultLocation = currentResultLocation;
8267         return gotoParent - 1;
8268     }
8269     // path: EBNF Declaration+ Declaration
8270     // type: unknown
8271     //  Declaration+ ->  Declaration+ Declaration. {$end, Identifier, "fragment", "token", "option", "import", "match"}
8272     private int parse141(ref NonterminalType!(37) result, ref Location resultLocation, Location parseStart2, ParseStackElem!(Location, NonterminalType!37/*Declaration+*/) stack2, ParseStackElem!(Location, NonterminalType!1/*Declaration*/) stack1)
8273     {
8274         alias ThisParseResult = typeof(result);
8275         Location currentStart = lexer.front.currentLocation;
8276         {
8277             auto tmp = reduce1/*Declaration+ @array = Declaration+ Declaration [virtual]*/(parseStart2, stack2, stack1);
8278             result = tmp.val;
8279             resultLocation = tmp.start;
8280             return 1;
8281         }
8282     }
8283 }
8284 
8285 immutable allTokens = [
8286     /* 0: */ immutable(Token)("$end", []),
8287     /* 1: */ immutable(Token)("Identifier", ["lowPrio"]),
8288     /* 2: */ immutable(Token)("StringLiteral", []),
8289     /* 3: */ immutable(Token)("CharacterSetLiteral", []),
8290     /* 4: */ immutable(Token)("IntegerLiteral", []),
8291     /* 5: */ immutable(Token)(q{";"}, []),
8292     /* 6: */ immutable(Token)(q{"="}, []),
8293     /* 7: */ immutable(Token)(q{"fragment"}, []),
8294     /* 8: */ immutable(Token)(q{"token"}, []),
8295     /* 9: */ immutable(Token)(q{"("}, []),
8296     /* 10: */ immutable(Token)(q{")"}, []),
8297     /* 11: */ immutable(Token)(q{","}, []),
8298     /* 12: */ immutable(Token)(q{"..."}, []),
8299     /* 13: */ immutable(Token)(q{"option"}, []),
8300     /* 14: */ immutable(Token)(q{"import"}, []),
8301     /* 15: */ immutable(Token)(q{"match"}, []),
8302     /* 16: */ immutable(Token)(q{"@"}, []),
8303     /* 17: */ immutable(Token)(q{":"}, []),
8304     /* 18: */ immutable(Token)(q{"{"}, []),
8305     /* 19: */ immutable(Token)(q{"}"}, []),
8306     /* 20: */ immutable(Token)(q{"?"}, []),
8307     /* 21: */ immutable(Token)(q{"!"}, []),
8308     /* 22: */ immutable(Token)(q{"<"}, []),
8309     /* 23: */ immutable(Token)(q{">"}, []),
8310     /* 24: */ immutable(Token)(q{"*"}, []),
8311     /* 25: */ immutable(Token)(q{">>"}, []),
8312     /* 26: */ immutable(Token)(q{"<<"}, []),
8313     /* 27: */ immutable(Token)(q{"-"}, []),
8314     /* 28: */ immutable(Token)(q{"anytoken"}, []),
8315     /* 29: */ immutable(Token)(q{"|"}, []),
8316     /* 30: */ immutable(Token)(q{"^"}, []),
8317     /* 31: */ immutable(Token)(q{"+"}, []),
8318     /* 32: */ immutable(Token)(q{"t("}, []),
8319 ];
8320 
8321 immutable allNonterminals = [
8322     /* 0: */ immutable(Nonterminal)("EBNF", NonterminalFlags.nonterminal, [], [0]),
8323     /* 1: */ immutable(Nonterminal)("Declaration", NonterminalFlags.nonterminal, [], [2, 7, 8, 9]),
8324     /* 2: */ immutable(Nonterminal)("SymbolDeclaration", NonterminalFlags.nonterminal, [], [2]),
8325     /* 3: */ immutable(Nonterminal)("DeclarationType", NonterminalFlags.nonterminal, [], [3]),
8326     /* 4: */ immutable(Nonterminal)("MacroParametersPart", NonterminalFlags.nonterminal, [], [4]),
8327     /* 5: */ immutable(Nonterminal)("MacroParameters", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal | NonterminalFlags.arrayOfString, ["array"], [6]),
8328     /* 6: */ immutable(Nonterminal)("MacroParameter", NonterminalFlags.nonterminal, [], [6]),
8329     /* 7: */ immutable(Nonterminal)("OptionDeclaration", NonterminalFlags.nonterminal, [], [7]),
8330     /* 8: */ immutable(Nonterminal)("Import", NonterminalFlags.nonterminal, [], [8]),
8331     /* 9: */ immutable(Nonterminal)("MatchDeclaration", NonterminalFlags.nonterminal, [], [9]),
8332     /* 10: */ immutable(Nonterminal)("Annotation", NonterminalFlags.nonterminal, [], [10]),
8333     /* 11: */ immutable(Nonterminal)("AnnotationParams", NonterminalFlags.nonterminal, [], [11]),
8334     /* 12: */ immutable(Nonterminal)("AnnotationParamsPart", NonterminalFlags.nonterminal, [], [12]),
8335     /* 13: */ immutable(Nonterminal)("NegativeLookahead", NonterminalFlags.nonterminal, [], [13]),
8336     /* 14: */ immutable(Nonterminal)("Expression", NonterminalFlags.nonterminal, [], [15, 16, 18, 19]),
8337     /* 15: */ immutable(Nonterminal)("Alternation", NonterminalFlags.nonterminal, [], [15, 16, 18, 19]),
8338     /* 16: */ immutable(Nonterminal)("Concatenation", NonterminalFlags.nonterminal, [], [16, 18, 19]),
8339     /* 17: */ immutable(Nonterminal)("ProductionAnnotation", NonterminalFlags.nonterminal, ["directUnwrap"], [10, 13]),
8340     /* 18: */ immutable(Nonterminal)("TokenMinus", NonterminalFlags.nonterminal, [], [18, 19]),
8341     /* 19: */ immutable(Nonterminal)("AnnotatedExpression", NonterminalFlags.nonterminal, [], [19]),
8342     /* 20: */ immutable(Nonterminal)("ExpressionAnnotation", NonterminalFlags.nonterminal, ["directUnwrap"], [10, 13]),
8343     /* 21: */ immutable(Nonterminal)("ExpressionName", NonterminalFlags.nonterminal, [], [21]),
8344     /* 22: */ immutable(Nonterminal)("ExpressionPrefix", NonterminalFlags.nonterminal, [], [22]),
8345     /* 23: */ immutable(Nonterminal)("PostfixExpression", NonterminalFlags.nonterminal, [], [24, 25, 26, 29, 30, 31, 32, 33, 34, 36]),
8346     /* 24: */ immutable(Nonterminal)("Optional", NonterminalFlags.nonterminal, [], [24]),
8347     /* 25: */ immutable(Nonterminal)("Repetition", NonterminalFlags.nonterminal, [], [25]),
8348     /* 26: */ immutable(Nonterminal)("RepetitionPlus", NonterminalFlags.nonterminal, [], [26]),
8349     /* 27: */ immutable(Nonterminal)("AtomExpression", NonterminalFlags.nonterminal, [], [29, 30, 31, 32, 33, 34, 36]),
8350     /* 28: */ immutable(Nonterminal)("Symbol", NonterminalFlags.nonterminal, [], [29, 30, 33]),
8351     /* 29: */ immutable(Nonterminal)("Name", NonterminalFlags.nonterminal, [], [29]),
8352     /* 30: */ immutable(Nonterminal)("Token", NonterminalFlags.nonterminal, [], [30]),
8353     /* 31: */ immutable(Nonterminal)("UnpackVariadicList", NonterminalFlags.nonterminal, [], [31]),
8354     /* 32: */ immutable(Nonterminal)("SubToken", NonterminalFlags.nonterminal, [], [32]),
8355     /* 33: */ immutable(Nonterminal)("MacroInstance", NonterminalFlags.nonterminal, [], [33]),
8356     /* 34: */ immutable(Nonterminal)("ParenExpression", NonterminalFlags.nonterminal, [], [34]),
8357     /* 35: */ immutable(Nonterminal)("ExpressionList", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal | NonterminalFlags.arrayOfString, ["array"], [15, 16, 18, 19]),
8358     /* 36: */ immutable(Nonterminal)("Tuple", NonterminalFlags.nonterminal, [], [36]),
8359     /* 37: */ immutable(Nonterminal)("Declaration+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [2, 7, 8, 9]),
8360     /* 38: */ immutable(Nonterminal)("DeclarationType?", NonterminalFlags.empty | NonterminalFlags.nonterminal, [], [3]),
8361     /* 39: */ immutable(Nonterminal)("MacroParametersPart?", NonterminalFlags.empty | NonterminalFlags.nonterminal, [], [4]),
8362     /* 40: */ immutable(Nonterminal)("Annotation+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [10]),
8363     /* 41: */ immutable(Nonterminal)("Annotation*", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [10]),
8364     /* 42: */ immutable(Nonterminal)("MacroParameters?", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal | NonterminalFlags.arrayOfString, [], [6]),
8365     /* 43: */ immutable(Nonterminal)("AnnotationParams?", NonterminalFlags.empty | NonterminalFlags.nonterminal, [], [11]),
8366     /* 44: */ immutable(Nonterminal)("AnnotationParamsPart+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [12]),
8367     /* 45: */ immutable(Nonterminal)("AnnotationParamsPart*", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [12]),
8368     /* 46: */ immutable(Nonterminal)("TokenMinus+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [18, 19]),
8369     /* 47: */ immutable(Nonterminal)("ProductionAnnotation+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [10, 13]),
8370     /* 48: */ immutable(Nonterminal)("@regArray_ProductionAnnotation*", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array", "directUnwrap", "regArray"], [10, 13]),
8371     /* 49: */ immutable(Nonterminal)("@regArray_ProductionAnnotation+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array", "directUnwrap", "regArray"], [10, 13]),
8372     /* 50: */ immutable(Nonterminal)("ExpressionAnnotation+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [10, 13]),
8373     /* 51: */ immutable(Nonterminal)("@regArray_ExpressionAnnotation*", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array", "directUnwrap", "regArray"], [10, 13]),
8374     /* 52: */ immutable(Nonterminal)("ExpressionName?", NonterminalFlags.empty | NonterminalFlags.nonterminal, [], [21]),
8375     /* 53: */ immutable(Nonterminal)("ExpressionPrefix+", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [22]),
8376     /* 54: */ immutable(Nonterminal)("ExpressionPrefix*", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array"], [22]),
8377     /* 55: */ immutable(Nonterminal)("ExpressionList?", NonterminalFlags.empty | NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal | NonterminalFlags.arrayOfString, [], [15, 16, 18, 19]),
8378     /* 56: */ immutable(Nonterminal)("$regarray_0", NonterminalFlags.none, ["array", "directUnwrap"], []),
8379     /* 57: */ immutable(Nonterminal)("$regarray_1", NonterminalFlags.array | NonterminalFlags.arrayOfNonterminal, ["array", "directUnwrap"], [10, 13]),
8380     /* 58: */ immutable(Nonterminal)("$regarrayedge_0_1", NonterminalFlags.nonterminal, ["directUnwrap"], [10, 13]),
8381     /* 59: */ immutable(Nonterminal)("$regarrayedge_1_1", NonterminalFlags.nonterminal, ["directUnwrap"], [10, 13]),
8382 ];
8383 
8384 immutable allProductions = [
8385     // 0: Declaration+ @array = Declaration [virtual]
8386     immutable(Production)(immutable(NonterminalID)(37), [
8387                 immutable(SymbolInstance)(immutable(Symbol)(false, 1), "", "", false, false, [], [])
8388             ], [], [], false, true),
8389     // 1: Declaration+ @array = Declaration+ Declaration [virtual]
8390     immutable(Production)(immutable(NonterminalID)(37), [
8391                 immutable(SymbolInstance)(immutable(Symbol)(false, 37), "", "", false, false, [], []),
8392                 immutable(SymbolInstance)(immutable(Symbol)(false, 1), "", "", false, false, [], [])
8393             ], [], [], false, true),
8394     // 2: EBNF = Declaration+
8395     immutable(Production)(immutable(NonterminalID)(0), [
8396                 immutable(SymbolInstance)(immutable(Symbol)(false, 37), "", "", false, false, [], [])
8397             ], [], [], false, false),
8398     // 3: Declaration = <SymbolDeclaration
8399     immutable(Production)(immutable(NonterminalID)(1), [
8400                 immutable(SymbolInstance)(immutable(Symbol)(false, 2), "", "", true, false, [], [])
8401             ], [], [], false, false),
8402     // 4: Declaration = <MatchDeclaration
8403     immutable(Production)(immutable(NonterminalID)(1), [
8404                 immutable(SymbolInstance)(immutable(Symbol)(false, 9), "", "", true, false, [], [])
8405             ], [], [], false, false),
8406     // 5: Declaration = <Import
8407     immutable(Production)(immutable(NonterminalID)(1), [
8408                 immutable(SymbolInstance)(immutable(Symbol)(false, 8), "", "", true, false, [], [])
8409             ], [], [], false, false),
8410     // 6: Declaration = <OptionDeclaration
8411     immutable(Production)(immutable(NonterminalID)(1), [
8412                 immutable(SymbolInstance)(immutable(Symbol)(false, 7), "", "", true, false, [], [])
8413             ], [], [], false, false),
8414     // 7: DeclarationType? = <DeclarationType [virtual]
8415     immutable(Production)(immutable(NonterminalID)(38), [
8416                 immutable(SymbolInstance)(immutable(Symbol)(false, 3), "", "", true, false, [], [])
8417             ], [], [], false, true),
8418     // 8: DeclarationType? = [virtual]
8419     immutable(Production)(immutable(NonterminalID)(38), [], [], [], false, true),
8420     // 9: MacroParametersPart? = <MacroParametersPart [virtual]
8421     immutable(Production)(immutable(NonterminalID)(39), [
8422                 immutable(SymbolInstance)(immutable(Symbol)(false, 4), "", "", true, false, [], [])
8423             ], [], [], false, true),
8424     // 10: MacroParametersPart? = [virtual]
8425     immutable(Production)(immutable(NonterminalID)(39), [], [], [], false, true),
8426     // 11: Annotation+ @array = Annotation [virtual]
8427     immutable(Production)(immutable(NonterminalID)(40), [
8428                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", false, false, [], [])
8429             ], [], [], false, true),
8430     // 12: Annotation+ @array = Annotation+ Annotation [virtual]
8431     immutable(Production)(immutable(NonterminalID)(40), [
8432                 immutable(SymbolInstance)(immutable(Symbol)(false, 40), "", "", false, false, [], []),
8433                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", false, false, [], [])
8434             ], [], [], false, true),
8435     // 13: Annotation* @array = [virtual]
8436     immutable(Production)(immutable(NonterminalID)(41), [], [], [], false, true),
8437     // 14: Annotation* @array = Annotation+ [virtual]
8438     immutable(Production)(immutable(NonterminalID)(41), [
8439                 immutable(SymbolInstance)(immutable(Symbol)(false, 40), "", "", false, false, [], [])
8440             ], [], [], false, true),
8441     // 15: SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* ";"
8442     immutable(Production)(immutable(NonterminalID)(2), [
8443                 immutable(SymbolInstance)(immutable(Symbol)(false, 38), "", "", false, false, [], []),
8444                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8445                 immutable(SymbolInstance)(immutable(Symbol)(false, 39), "", "", false, false, [], []),
8446                 immutable(SymbolInstance)(immutable(Symbol)(false, 41), "", "", false, false, [], []),
8447                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, false, [], [])
8448             ], [], [], false, false),
8449     // 16: SymbolDeclaration = DeclarationType? Identifier MacroParametersPart? Annotation* "=" Expression ";"
8450     immutable(Production)(immutable(NonterminalID)(2), [
8451                 immutable(SymbolInstance)(immutable(Symbol)(false, 38), "", "", false, false, [], []),
8452                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8453                 immutable(SymbolInstance)(immutable(Symbol)(false, 39), "", "", false, false, [], []),
8454                 immutable(SymbolInstance)(immutable(Symbol)(false, 41), "", "", false, false, [], []),
8455                 immutable(SymbolInstance)(immutable(Symbol)(true, 6), "", "", false, false, [], []),
8456                 immutable(SymbolInstance)(immutable(Symbol)(false, 14), "", "", false, false, [], []),
8457                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, false, [], [])
8458             ], [], [], false, false),
8459     // 17: DeclarationType = "fragment"
8460     immutable(Production)(immutable(NonterminalID)(3), [
8461                 immutable(SymbolInstance)(immutable(Symbol)(true, 7), "", "", false, false, [], [])
8462             ], [], [], false, false),
8463     // 18: DeclarationType = "token"
8464     immutable(Production)(immutable(NonterminalID)(3), [
8465                 immutable(SymbolInstance)(immutable(Symbol)(true, 8), "", "", false, false, [], [])
8466             ], [], [], false, false),
8467     // 19: MacroParameters? = <MacroParameters [virtual]
8468     immutable(Production)(immutable(NonterminalID)(42), [
8469                 immutable(SymbolInstance)(immutable(Symbol)(false, 5), "", "", true, false, [], [])
8470             ], [], [], false, true),
8471     // 20: MacroParameters? = [virtual]
8472     immutable(Production)(immutable(NonterminalID)(42), [], [], [], false, true),
8473     // 21: MacroParametersPart = "(" MacroParameters? ")"
8474     immutable(Production)(immutable(NonterminalID)(4), [
8475                 immutable(SymbolInstance)(immutable(Symbol)(true, 9), "", "", false, false, [], []),
8476                 immutable(SymbolInstance)(immutable(Symbol)(false, 42), "", "", false, false, [], []),
8477                 immutable(SymbolInstance)(immutable(Symbol)(true, 10), "", "", false, false, [], [])
8478             ], [], [], false, false),
8479     // 22: MacroParameters @array = MacroParameter
8480     immutable(Production)(immutable(NonterminalID)(5), [
8481                 immutable(SymbolInstance)(immutable(Symbol)(false, 6), "", "", false, false, [], [])
8482             ], [], [], false, false),
8483     // 23: MacroParameters @array = MacroParameters "," MacroParameter
8484     immutable(Production)(immutable(NonterminalID)(5), [
8485                 immutable(SymbolInstance)(immutable(Symbol)(false, 5), "", "", false, false, [], []),
8486                 immutable(SymbolInstance)(immutable(Symbol)(true, 11), "", "", false, false, [], []),
8487                 immutable(SymbolInstance)(immutable(Symbol)(false, 6), "", "", false, false, [], [])
8488             ], [], [], false, false),
8489     // 24: MacroParameter = Identifier
8490     immutable(Production)(immutable(NonterminalID)(6), [
8491                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], [])
8492             ], [], [], false, false),
8493     // 25: MacroParameter = Identifier "..."
8494     immutable(Production)(immutable(NonterminalID)(6), [
8495                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8496                 immutable(SymbolInstance)(immutable(Symbol)(true, 12), "", "", false, false, [], [])
8497             ], [], [], false, false),
8498     // 26: OptionDeclaration = ^"option" Identifier ^"=" IntegerLiteral ^";"
8499     immutable(Production)(immutable(NonterminalID)(7), [
8500                 immutable(SymbolInstance)(immutable(Symbol)(true, 13), "", "", false, true, [], []),
8501                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8502                 immutable(SymbolInstance)(immutable(Symbol)(true, 6), "", "", false, true, [], []),
8503                 immutable(SymbolInstance)(immutable(Symbol)(true, 4), "", "", false, false, [], []),
8504                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, true, [], [])
8505             ], [], [], false, false),
8506     // 27: Import = "import" StringLiteral ";"
8507     immutable(Production)(immutable(NonterminalID)(8), [
8508                 immutable(SymbolInstance)(immutable(Symbol)(true, 14), "", "", false, false, [], []),
8509                 immutable(SymbolInstance)(immutable(Symbol)(true, 2), "", "", false, false, [], []),
8510                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, false, [], [])
8511             ], [], [], false, false),
8512     // 28: MatchDeclaration = "match" Symbol Symbol ";"
8513     immutable(Production)(immutable(NonterminalID)(9), [
8514                 immutable(SymbolInstance)(immutable(Symbol)(true, 15), "", "", false, false, [], []),
8515                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], []),
8516                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], []),
8517                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, false, [], [])
8518             ], [], [], false, false),
8519     // 29: AnnotationParams? = <AnnotationParams [virtual]
8520     immutable(Production)(immutable(NonterminalID)(43), [
8521                 immutable(SymbolInstance)(immutable(Symbol)(false, 11), "", "", true, false, [], [])
8522             ], [], [], false, true),
8523     // 30: AnnotationParams? = [virtual]
8524     immutable(Production)(immutable(NonterminalID)(43), [], [], [], false, true),
8525     // 31: Annotation = "@" Identifier AnnotationParams?
8526     immutable(Production)(immutable(NonterminalID)(10), [
8527                 immutable(SymbolInstance)(immutable(Symbol)(true, 16), "", "", false, false, [], []),
8528                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8529                 immutable(SymbolInstance)(immutable(Symbol)(false, 43), "", "", false, false, [], [])
8530             ], [], [], false, false),
8531     // 32: AnnotationParamsPart+ @array = AnnotationParamsPart [virtual]
8532     immutable(Production)(immutable(NonterminalID)(44), [
8533                 immutable(SymbolInstance)(immutable(Symbol)(false, 12), "", "", false, false, [], [])
8534             ], [], [], false, true),
8535     // 33: AnnotationParamsPart+ @array = AnnotationParamsPart+ AnnotationParamsPart [virtual]
8536     immutable(Production)(immutable(NonterminalID)(44), [
8537                 immutable(SymbolInstance)(immutable(Symbol)(false, 44), "", "", false, false, [], []),
8538                 immutable(SymbolInstance)(immutable(Symbol)(false, 12), "", "", false, false, [], [])
8539             ], [], [], false, true),
8540     // 34: AnnotationParamsPart* @array = [virtual]
8541     immutable(Production)(immutable(NonterminalID)(45), [], [], [], false, true),
8542     // 35: AnnotationParamsPart* @array = AnnotationParamsPart+ [virtual]
8543     immutable(Production)(immutable(NonterminalID)(45), [
8544                 immutable(SymbolInstance)(immutable(Symbol)(false, 44), "", "", false, false, [], [])
8545             ], [], [], false, true),
8546     // 36: AnnotationParams = "(" AnnotationParamsPart* ")"
8547     immutable(Production)(immutable(NonterminalID)(11), [
8548                 immutable(SymbolInstance)(immutable(Symbol)(true, 9), "", "", false, false, [], []),
8549                 immutable(SymbolInstance)(immutable(Symbol)(false, 45), "", "", false, false, [], []),
8550                 immutable(SymbolInstance)(immutable(Symbol)(true, 10), "", "", false, false, [], [])
8551             ], [], [], false, false),
8552     // 37: AnnotationParamsPart = StringLiteral
8553     immutable(Production)(immutable(NonterminalID)(12), [
8554                 immutable(SymbolInstance)(immutable(Symbol)(true, 2), "", "", false, false, [], [])
8555             ], [], [], false, false),
8556     // 38: AnnotationParamsPart = Identifier
8557     immutable(Production)(immutable(NonterminalID)(12), [
8558                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], [])
8559             ], [], [], false, false),
8560     // 39: AnnotationParamsPart = CharacterSetLiteral
8561     immutable(Production)(immutable(NonterminalID)(12), [
8562                 immutable(SymbolInstance)(immutable(Symbol)(true, 3), "", "", false, false, [], [])
8563             ], [], [], false, false),
8564     // 40: AnnotationParamsPart = IntegerLiteral
8565     immutable(Production)(immutable(NonterminalID)(12), [
8566                 immutable(SymbolInstance)(immutable(Symbol)(true, 4), "", "", false, false, [], [])
8567             ], [], [], false, false),
8568     // 41: AnnotationParamsPart = "(" AnnotationParamsPart* ")"
8569     immutable(Production)(immutable(NonterminalID)(12), [
8570                 immutable(SymbolInstance)(immutable(Symbol)(true, 9), "", "", false, false, [], []),
8571                 immutable(SymbolInstance)(immutable(Symbol)(false, 45), "", "", false, false, [], []),
8572                 immutable(SymbolInstance)(immutable(Symbol)(true, 10), "", "", false, false, [], [])
8573             ], [], [], false, false),
8574     // 42: AnnotationParamsPart = "="
8575     immutable(Production)(immutable(NonterminalID)(12), [
8576                 immutable(SymbolInstance)(immutable(Symbol)(true, 6), "", "", false, false, [], [])
8577             ], [], [], false, false),
8578     // 43: AnnotationParamsPart = ":"
8579     immutable(Production)(immutable(NonterminalID)(12), [
8580                 immutable(SymbolInstance)(immutable(Symbol)(true, 17), "", "", false, false, [], [])
8581             ], [], [], false, false),
8582     // 44: AnnotationParamsPart = ";"
8583     immutable(Production)(immutable(NonterminalID)(12), [
8584                 immutable(SymbolInstance)(immutable(Symbol)(true, 5), "", "", false, false, [], [])
8585             ], [], [], false, false),
8586     // 45: AnnotationParamsPart = ","
8587     immutable(Production)(immutable(NonterminalID)(12), [
8588                 immutable(SymbolInstance)(immutable(Symbol)(true, 11), "", "", false, false, [], [])
8589             ], [], [], false, false),
8590     // 46: AnnotationParamsPart = "{"
8591     immutable(Production)(immutable(NonterminalID)(12), [
8592                 immutable(SymbolInstance)(immutable(Symbol)(true, 18), "", "", false, false, [], [])
8593             ], [], [], false, false),
8594     // 47: AnnotationParamsPart = "}"
8595     immutable(Production)(immutable(NonterminalID)(12), [
8596                 immutable(SymbolInstance)(immutable(Symbol)(true, 19), "", "", false, false, [], [])
8597             ], [], [], false, false),
8598     // 48: AnnotationParamsPart = "?"
8599     immutable(Production)(immutable(NonterminalID)(12), [
8600                 immutable(SymbolInstance)(immutable(Symbol)(true, 20), "", "", false, false, [], [])
8601             ], [], [], false, false),
8602     // 49: AnnotationParamsPart = "!"
8603     immutable(Production)(immutable(NonterminalID)(12), [
8604                 immutable(SymbolInstance)(immutable(Symbol)(true, 21), "", "", false, false, [], [])
8605             ], [], [], false, false),
8606     // 50: AnnotationParamsPart = "<"
8607     immutable(Production)(immutable(NonterminalID)(12), [
8608                 immutable(SymbolInstance)(immutable(Symbol)(true, 22), "", "", false, false, [], [])
8609             ], [], [], false, false),
8610     // 51: AnnotationParamsPart = ">"
8611     immutable(Production)(immutable(NonterminalID)(12), [
8612                 immutable(SymbolInstance)(immutable(Symbol)(true, 23), "", "", false, false, [], [])
8613             ], [], [], false, false),
8614     // 52: AnnotationParamsPart = "*"
8615     immutable(Production)(immutable(NonterminalID)(12), [
8616                 immutable(SymbolInstance)(immutable(Symbol)(true, 24), "", "", false, false, [], [])
8617             ], [], [], false, false),
8618     // 53: AnnotationParamsPart = ">>"
8619     immutable(Production)(immutable(NonterminalID)(12), [
8620                 immutable(SymbolInstance)(immutable(Symbol)(true, 25), "", "", false, false, [], [])
8621             ], [], [], false, false),
8622     // 54: AnnotationParamsPart = "<<"
8623     immutable(Production)(immutable(NonterminalID)(12), [
8624                 immutable(SymbolInstance)(immutable(Symbol)(true, 26), "", "", false, false, [], [])
8625             ], [], [], false, false),
8626     // 55: AnnotationParamsPart = "-"
8627     immutable(Production)(immutable(NonterminalID)(12), [
8628                 immutable(SymbolInstance)(immutable(Symbol)(true, 27), "", "", false, false, [], [])
8629             ], [], [], false, false),
8630     // 56: NegativeLookahead = "!" Symbol
8631     immutable(Production)(immutable(NonterminalID)(13), [
8632                 immutable(SymbolInstance)(immutable(Symbol)(true, 21), "", "", false, false, [], []),
8633                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], [])
8634             ], [], [], false, false),
8635     // 57: NegativeLookahead = "!" "anytoken"
8636     immutable(Production)(immutable(NonterminalID)(13), [
8637                 immutable(SymbolInstance)(immutable(Symbol)(true, 21), "", "", false, false, [], []),
8638                 immutable(SymbolInstance)(immutable(Symbol)(true, 28), "", "", false, false, [], [])
8639             ], [], [], false, false),
8640     // 58: Expression = <Alternation
8641     immutable(Production)(immutable(NonterminalID)(14), [
8642                 immutable(SymbolInstance)(immutable(Symbol)(false, 15), "", "", true, false, [], [])
8643             ], [], [], false, false),
8644     // 59: Alternation = <Concatenation
8645     immutable(Production)(immutable(NonterminalID)(15), [
8646                 immutable(SymbolInstance)(immutable(Symbol)(false, 16), "", "", true, false, [], [])
8647             ], [], [], false, false),
8648     // 60: Alternation = Alternation "|" Concatenation
8649     immutable(Production)(immutable(NonterminalID)(15), [
8650                 immutable(SymbolInstance)(immutable(Symbol)(false, 15), "", "", false, false, [], []),
8651                 immutable(SymbolInstance)(immutable(Symbol)(true, 29), "", "", false, false, [], []),
8652                 immutable(SymbolInstance)(immutable(Symbol)(false, 16), "", "", false, false, [], [])
8653             ], [], [], false, false),
8654     // 61: Concatenation = <TokenMinus
8655     immutable(Production)(immutable(NonterminalID)(16), [
8656                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", true, false, [], [])
8657             ], [], [], false, false),
8658     // 62: TokenMinus+ @array = TokenMinus [virtual]
8659     immutable(Production)(immutable(NonterminalID)(46), [
8660                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", false, false, [], [])
8661             ], [], [], false, true),
8662     // 63: TokenMinus+ @array = TokenMinus+ TokenMinus [virtual]
8663     immutable(Production)(immutable(NonterminalID)(46), [
8664                 immutable(SymbolInstance)(immutable(Symbol)(false, 46), "", "", false, false, [], []),
8665                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", false, false, [], [])
8666             ], [], [], false, true),
8667     // 64: ProductionAnnotation+ @array = ProductionAnnotation [virtual]
8668     immutable(Production)(immutable(NonterminalID)(47), [
8669                 immutable(SymbolInstance)(immutable(Symbol)(false, 17), "", "", false, false, [], [])
8670             ], [], [], false, true),
8671     // 65: ProductionAnnotation+ @array = ProductionAnnotation+ ProductionAnnotation [virtual]
8672     immutable(Production)(immutable(NonterminalID)(47), [
8673                 immutable(SymbolInstance)(immutable(Symbol)(false, 47), "", "", false, false, [], []),
8674                 immutable(SymbolInstance)(immutable(Symbol)(false, 17), "", "", false, false, [], [])
8675             ], [], [], false, true),
8676     immutable(Production)(),
8677     immutable(Production)(),
8678     // 68: Concatenation = TokenMinus TokenMinus+ @regArray @regArray_ProductionAnnotation*
8679     immutable(Production)(immutable(NonterminalID)(16), [
8680                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", false, false, [], []),
8681                 immutable(SymbolInstance)(immutable(Symbol)(false, 46), "", "", false, false, [], []),
8682                 immutable(SymbolInstance)(immutable(Symbol)(false, 48), "", "", false, false, ["regArray"], [])
8683             ], [], [], false, false),
8684     immutable(Production)(),
8685     immutable(Production)(),
8686     // 71: Concatenation = TokenMinus @regArray @regArray_ProductionAnnotation+
8687     immutable(Production)(immutable(NonterminalID)(16), [
8688                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", false, false, [], []),
8689                 immutable(SymbolInstance)(immutable(Symbol)(false, 49), "", "", false, false, ["regArray"], [])
8690             ], [], [], false, false),
8691     // 72: Concatenation = @regArray @regArray_ProductionAnnotation+
8692     immutable(Production)(immutable(NonterminalID)(16), [
8693                 immutable(SymbolInstance)(immutable(Symbol)(false, 49), "", "", false, false, ["regArray"], [])
8694             ], [], [], false, false),
8695     // 73: ProductionAnnotation @directUnwrap = <Annotation
8696     immutable(Production)(immutable(NonterminalID)(17), [
8697                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", true, false, [], [])
8698             ], [], [], false, false),
8699     // 74: ProductionAnnotation @directUnwrap = <NegativeLookahead
8700     immutable(Production)(immutable(NonterminalID)(17), [
8701                 immutable(SymbolInstance)(immutable(Symbol)(false, 13), "", "", true, false, [], [])
8702             ], [], [], false, false),
8703     // 75: TokenMinus = <AnnotatedExpression
8704     immutable(Production)(immutable(NonterminalID)(18), [
8705                 immutable(SymbolInstance)(immutable(Symbol)(false, 19), "", "", true, false, [], [])
8706             ], [], [], false, false),
8707     // 76: TokenMinus = TokenMinus "-" AnnotatedExpression
8708     immutable(Production)(immutable(NonterminalID)(18), [
8709                 immutable(SymbolInstance)(immutable(Symbol)(false, 18), "", "", false, false, [], []),
8710                 immutable(SymbolInstance)(immutable(Symbol)(true, 27), "", "", false, false, [], []),
8711                 immutable(SymbolInstance)(immutable(Symbol)(false, 19), "", "", false, false, [], [])
8712             ], [], [], false, false),
8713     // 77: ExpressionAnnotation+ @array = ExpressionAnnotation [virtual]
8714     immutable(Production)(immutable(NonterminalID)(50), [
8715                 immutable(SymbolInstance)(immutable(Symbol)(false, 20), "", "", false, false, [], [])
8716             ], [], [], false, true),
8717     // 78: ExpressionAnnotation+ @array = ExpressionAnnotation+ ExpressionAnnotation [virtual]
8718     immutable(Production)(immutable(NonterminalID)(50), [
8719                 immutable(SymbolInstance)(immutable(Symbol)(false, 50), "", "", false, false, [], []),
8720                 immutable(SymbolInstance)(immutable(Symbol)(false, 20), "", "", false, false, [], [])
8721             ], [], [], false, true),
8722     immutable(Production)(),
8723     immutable(Production)(),
8724     // 81: ExpressionName? = <ExpressionName [virtual]
8725     immutable(Production)(immutable(NonterminalID)(52), [
8726                 immutable(SymbolInstance)(immutable(Symbol)(false, 21), "", "", true, false, [], [])
8727             ], [], [], false, true),
8728     // 82: ExpressionName? = [virtual]
8729     immutable(Production)(immutable(NonterminalID)(52), [], [], [], false, true),
8730     // 83: ExpressionPrefix+ @array = ExpressionPrefix [virtual]
8731     immutable(Production)(immutable(NonterminalID)(53), [
8732                 immutable(SymbolInstance)(immutable(Symbol)(false, 22), "", "", false, false, [], [])
8733             ], [], [], false, true),
8734     // 84: ExpressionPrefix+ @array = ExpressionPrefix+ ExpressionPrefix [virtual]
8735     immutable(Production)(immutable(NonterminalID)(53), [
8736                 immutable(SymbolInstance)(immutable(Symbol)(false, 53), "", "", false, false, [], []),
8737                 immutable(SymbolInstance)(immutable(Symbol)(false, 22), "", "", false, false, [], [])
8738             ], [], [], false, true),
8739     // 85: ExpressionPrefix* @array = [virtual]
8740     immutable(Production)(immutable(NonterminalID)(54), [], [], [], false, true),
8741     // 86: ExpressionPrefix* @array = ExpressionPrefix+ [virtual]
8742     immutable(Production)(immutable(NonterminalID)(54), [
8743                 immutable(SymbolInstance)(immutable(Symbol)(false, 53), "", "", false, false, [], [])
8744             ], [], [], false, true),
8745     // 87: AnnotatedExpression = @regArray @regArray_ExpressionAnnotation* ExpressionName? ExpressionPrefix* PostfixExpression
8746     immutable(Production)(immutable(NonterminalID)(19), [
8747                 immutable(SymbolInstance)(immutable(Symbol)(false, 51), "", "", false, false, ["regArray"], []),
8748                 immutable(SymbolInstance)(immutable(Symbol)(false, 52), "", "", false, false, [], []),
8749                 immutable(SymbolInstance)(immutable(Symbol)(false, 54), "", "", false, false, [], []),
8750                 immutable(SymbolInstance)(immutable(Symbol)(false, 23), "", "", false, false, [], [])
8751             ], [], [], false, false),
8752     // 88: ExpressionAnnotation @directUnwrap = <Annotation
8753     immutable(Production)(immutable(NonterminalID)(20), [
8754                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", true, false, [], [])
8755             ], [], [], false, false),
8756     // 89: ExpressionAnnotation @directUnwrap = <NegativeLookahead
8757     immutable(Production)(immutable(NonterminalID)(20), [
8758                 immutable(SymbolInstance)(immutable(Symbol)(false, 13), "", "", true, false, [], [])
8759             ], [], [], false, false),
8760     // 90: ExpressionName = Identifier ":"
8761     immutable(Production)(immutable(NonterminalID)(21), [
8762                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8763                 immutable(SymbolInstance)(immutable(Symbol)(true, 17), "", "", false, false, [], [])
8764             ], [], [], false, false),
8765     // 91: ExpressionPrefix = "<"
8766     immutable(Production)(immutable(NonterminalID)(22), [
8767                 immutable(SymbolInstance)(immutable(Symbol)(true, 22), "", "", false, false, [], [])
8768             ], [], [], false, false),
8769     // 92: ExpressionPrefix = "^"
8770     immutable(Production)(immutable(NonterminalID)(22), [
8771                 immutable(SymbolInstance)(immutable(Symbol)(true, 30), "", "", false, false, [], [])
8772             ], [], [], false, false),
8773     // 93: PostfixExpression = <Optional
8774     immutable(Production)(immutable(NonterminalID)(23), [
8775                 immutable(SymbolInstance)(immutable(Symbol)(false, 24), "", "", true, false, [], [])
8776             ], [], [], false, false),
8777     // 94: PostfixExpression = <Repetition
8778     immutable(Production)(immutable(NonterminalID)(23), [
8779                 immutable(SymbolInstance)(immutable(Symbol)(false, 25), "", "", true, false, [], [])
8780             ], [], [], false, false),
8781     // 95: PostfixExpression = <RepetitionPlus
8782     immutable(Production)(immutable(NonterminalID)(23), [
8783                 immutable(SymbolInstance)(immutable(Symbol)(false, 26), "", "", true, false, [], [])
8784             ], [], [], false, false),
8785     // 96: PostfixExpression = <AtomExpression
8786     immutable(Production)(immutable(NonterminalID)(23), [
8787                 immutable(SymbolInstance)(immutable(Symbol)(false, 27), "", "", true, false, [], [])
8788             ], [], [], false, false),
8789     // 97: Optional = PostfixExpression "?"
8790     immutable(Production)(immutable(NonterminalID)(24), [
8791                 immutable(SymbolInstance)(immutable(Symbol)(false, 23), "", "", false, false, [], []),
8792                 immutable(SymbolInstance)(immutable(Symbol)(true, 20), "", "", false, false, [], [])
8793             ], [], [], false, false),
8794     // 98: Repetition = PostfixExpression "*"
8795     immutable(Production)(immutable(NonterminalID)(25), [
8796                 immutable(SymbolInstance)(immutable(Symbol)(false, 23), "", "", false, false, [], []),
8797                 immutable(SymbolInstance)(immutable(Symbol)(true, 24), "", "", false, false, [], [])
8798             ], [], [], false, false),
8799     // 99: RepetitionPlus = PostfixExpression "+"
8800     immutable(Production)(immutable(NonterminalID)(26), [
8801                 immutable(SymbolInstance)(immutable(Symbol)(false, 23), "", "", false, false, [], []),
8802                 immutable(SymbolInstance)(immutable(Symbol)(true, 31), "", "", false, false, [], [])
8803             ], [], [], false, false),
8804     // 100: AtomExpression = <Symbol
8805     immutable(Production)(immutable(NonterminalID)(27), [
8806                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", true, false, [], [])
8807             ], [], [], false, false),
8808     // 101: AtomExpression = <ParenExpression
8809     immutable(Production)(immutable(NonterminalID)(27), [
8810                 immutable(SymbolInstance)(immutable(Symbol)(false, 34), "", "", true, false, [], [])
8811             ], [], [], false, false),
8812     // 102: AtomExpression = <SubToken
8813     immutable(Production)(immutable(NonterminalID)(27), [
8814                 immutable(SymbolInstance)(immutable(Symbol)(false, 32), "", "", true, false, [], [])
8815             ], [], [], false, false),
8816     // 103: AtomExpression = <UnpackVariadicList
8817     immutable(Production)(immutable(NonterminalID)(27), [
8818                 immutable(SymbolInstance)(immutable(Symbol)(false, 31), "", "", true, false, [], [])
8819             ], [], [], false, false),
8820     // 104: AtomExpression = <Tuple
8821     immutable(Production)(immutable(NonterminalID)(27), [
8822                 immutable(SymbolInstance)(immutable(Symbol)(false, 36), "", "", true, false, [], [])
8823             ], [], [], false, false),
8824     // 105: Symbol = <Name
8825     immutable(Production)(immutable(NonterminalID)(28), [
8826                 immutable(SymbolInstance)(immutable(Symbol)(false, 29), "", "", true, false, [], [])
8827             ], [], [], false, false),
8828     // 106: Symbol = <Token
8829     immutable(Production)(immutable(NonterminalID)(28), [
8830                 immutable(SymbolInstance)(immutable(Symbol)(false, 30), "", "", true, false, [], [])
8831             ], [], [], false, false),
8832     // 107: Symbol = <MacroInstance
8833     immutable(Production)(immutable(NonterminalID)(28), [
8834                 immutable(SymbolInstance)(immutable(Symbol)(false, 33), "", "", true, false, [], [])
8835             ], [], [], false, false),
8836     // 108: Name = Identifier
8837     immutable(Production)(immutable(NonterminalID)(29), [
8838                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], [])
8839             ], [], [], false, false),
8840     // 109: Token = StringLiteral
8841     immutable(Production)(immutable(NonterminalID)(30), [
8842                 immutable(SymbolInstance)(immutable(Symbol)(true, 2), "", "", false, false, [], [])
8843             ], [], [], false, false),
8844     // 110: Token = CharacterSetLiteral
8845     immutable(Production)(immutable(NonterminalID)(30), [
8846                 immutable(SymbolInstance)(immutable(Symbol)(true, 3), "", "", false, false, [], [])
8847             ], [], [], false, false),
8848     // 111: UnpackVariadicList = Identifier "..."
8849     immutable(Production)(immutable(NonterminalID)(31), [
8850                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8851                 immutable(SymbolInstance)(immutable(Symbol)(true, 12), "", "", false, false, [], [])
8852             ], [], [], false, false),
8853     // 112: SubToken = Symbol ">>" Symbol
8854     immutable(Production)(immutable(NonterminalID)(32), [
8855                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], []),
8856                 immutable(SymbolInstance)(immutable(Symbol)(true, 25), "", "", false, false, [], []),
8857                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], [])
8858             ], [], [], false, false),
8859     // 113: SubToken = Symbol ">>" ParenExpression
8860     immutable(Production)(immutable(NonterminalID)(32), [
8861                 immutable(SymbolInstance)(immutable(Symbol)(false, 28), "", "", false, false, [], []),
8862                 immutable(SymbolInstance)(immutable(Symbol)(true, 25), "", "", false, false, [], []),
8863                 immutable(SymbolInstance)(immutable(Symbol)(false, 34), "", "", false, false, [], [])
8864             ], [], [], false, false),
8865     // 114: ExpressionList? = <ExpressionList [virtual]
8866     immutable(Production)(immutable(NonterminalID)(55), [
8867                 immutable(SymbolInstance)(immutable(Symbol)(false, 35), "", "", true, false, [], [])
8868             ], [], [], false, true),
8869     // 115: ExpressionList? = [virtual]
8870     immutable(Production)(immutable(NonterminalID)(55), [], [], [], false, true),
8871     // 116: MacroInstance = Identifier "(" ExpressionList? ")"
8872     immutable(Production)(immutable(NonterminalID)(33), [
8873                 immutable(SymbolInstance)(immutable(Symbol)(true, 1), "", "", false, false, [], []),
8874                 immutable(SymbolInstance)(immutable(Symbol)(true, 9), "", "", false, false, [], []),
8875                 immutable(SymbolInstance)(immutable(Symbol)(false, 55), "", "", false, false, [], []),
8876                 immutable(SymbolInstance)(immutable(Symbol)(true, 10), "", "", false, false, [], [])
8877             ], [], [], false, false),
8878     // 117: ParenExpression = "{" Expression "}"
8879     immutable(Production)(immutable(NonterminalID)(34), [
8880                 immutable(SymbolInstance)(immutable(Symbol)(true, 18), "", "", false, false, [], []),
8881                 immutable(SymbolInstance)(immutable(Symbol)(false, 14), "", "", false, false, [], []),
8882                 immutable(SymbolInstance)(immutable(Symbol)(true, 19), "", "", false, false, [], [])
8883             ], [], [], false, false),
8884     // 118: ExpressionList @array = Expression
8885     immutable(Production)(immutable(NonterminalID)(35), [
8886                 immutable(SymbolInstance)(immutable(Symbol)(false, 14), "", "", false, false, [], [])
8887             ], [], [], false, false),
8888     // 119: ExpressionList @array = ExpressionList "," Expression
8889     immutable(Production)(immutable(NonterminalID)(35), [
8890                 immutable(SymbolInstance)(immutable(Symbol)(false, 35), "", "", false, false, [], []),
8891                 immutable(SymbolInstance)(immutable(Symbol)(true, 11), "", "", false, false, [], []),
8892                 immutable(SymbolInstance)(immutable(Symbol)(false, 14), "", "", false, false, [], [])
8893             ], [], [], false, false),
8894     // 120: Tuple = "t(" ExpressionList? ")"
8895     immutable(Production)(immutable(NonterminalID)(36), [
8896                 immutable(SymbolInstance)(immutable(Symbol)(true, 32), "", "", false, false, [], []),
8897                 immutable(SymbolInstance)(immutable(Symbol)(false, 55), "", "", false, false, [], []),
8898                 immutable(SymbolInstance)(immutable(Symbol)(true, 10), "", "", false, false, [], [])
8899             ], [], [], false, false),
8900     // 121: $regarray_1 @array @directUnwrap = @inheritAnyTag $regarray_1 $regarrayedge_1_1
8901     immutable(Production)(immutable(NonterminalID)(57), [
8902                 immutable(SymbolInstance)(immutable(Symbol)(false, 57), "", "", false, false, ["inheritAnyTag"], []),
8903                 immutable(SymbolInstance)(immutable(Symbol)(false, 59), "", "", false, false, [], [])
8904             ], [], [], false, false),
8905     // 122: $regarrayedge_0_1 @directUnwrap = @excludeDirectUnwrap <Annotation
8906     immutable(Production)(immutable(NonterminalID)(58), [
8907                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", true, false, ["excludeDirectUnwrap"], [])
8908             ], [], [], false, false),
8909     // 123: $regarrayedge_0_1 @directUnwrap = @excludeDirectUnwrap <NegativeLookahead
8910     immutable(Production)(immutable(NonterminalID)(58), [
8911                 immutable(SymbolInstance)(immutable(Symbol)(false, 13), "", "", true, false, ["excludeDirectUnwrap"], [])
8912             ], [], [], false, false),
8913     // 124: $regarrayedge_1_1 @directUnwrap = @excludeDirectUnwrap <Annotation
8914     immutable(Production)(immutable(NonterminalID)(59), [
8915                 immutable(SymbolInstance)(immutable(Symbol)(false, 10), "", "", true, false, ["excludeDirectUnwrap"], [])
8916             ], [], [], false, false),
8917     // 125: $regarrayedge_1_1 @directUnwrap = @excludeDirectUnwrap <NegativeLookahead
8918     immutable(Production)(immutable(NonterminalID)(59), [
8919                 immutable(SymbolInstance)(immutable(Symbol)(false, 13), "", "", true, false, ["excludeDirectUnwrap"], [])
8920             ], [], [], false, false),
8921     // 126: $regarray_1 @array @directUnwrap = @inheritAnyTag $regarrayedge_0_1
8922     immutable(Production)(immutable(NonterminalID)(57), [
8923                 immutable(SymbolInstance)(immutable(Symbol)(false, 58), "", "", false, false, ["inheritAnyTag"], [])
8924             ], [], [], false, false),
8925     // 127: @regArray_ExpressionAnnotation* @array @directUnwrap @regArray =
8926     immutable(Production)(immutable(NonterminalID)(51), [], [], [], false, false),
8927     // 128: @regArray_ProductionAnnotation* @array @directUnwrap @regArray =
8928     immutable(Production)(immutable(NonterminalID)(48), [], [], [], false, false),
8929     // 129: @regArray_ExpressionAnnotation* @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1
8930     immutable(Production)(immutable(NonterminalID)(51), [
8931                 immutable(SymbolInstance)(immutable(Symbol)(false, 57), "", "", true, false, ["inheritAnyTag"], [])
8932             ], [], [], false, false),
8933     // 130: @regArray_ProductionAnnotation* @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1
8934     immutable(Production)(immutable(NonterminalID)(48), [
8935                 immutable(SymbolInstance)(immutable(Symbol)(false, 57), "", "", true, false, ["inheritAnyTag"], [])
8936             ], [], [], false, false),
8937     // 131: @regArray_ProductionAnnotation+ @array @directUnwrap @regArray = @inheritAnyTag <$regarray_1
8938     immutable(Production)(immutable(NonterminalID)(49), [
8939                 immutable(SymbolInstance)(immutable(Symbol)(false, 57), "", "", true, false, ["inheritAnyTag"], [])
8940             ], [], [], false, false),
8941 ];
8942 
8943 immutable GrammarInfo grammarInfo = immutable(GrammarInfo)(
8944         startTokenID, startNonterminalID, startProductionID,
8945         allTokens, allNonterminals, allProductions);
8946 
8947 Creator.Type parse(Creator, alias Lexer, string startNonterminal = "EBNF")(ref Lexer lexer, Creator creator)
8948 {
8949     alias Location = typeof(Lexer.init.front.currentLocation);
8950     auto parser = Parser!(Creator, Lexer)(
8951             creator,
8952             &lexer);
8953     ParameterTypeTuple!(__traits(getMember, parser, "parse" ~ startNonterminal))[0] parseResult;
8954     Location parseResultLocation;
8955     int gotoParent = __traits(getMember, parser, "parse" ~ startNonterminal)(parseResult, parseResultLocation);
8956     if (gotoParent < 0)
8957     {
8958         assert(parser.lastError !is null);
8959         throw parser.lastError;
8960     }
8961     else
8962         assert(parser.lastError is null);
8963     auto result = parseResult;
8964     creator.adjustStart(result, parseResultLocation);
8965     return result;
8966 }
8967 
8968 Creator.Type parse(Creator, alias Lexer, string startNonterminal = "EBNF")(string input, Creator creator, typeof(Lexer.init.front.currentLocation) startLocation = typeof(Lexer.init.front.currentLocation).init)
8969 {
8970     alias Location = typeof(Lexer.init.front.currentLocation);
8971     Lexer lexer = Lexer(input, startLocation);
8972     auto result = parse!(Creator, Lexer, startNonterminal)(lexer, creator);
8973     if (!lexer.empty)
8974     {
8975         throw new SingleParseException!Location("input left after parse",
8976                 lexer.front.currentLocation, lexer.front.currentTokenEnd);
8977     }
8978     return result;
8979 }