1 module graphql.visitor;
2 
3 import graphql.ast;
4 import graphql.tokenmodule;
5 
6 @safe:
7 
8 class Visitor {
9 
10 	void enter(Document obj) {}
11 	void exit(Document obj) {}
12 
13 	void accept(Document obj) {
14 		enter(obj);
15 		final switch(obj.ruleSelection) {
16 			case DocumentEnum.Defi:
17 				obj.defs.visit(this);
18 				break;
19 		}
20 		exit(obj);
21 	}
22 
23 	void enter(const(Document) obj) {}
24 	void exit(const(Document) obj) {}
25 
26 	void accept(const(Document) obj) {
27 		enter(obj);
28 		final switch(obj.ruleSelection) {
29 			case DocumentEnum.Defi:
30 				obj.defs.visit(this);
31 				break;
32 		}
33 		exit(obj);
34 	}
35 
36 	void enter(Definitions obj) {}
37 	void exit(Definitions obj) {}
38 
39 	void accept(Definitions obj) {
40 		enter(obj);
41 		final switch(obj.ruleSelection) {
42 			case DefinitionsEnum.Def:
43 				obj.def.visit(this);
44 				break;
45 			case DefinitionsEnum.Defs:
46 				obj.def.visit(this);
47 				obj.follow.visit(this);
48 				break;
49 		}
50 		exit(obj);
51 	}
52 
53 	void enter(const(Definitions) obj) {}
54 	void exit(const(Definitions) obj) {}
55 
56 	void accept(const(Definitions) obj) {
57 		enter(obj);
58 		final switch(obj.ruleSelection) {
59 			case DefinitionsEnum.Def:
60 				obj.def.visit(this);
61 				break;
62 			case DefinitionsEnum.Defs:
63 				obj.def.visit(this);
64 				obj.follow.visit(this);
65 				break;
66 		}
67 		exit(obj);
68 	}
69 
70 	void enter(Definition obj) {}
71 	void exit(Definition obj) {}
72 
73 	void accept(Definition obj) {
74 		enter(obj);
75 		final switch(obj.ruleSelection) {
76 			case DefinitionEnum.O:
77 				obj.op.visit(this);
78 				break;
79 			case DefinitionEnum.F:
80 				obj.frag.visit(this);
81 				break;
82 			case DefinitionEnum.T:
83 				obj.type.visit(this);
84 				break;
85 		}
86 		exit(obj);
87 	}
88 
89 	void enter(const(Definition) obj) {}
90 	void exit(const(Definition) obj) {}
91 
92 	void accept(const(Definition) obj) {
93 		enter(obj);
94 		final switch(obj.ruleSelection) {
95 			case DefinitionEnum.O:
96 				obj.op.visit(this);
97 				break;
98 			case DefinitionEnum.F:
99 				obj.frag.visit(this);
100 				break;
101 			case DefinitionEnum.T:
102 				obj.type.visit(this);
103 				break;
104 		}
105 		exit(obj);
106 	}
107 
108 	void enter(OperationDefinition obj) {}
109 	void exit(OperationDefinition obj) {}
110 
111 	void accept(OperationDefinition obj) {
112 		enter(obj);
113 		final switch(obj.ruleSelection) {
114 			case OperationDefinitionEnum.SelSet:
115 				obj.ss.visit(this);
116 				break;
117 			case OperationDefinitionEnum.OT_N_VD:
118 				obj.ot.visit(this);
119 				obj.name.visit(this);
120 				obj.vd.visit(this);
121 				obj.d.visit(this);
122 				obj.ss.visit(this);
123 				break;
124 			case OperationDefinitionEnum.OT_N_V:
125 				obj.ot.visit(this);
126 				obj.name.visit(this);
127 				obj.vd.visit(this);
128 				obj.ss.visit(this);
129 				break;
130 			case OperationDefinitionEnum.OT_N_D:
131 				obj.ot.visit(this);
132 				obj.name.visit(this);
133 				obj.d.visit(this);
134 				obj.ss.visit(this);
135 				break;
136 			case OperationDefinitionEnum.OT_N:
137 				obj.ot.visit(this);
138 				obj.name.visit(this);
139 				obj.ss.visit(this);
140 				break;
141 			case OperationDefinitionEnum.OT_VD:
142 				obj.ot.visit(this);
143 				obj.vd.visit(this);
144 				obj.d.visit(this);
145 				obj.ss.visit(this);
146 				break;
147 			case OperationDefinitionEnum.OT_V:
148 				obj.ot.visit(this);
149 				obj.vd.visit(this);
150 				obj.ss.visit(this);
151 				break;
152 			case OperationDefinitionEnum.OT_D:
153 				obj.ot.visit(this);
154 				obj.d.visit(this);
155 				obj.ss.visit(this);
156 				break;
157 			case OperationDefinitionEnum.OT:
158 				obj.ot.visit(this);
159 				obj.ss.visit(this);
160 				break;
161 		}
162 		exit(obj);
163 	}
164 
165 	void enter(const(OperationDefinition) obj) {}
166 	void exit(const(OperationDefinition) obj) {}
167 
168 	void accept(const(OperationDefinition) obj) {
169 		enter(obj);
170 		final switch(obj.ruleSelection) {
171 			case OperationDefinitionEnum.SelSet:
172 				obj.ss.visit(this);
173 				break;
174 			case OperationDefinitionEnum.OT_N_VD:
175 				obj.ot.visit(this);
176 				obj.name.visit(this);
177 				obj.vd.visit(this);
178 				obj.d.visit(this);
179 				obj.ss.visit(this);
180 				break;
181 			case OperationDefinitionEnum.OT_N_V:
182 				obj.ot.visit(this);
183 				obj.name.visit(this);
184 				obj.vd.visit(this);
185 				obj.ss.visit(this);
186 				break;
187 			case OperationDefinitionEnum.OT_N_D:
188 				obj.ot.visit(this);
189 				obj.name.visit(this);
190 				obj.d.visit(this);
191 				obj.ss.visit(this);
192 				break;
193 			case OperationDefinitionEnum.OT_N:
194 				obj.ot.visit(this);
195 				obj.name.visit(this);
196 				obj.ss.visit(this);
197 				break;
198 			case OperationDefinitionEnum.OT_VD:
199 				obj.ot.visit(this);
200 				obj.vd.visit(this);
201 				obj.d.visit(this);
202 				obj.ss.visit(this);
203 				break;
204 			case OperationDefinitionEnum.OT_V:
205 				obj.ot.visit(this);
206 				obj.vd.visit(this);
207 				obj.ss.visit(this);
208 				break;
209 			case OperationDefinitionEnum.OT_D:
210 				obj.ot.visit(this);
211 				obj.d.visit(this);
212 				obj.ss.visit(this);
213 				break;
214 			case OperationDefinitionEnum.OT:
215 				obj.ot.visit(this);
216 				obj.ss.visit(this);
217 				break;
218 		}
219 		exit(obj);
220 	}
221 
222 	void enter(SelectionSet obj) {}
223 	void exit(SelectionSet obj) {}
224 
225 	void accept(SelectionSet obj) {
226 		enter(obj);
227 		final switch(obj.ruleSelection) {
228 			case SelectionSetEnum.SS:
229 				obj.sel.visit(this);
230 				break;
231 		}
232 		exit(obj);
233 	}
234 
235 	void enter(const(SelectionSet) obj) {}
236 	void exit(const(SelectionSet) obj) {}
237 
238 	void accept(const(SelectionSet) obj) {
239 		enter(obj);
240 		final switch(obj.ruleSelection) {
241 			case SelectionSetEnum.SS:
242 				obj.sel.visit(this);
243 				break;
244 		}
245 		exit(obj);
246 	}
247 
248 	void enter(OperationType obj) {}
249 	void exit(OperationType obj) {}
250 
251 	void accept(OperationType obj) {
252 		enter(obj);
253 		final switch(obj.ruleSelection) {
254 			case OperationTypeEnum.Query:
255 				obj.tok.visit(this);
256 				break;
257 			case OperationTypeEnum.Mutation:
258 				obj.tok.visit(this);
259 				break;
260 			case OperationTypeEnum.Sub:
261 				obj.tok.visit(this);
262 				break;
263 		}
264 		exit(obj);
265 	}
266 
267 	void enter(const(OperationType) obj) {}
268 	void exit(const(OperationType) obj) {}
269 
270 	void accept(const(OperationType) obj) {
271 		enter(obj);
272 		final switch(obj.ruleSelection) {
273 			case OperationTypeEnum.Query:
274 				obj.tok.visit(this);
275 				break;
276 			case OperationTypeEnum.Mutation:
277 				obj.tok.visit(this);
278 				break;
279 			case OperationTypeEnum.Sub:
280 				obj.tok.visit(this);
281 				break;
282 		}
283 		exit(obj);
284 	}
285 
286 	void enter(Selections obj) {}
287 	void exit(Selections obj) {}
288 
289 	void accept(Selections obj) {
290 		enter(obj);
291 		final switch(obj.ruleSelection) {
292 			case SelectionsEnum.Sel:
293 				obj.sel.visit(this);
294 				break;
295 			case SelectionsEnum.Sels:
296 				obj.sel.visit(this);
297 				obj.follow.visit(this);
298 				break;
299 			case SelectionsEnum.Selsc:
300 				obj.sel.visit(this);
301 				obj.follow.visit(this);
302 				break;
303 		}
304 		exit(obj);
305 	}
306 
307 	void enter(const(Selections) obj) {}
308 	void exit(const(Selections) obj) {}
309 
310 	void accept(const(Selections) obj) {
311 		enter(obj);
312 		final switch(obj.ruleSelection) {
313 			case SelectionsEnum.Sel:
314 				obj.sel.visit(this);
315 				break;
316 			case SelectionsEnum.Sels:
317 				obj.sel.visit(this);
318 				obj.follow.visit(this);
319 				break;
320 			case SelectionsEnum.Selsc:
321 				obj.sel.visit(this);
322 				obj.follow.visit(this);
323 				break;
324 		}
325 		exit(obj);
326 	}
327 
328 	void enter(Selection obj) {}
329 	void exit(Selection obj) {}
330 
331 	void accept(Selection obj) {
332 		enter(obj);
333 		final switch(obj.ruleSelection) {
334 			case SelectionEnum.Field:
335 				obj.field.visit(this);
336 				break;
337 			case SelectionEnum.Spread:
338 				obj.frag.visit(this);
339 				break;
340 			case SelectionEnum.IFrag:
341 				obj.ifrag.visit(this);
342 				break;
343 		}
344 		exit(obj);
345 	}
346 
347 	void enter(const(Selection) obj) {}
348 	void exit(const(Selection) obj) {}
349 
350 	void accept(const(Selection) obj) {
351 		enter(obj);
352 		final switch(obj.ruleSelection) {
353 			case SelectionEnum.Field:
354 				obj.field.visit(this);
355 				break;
356 			case SelectionEnum.Spread:
357 				obj.frag.visit(this);
358 				break;
359 			case SelectionEnum.IFrag:
360 				obj.ifrag.visit(this);
361 				break;
362 		}
363 		exit(obj);
364 	}
365 
366 	void enter(FragmentSpread obj) {}
367 	void exit(FragmentSpread obj) {}
368 
369 	void accept(FragmentSpread obj) {
370 		enter(obj);
371 		final switch(obj.ruleSelection) {
372 			case FragmentSpreadEnum.FD:
373 				obj.name.visit(this);
374 				obj.dirs.visit(this);
375 				break;
376 			case FragmentSpreadEnum.F:
377 				obj.name.visit(this);
378 				break;
379 		}
380 		exit(obj);
381 	}
382 
383 	void enter(const(FragmentSpread) obj) {}
384 	void exit(const(FragmentSpread) obj) {}
385 
386 	void accept(const(FragmentSpread) obj) {
387 		enter(obj);
388 		final switch(obj.ruleSelection) {
389 			case FragmentSpreadEnum.FD:
390 				obj.name.visit(this);
391 				obj.dirs.visit(this);
392 				break;
393 			case FragmentSpreadEnum.F:
394 				obj.name.visit(this);
395 				break;
396 		}
397 		exit(obj);
398 	}
399 
400 	void enter(InlineFragment obj) {}
401 	void exit(InlineFragment obj) {}
402 
403 	void accept(InlineFragment obj) {
404 		enter(obj);
405 		final switch(obj.ruleSelection) {
406 			case InlineFragmentEnum.TDS:
407 				obj.tc.visit(this);
408 				obj.dirs.visit(this);
409 				obj.ss.visit(this);
410 				break;
411 			case InlineFragmentEnum.TS:
412 				obj.tc.visit(this);
413 				obj.ss.visit(this);
414 				break;
415 			case InlineFragmentEnum.DS:
416 				obj.dirs.visit(this);
417 				obj.ss.visit(this);
418 				break;
419 			case InlineFragmentEnum.S:
420 				obj.ss.visit(this);
421 				break;
422 		}
423 		exit(obj);
424 	}
425 
426 	void enter(const(InlineFragment) obj) {}
427 	void exit(const(InlineFragment) obj) {}
428 
429 	void accept(const(InlineFragment) obj) {
430 		enter(obj);
431 		final switch(obj.ruleSelection) {
432 			case InlineFragmentEnum.TDS:
433 				obj.tc.visit(this);
434 				obj.dirs.visit(this);
435 				obj.ss.visit(this);
436 				break;
437 			case InlineFragmentEnum.TS:
438 				obj.tc.visit(this);
439 				obj.ss.visit(this);
440 				break;
441 			case InlineFragmentEnum.DS:
442 				obj.dirs.visit(this);
443 				obj.ss.visit(this);
444 				break;
445 			case InlineFragmentEnum.S:
446 				obj.ss.visit(this);
447 				break;
448 		}
449 		exit(obj);
450 	}
451 
452 	void enter(Field obj) {}
453 	void exit(Field obj) {}
454 
455 	void accept(Field obj) {
456 		enter(obj);
457 		final switch(obj.ruleSelection) {
458 			case FieldEnum.FADS:
459 				obj.name.visit(this);
460 				obj.args.visit(this);
461 				obj.dirs.visit(this);
462 				obj.ss.visit(this);
463 				break;
464 			case FieldEnum.FAS:
465 				obj.name.visit(this);
466 				obj.args.visit(this);
467 				obj.ss.visit(this);
468 				break;
469 			case FieldEnum.FAD:
470 				obj.name.visit(this);
471 				obj.args.visit(this);
472 				obj.dirs.visit(this);
473 				break;
474 			case FieldEnum.FDS:
475 				obj.name.visit(this);
476 				obj.dirs.visit(this);
477 				obj.ss.visit(this);
478 				break;
479 			case FieldEnum.FS:
480 				obj.name.visit(this);
481 				obj.ss.visit(this);
482 				break;
483 			case FieldEnum.FD:
484 				obj.name.visit(this);
485 				obj.dirs.visit(this);
486 				break;
487 			case FieldEnum.FA:
488 				obj.name.visit(this);
489 				obj.args.visit(this);
490 				break;
491 			case FieldEnum.F:
492 				obj.name.visit(this);
493 				break;
494 		}
495 		exit(obj);
496 	}
497 
498 	void enter(const(Field) obj) {}
499 	void exit(const(Field) obj) {}
500 
501 	void accept(const(Field) obj) {
502 		enter(obj);
503 		final switch(obj.ruleSelection) {
504 			case FieldEnum.FADS:
505 				obj.name.visit(this);
506 				obj.args.visit(this);
507 				obj.dirs.visit(this);
508 				obj.ss.visit(this);
509 				break;
510 			case FieldEnum.FAS:
511 				obj.name.visit(this);
512 				obj.args.visit(this);
513 				obj.ss.visit(this);
514 				break;
515 			case FieldEnum.FAD:
516 				obj.name.visit(this);
517 				obj.args.visit(this);
518 				obj.dirs.visit(this);
519 				break;
520 			case FieldEnum.FDS:
521 				obj.name.visit(this);
522 				obj.dirs.visit(this);
523 				obj.ss.visit(this);
524 				break;
525 			case FieldEnum.FS:
526 				obj.name.visit(this);
527 				obj.ss.visit(this);
528 				break;
529 			case FieldEnum.FD:
530 				obj.name.visit(this);
531 				obj.dirs.visit(this);
532 				break;
533 			case FieldEnum.FA:
534 				obj.name.visit(this);
535 				obj.args.visit(this);
536 				break;
537 			case FieldEnum.F:
538 				obj.name.visit(this);
539 				break;
540 		}
541 		exit(obj);
542 	}
543 
544 	void enter(FieldName obj) {}
545 	void exit(FieldName obj) {}
546 
547 	void accept(FieldName obj) {
548 		enter(obj);
549 		final switch(obj.ruleSelection) {
550 			case FieldNameEnum.A:
551 				obj.name.visit(this);
552 				obj.aka.visit(this);
553 				break;
554 			case FieldNameEnum.N:
555 				obj.name.visit(this);
556 				break;
557 		}
558 		exit(obj);
559 	}
560 
561 	void enter(const(FieldName) obj) {}
562 	void exit(const(FieldName) obj) {}
563 
564 	void accept(const(FieldName) obj) {
565 		enter(obj);
566 		final switch(obj.ruleSelection) {
567 			case FieldNameEnum.A:
568 				obj.name.visit(this);
569 				obj.aka.visit(this);
570 				break;
571 			case FieldNameEnum.N:
572 				obj.name.visit(this);
573 				break;
574 		}
575 		exit(obj);
576 	}
577 
578 	void enter(Arguments obj) {}
579 	void exit(Arguments obj) {}
580 
581 	void accept(Arguments obj) {
582 		enter(obj);
583 		final switch(obj.ruleSelection) {
584 			case ArgumentsEnum.List:
585 				obj.arg.visit(this);
586 				break;
587 			case ArgumentsEnum.Empty:
588 				break;
589 		}
590 		exit(obj);
591 	}
592 
593 	void enter(const(Arguments) obj) {}
594 	void exit(const(Arguments) obj) {}
595 
596 	void accept(const(Arguments) obj) {
597 		enter(obj);
598 		final switch(obj.ruleSelection) {
599 			case ArgumentsEnum.List:
600 				obj.arg.visit(this);
601 				break;
602 			case ArgumentsEnum.Empty:
603 				break;
604 		}
605 		exit(obj);
606 	}
607 
608 	void enter(ArgumentList obj) {}
609 	void exit(ArgumentList obj) {}
610 
611 	void accept(ArgumentList obj) {
612 		enter(obj);
613 		final switch(obj.ruleSelection) {
614 			case ArgumentListEnum.A:
615 				obj.arg.visit(this);
616 				break;
617 			case ArgumentListEnum.ACS:
618 				obj.arg.visit(this);
619 				obj.follow.visit(this);
620 				break;
621 			case ArgumentListEnum.AS:
622 				obj.arg.visit(this);
623 				obj.follow.visit(this);
624 				break;
625 		}
626 		exit(obj);
627 	}
628 
629 	void enter(const(ArgumentList) obj) {}
630 	void exit(const(ArgumentList) obj) {}
631 
632 	void accept(const(ArgumentList) obj) {
633 		enter(obj);
634 		final switch(obj.ruleSelection) {
635 			case ArgumentListEnum.A:
636 				obj.arg.visit(this);
637 				break;
638 			case ArgumentListEnum.ACS:
639 				obj.arg.visit(this);
640 				obj.follow.visit(this);
641 				break;
642 			case ArgumentListEnum.AS:
643 				obj.arg.visit(this);
644 				obj.follow.visit(this);
645 				break;
646 		}
647 		exit(obj);
648 	}
649 
650 	void enter(Argument obj) {}
651 	void exit(Argument obj) {}
652 
653 	void accept(Argument obj) {
654 		enter(obj);
655 		final switch(obj.ruleSelection) {
656 			case ArgumentEnum.Name:
657 				obj.name.visit(this);
658 				obj.vv.visit(this);
659 				break;
660 		}
661 		exit(obj);
662 	}
663 
664 	void enter(const(Argument) obj) {}
665 	void exit(const(Argument) obj) {}
666 
667 	void accept(const(Argument) obj) {
668 		enter(obj);
669 		final switch(obj.ruleSelection) {
670 			case ArgumentEnum.Name:
671 				obj.name.visit(this);
672 				obj.vv.visit(this);
673 				break;
674 		}
675 		exit(obj);
676 	}
677 
678 	void enter(FragmentDefinition obj) {}
679 	void exit(FragmentDefinition obj) {}
680 
681 	void accept(FragmentDefinition obj) {
682 		enter(obj);
683 		final switch(obj.ruleSelection) {
684 			case FragmentDefinitionEnum.FTDS:
685 				obj.name.visit(this);
686 				obj.tc.visit(this);
687 				obj.dirs.visit(this);
688 				obj.ss.visit(this);
689 				break;
690 			case FragmentDefinitionEnum.FTS:
691 				obj.name.visit(this);
692 				obj.tc.visit(this);
693 				obj.ss.visit(this);
694 				break;
695 		}
696 		exit(obj);
697 	}
698 
699 	void enter(const(FragmentDefinition) obj) {}
700 	void exit(const(FragmentDefinition) obj) {}
701 
702 	void accept(const(FragmentDefinition) obj) {
703 		enter(obj);
704 		final switch(obj.ruleSelection) {
705 			case FragmentDefinitionEnum.FTDS:
706 				obj.name.visit(this);
707 				obj.tc.visit(this);
708 				obj.dirs.visit(this);
709 				obj.ss.visit(this);
710 				break;
711 			case FragmentDefinitionEnum.FTS:
712 				obj.name.visit(this);
713 				obj.tc.visit(this);
714 				obj.ss.visit(this);
715 				break;
716 		}
717 		exit(obj);
718 	}
719 
720 	void enter(Directives obj) {}
721 	void exit(Directives obj) {}
722 
723 	void accept(Directives obj) {
724 		enter(obj);
725 		final switch(obj.ruleSelection) {
726 			case DirectivesEnum.Dir:
727 				obj.dir.visit(this);
728 				break;
729 			case DirectivesEnum.Dirs:
730 				obj.dir.visit(this);
731 				obj.follow.visit(this);
732 				break;
733 		}
734 		exit(obj);
735 	}
736 
737 	void enter(const(Directives) obj) {}
738 	void exit(const(Directives) obj) {}
739 
740 	void accept(const(Directives) obj) {
741 		enter(obj);
742 		final switch(obj.ruleSelection) {
743 			case DirectivesEnum.Dir:
744 				obj.dir.visit(this);
745 				break;
746 			case DirectivesEnum.Dirs:
747 				obj.dir.visit(this);
748 				obj.follow.visit(this);
749 				break;
750 		}
751 		exit(obj);
752 	}
753 
754 	void enter(Directive obj) {}
755 	void exit(Directive obj) {}
756 
757 	void accept(Directive obj) {
758 		enter(obj);
759 		final switch(obj.ruleSelection) {
760 			case DirectiveEnum.NArg:
761 				obj.name.visit(this);
762 				obj.arg.visit(this);
763 				break;
764 			case DirectiveEnum.N:
765 				obj.name.visit(this);
766 				break;
767 		}
768 		exit(obj);
769 	}
770 
771 	void enter(const(Directive) obj) {}
772 	void exit(const(Directive) obj) {}
773 
774 	void accept(const(Directive) obj) {
775 		enter(obj);
776 		final switch(obj.ruleSelection) {
777 			case DirectiveEnum.NArg:
778 				obj.name.visit(this);
779 				obj.arg.visit(this);
780 				break;
781 			case DirectiveEnum.N:
782 				obj.name.visit(this);
783 				break;
784 		}
785 		exit(obj);
786 	}
787 
788 	void enter(VariableDefinitions obj) {}
789 	void exit(VariableDefinitions obj) {}
790 
791 	void accept(VariableDefinitions obj) {
792 		enter(obj);
793 		final switch(obj.ruleSelection) {
794 			case VariableDefinitionsEnum.Empty:
795 				break;
796 			case VariableDefinitionsEnum.Vars:
797 				obj.vars.visit(this);
798 				break;
799 		}
800 		exit(obj);
801 	}
802 
803 	void enter(const(VariableDefinitions) obj) {}
804 	void exit(const(VariableDefinitions) obj) {}
805 
806 	void accept(const(VariableDefinitions) obj) {
807 		enter(obj);
808 		final switch(obj.ruleSelection) {
809 			case VariableDefinitionsEnum.Empty:
810 				break;
811 			case VariableDefinitionsEnum.Vars:
812 				obj.vars.visit(this);
813 				break;
814 		}
815 		exit(obj);
816 	}
817 
818 	void enter(VariableDefinitionList obj) {}
819 	void exit(VariableDefinitionList obj) {}
820 
821 	void accept(VariableDefinitionList obj) {
822 		enter(obj);
823 		final switch(obj.ruleSelection) {
824 			case VariableDefinitionListEnum.V:
825 				obj.var.visit(this);
826 				break;
827 			case VariableDefinitionListEnum.VCF:
828 				obj.var.visit(this);
829 				obj.follow.visit(this);
830 				break;
831 			case VariableDefinitionListEnum.VF:
832 				obj.var.visit(this);
833 				obj.follow.visit(this);
834 				break;
835 		}
836 		exit(obj);
837 	}
838 
839 	void enter(const(VariableDefinitionList) obj) {}
840 	void exit(const(VariableDefinitionList) obj) {}
841 
842 	void accept(const(VariableDefinitionList) obj) {
843 		enter(obj);
844 		final switch(obj.ruleSelection) {
845 			case VariableDefinitionListEnum.V:
846 				obj.var.visit(this);
847 				break;
848 			case VariableDefinitionListEnum.VCF:
849 				obj.var.visit(this);
850 				obj.follow.visit(this);
851 				break;
852 			case VariableDefinitionListEnum.VF:
853 				obj.var.visit(this);
854 				obj.follow.visit(this);
855 				break;
856 		}
857 		exit(obj);
858 	}
859 
860 	void enter(VariableDefinition obj) {}
861 	void exit(VariableDefinition obj) {}
862 
863 	void accept(VariableDefinition obj) {
864 		enter(obj);
865 		final switch(obj.ruleSelection) {
866 			case VariableDefinitionEnum.VarD:
867 				obj.type.visit(this);
868 				obj.dvalue.visit(this);
869 				break;
870 			case VariableDefinitionEnum.Var:
871 				obj.type.visit(this);
872 				break;
873 		}
874 		exit(obj);
875 	}
876 
877 	void enter(const(VariableDefinition) obj) {}
878 	void exit(const(VariableDefinition) obj) {}
879 
880 	void accept(const(VariableDefinition) obj) {
881 		enter(obj);
882 		final switch(obj.ruleSelection) {
883 			case VariableDefinitionEnum.VarD:
884 				obj.type.visit(this);
885 				obj.dvalue.visit(this);
886 				break;
887 			case VariableDefinitionEnum.Var:
888 				obj.type.visit(this);
889 				break;
890 		}
891 		exit(obj);
892 	}
893 
894 	void enter(Variable obj) {}
895 	void exit(Variable obj) {}
896 
897 	void accept(Variable obj) {
898 		enter(obj);
899 		final switch(obj.ruleSelection) {
900 			case VariableEnum.Var:
901 				obj.name.visit(this);
902 				break;
903 		}
904 		exit(obj);
905 	}
906 
907 	void enter(const(Variable) obj) {}
908 	void exit(const(Variable) obj) {}
909 
910 	void accept(const(Variable) obj) {
911 		enter(obj);
912 		final switch(obj.ruleSelection) {
913 			case VariableEnum.Var:
914 				obj.name.visit(this);
915 				break;
916 		}
917 		exit(obj);
918 	}
919 
920 	void enter(DefaultValue obj) {}
921 	void exit(DefaultValue obj) {}
922 
923 	void accept(DefaultValue obj) {
924 		enter(obj);
925 		final switch(obj.ruleSelection) {
926 			case DefaultValueEnum.DV:
927 				obj.value.visit(this);
928 				break;
929 		}
930 		exit(obj);
931 	}
932 
933 	void enter(const(DefaultValue) obj) {}
934 	void exit(const(DefaultValue) obj) {}
935 
936 	void accept(const(DefaultValue) obj) {
937 		enter(obj);
938 		final switch(obj.ruleSelection) {
939 			case DefaultValueEnum.DV:
940 				obj.value.visit(this);
941 				break;
942 		}
943 		exit(obj);
944 	}
945 
946 	void enter(ValueOrVariable obj) {}
947 	void exit(ValueOrVariable obj) {}
948 
949 	void accept(ValueOrVariable obj) {
950 		enter(obj);
951 		final switch(obj.ruleSelection) {
952 			case ValueOrVariableEnum.Val:
953 				obj.val.visit(this);
954 				break;
955 			case ValueOrVariableEnum.Var:
956 				obj.var.visit(this);
957 				break;
958 		}
959 		exit(obj);
960 	}
961 
962 	void enter(const(ValueOrVariable) obj) {}
963 	void exit(const(ValueOrVariable) obj) {}
964 
965 	void accept(const(ValueOrVariable) obj) {
966 		enter(obj);
967 		final switch(obj.ruleSelection) {
968 			case ValueOrVariableEnum.Val:
969 				obj.val.visit(this);
970 				break;
971 			case ValueOrVariableEnum.Var:
972 				obj.var.visit(this);
973 				break;
974 		}
975 		exit(obj);
976 	}
977 
978 	void enter(Value obj) {}
979 	void exit(Value obj) {}
980 
981 	void accept(Value obj) {
982 		enter(obj);
983 		final switch(obj.ruleSelection) {
984 			case ValueEnum.STR:
985 				obj.tok.visit(this);
986 				break;
987 			case ValueEnum.INT:
988 				obj.tok.visit(this);
989 				break;
990 			case ValueEnum.FLOAT:
991 				obj.tok.visit(this);
992 				break;
993 			case ValueEnum.T:
994 				obj.tok.visit(this);
995 				break;
996 			case ValueEnum.F:
997 				obj.tok.visit(this);
998 				break;
999 			case ValueEnum.ARR:
1000 				obj.arr.visit(this);
1001 				break;
1002 			case ValueEnum.O:
1003 				obj.obj.visit(this);
1004 				break;
1005 			case ValueEnum.E:
1006 				obj.tok.visit(this);
1007 				break;
1008 		}
1009 		exit(obj);
1010 	}
1011 
1012 	void enter(const(Value) obj) {}
1013 	void exit(const(Value) obj) {}
1014 
1015 	void accept(const(Value) obj) {
1016 		enter(obj);
1017 		final switch(obj.ruleSelection) {
1018 			case ValueEnum.STR:
1019 				obj.tok.visit(this);
1020 				break;
1021 			case ValueEnum.INT:
1022 				obj.tok.visit(this);
1023 				break;
1024 			case ValueEnum.FLOAT:
1025 				obj.tok.visit(this);
1026 				break;
1027 			case ValueEnum.T:
1028 				obj.tok.visit(this);
1029 				break;
1030 			case ValueEnum.F:
1031 				obj.tok.visit(this);
1032 				break;
1033 			case ValueEnum.ARR:
1034 				obj.arr.visit(this);
1035 				break;
1036 			case ValueEnum.O:
1037 				obj.obj.visit(this);
1038 				break;
1039 			case ValueEnum.E:
1040 				obj.tok.visit(this);
1041 				break;
1042 		}
1043 		exit(obj);
1044 	}
1045 
1046 	void enter(Type obj) {}
1047 	void exit(Type obj) {}
1048 
1049 	void accept(Type obj) {
1050 		enter(obj);
1051 		final switch(obj.ruleSelection) {
1052 			case TypeEnum.TN:
1053 				obj.tname.visit(this);
1054 				break;
1055 			case TypeEnum.LN:
1056 				obj.list.visit(this);
1057 				break;
1058 			case TypeEnum.T:
1059 				obj.tname.visit(this);
1060 				break;
1061 			case TypeEnum.L:
1062 				obj.list.visit(this);
1063 				break;
1064 		}
1065 		exit(obj);
1066 	}
1067 
1068 	void enter(const(Type) obj) {}
1069 	void exit(const(Type) obj) {}
1070 
1071 	void accept(const(Type) obj) {
1072 		enter(obj);
1073 		final switch(obj.ruleSelection) {
1074 			case TypeEnum.TN:
1075 				obj.tname.visit(this);
1076 				break;
1077 			case TypeEnum.LN:
1078 				obj.list.visit(this);
1079 				break;
1080 			case TypeEnum.T:
1081 				obj.tname.visit(this);
1082 				break;
1083 			case TypeEnum.L:
1084 				obj.list.visit(this);
1085 				break;
1086 		}
1087 		exit(obj);
1088 	}
1089 
1090 	void enter(ListType obj) {}
1091 	void exit(ListType obj) {}
1092 
1093 	void accept(ListType obj) {
1094 		enter(obj);
1095 		final switch(obj.ruleSelection) {
1096 			case ListTypeEnum.T:
1097 				obj.type.visit(this);
1098 				break;
1099 		}
1100 		exit(obj);
1101 	}
1102 
1103 	void enter(const(ListType) obj) {}
1104 	void exit(const(ListType) obj) {}
1105 
1106 	void accept(const(ListType) obj) {
1107 		enter(obj);
1108 		final switch(obj.ruleSelection) {
1109 			case ListTypeEnum.T:
1110 				obj.type.visit(this);
1111 				break;
1112 		}
1113 		exit(obj);
1114 	}
1115 
1116 	void enter(Values obj) {}
1117 	void exit(Values obj) {}
1118 
1119 	void accept(Values obj) {
1120 		enter(obj);
1121 		final switch(obj.ruleSelection) {
1122 			case ValuesEnum.Val:
1123 				obj.val.visit(this);
1124 				break;
1125 			case ValuesEnum.Vals:
1126 				obj.val.visit(this);
1127 				obj.follow.visit(this);
1128 				break;
1129 		}
1130 		exit(obj);
1131 	}
1132 
1133 	void enter(const(Values) obj) {}
1134 	void exit(const(Values) obj) {}
1135 
1136 	void accept(const(Values) obj) {
1137 		enter(obj);
1138 		final switch(obj.ruleSelection) {
1139 			case ValuesEnum.Val:
1140 				obj.val.visit(this);
1141 				break;
1142 			case ValuesEnum.Vals:
1143 				obj.val.visit(this);
1144 				obj.follow.visit(this);
1145 				break;
1146 		}
1147 		exit(obj);
1148 	}
1149 
1150 	void enter(Array obj) {}
1151 	void exit(Array obj) {}
1152 
1153 	void accept(Array obj) {
1154 		enter(obj);
1155 		final switch(obj.ruleSelection) {
1156 			case ArrayEnum.Empty:
1157 				break;
1158 			case ArrayEnum.Value:
1159 				obj.vals.visit(this);
1160 				break;
1161 		}
1162 		exit(obj);
1163 	}
1164 
1165 	void enter(const(Array) obj) {}
1166 	void exit(const(Array) obj) {}
1167 
1168 	void accept(const(Array) obj) {
1169 		enter(obj);
1170 		final switch(obj.ruleSelection) {
1171 			case ArrayEnum.Empty:
1172 				break;
1173 			case ArrayEnum.Value:
1174 				obj.vals.visit(this);
1175 				break;
1176 		}
1177 		exit(obj);
1178 	}
1179 
1180 	void enter(ObjectValues obj) {}
1181 	void exit(ObjectValues obj) {}
1182 
1183 	void accept(ObjectValues obj) {
1184 		enter(obj);
1185 		final switch(obj.ruleSelection) {
1186 			case ObjectValuesEnum.V:
1187 				obj.name.visit(this);
1188 				obj.val.visit(this);
1189 				break;
1190 			case ObjectValuesEnum.Vsc:
1191 				obj.name.visit(this);
1192 				obj.val.visit(this);
1193 				obj.follow.visit(this);
1194 				break;
1195 			case ObjectValuesEnum.Vs:
1196 				obj.name.visit(this);
1197 				obj.val.visit(this);
1198 				obj.follow.visit(this);
1199 				break;
1200 		}
1201 		exit(obj);
1202 	}
1203 
1204 	void enter(const(ObjectValues) obj) {}
1205 	void exit(const(ObjectValues) obj) {}
1206 
1207 	void accept(const(ObjectValues) obj) {
1208 		enter(obj);
1209 		final switch(obj.ruleSelection) {
1210 			case ObjectValuesEnum.V:
1211 				obj.name.visit(this);
1212 				obj.val.visit(this);
1213 				break;
1214 			case ObjectValuesEnum.Vsc:
1215 				obj.name.visit(this);
1216 				obj.val.visit(this);
1217 				obj.follow.visit(this);
1218 				break;
1219 			case ObjectValuesEnum.Vs:
1220 				obj.name.visit(this);
1221 				obj.val.visit(this);
1222 				obj.follow.visit(this);
1223 				break;
1224 		}
1225 		exit(obj);
1226 	}
1227 
1228 	void enter(ObjectType obj) {}
1229 	void exit(ObjectType obj) {}
1230 
1231 	void accept(ObjectType obj) {
1232 		enter(obj);
1233 		final switch(obj.ruleSelection) {
1234 			case ObjectTypeEnum.Var:
1235 				obj.vals.visit(this);
1236 				break;
1237 		}
1238 		exit(obj);
1239 	}
1240 
1241 	void enter(const(ObjectType) obj) {}
1242 	void exit(const(ObjectType) obj) {}
1243 
1244 	void accept(const(ObjectType) obj) {
1245 		enter(obj);
1246 		final switch(obj.ruleSelection) {
1247 			case ObjectTypeEnum.Var:
1248 				obj.vals.visit(this);
1249 				break;
1250 		}
1251 		exit(obj);
1252 	}
1253 
1254 	void enter(TypeSystemDefinition obj) {}
1255 	void exit(TypeSystemDefinition obj) {}
1256 
1257 	void accept(TypeSystemDefinition obj) {
1258 		enter(obj);
1259 		final switch(obj.ruleSelection) {
1260 			case TypeSystemDefinitionEnum.S:
1261 				obj.sch.visit(this);
1262 				break;
1263 			case TypeSystemDefinitionEnum.T:
1264 				obj.td.visit(this);
1265 				break;
1266 			case TypeSystemDefinitionEnum.TE:
1267 				obj.ted.visit(this);
1268 				break;
1269 			case TypeSystemDefinitionEnum.D:
1270 				obj.dd.visit(this);
1271 				break;
1272 		}
1273 		exit(obj);
1274 	}
1275 
1276 	void enter(const(TypeSystemDefinition) obj) {}
1277 	void exit(const(TypeSystemDefinition) obj) {}
1278 
1279 	void accept(const(TypeSystemDefinition) obj) {
1280 		enter(obj);
1281 		final switch(obj.ruleSelection) {
1282 			case TypeSystemDefinitionEnum.S:
1283 				obj.sch.visit(this);
1284 				break;
1285 			case TypeSystemDefinitionEnum.T:
1286 				obj.td.visit(this);
1287 				break;
1288 			case TypeSystemDefinitionEnum.TE:
1289 				obj.ted.visit(this);
1290 				break;
1291 			case TypeSystemDefinitionEnum.D:
1292 				obj.dd.visit(this);
1293 				break;
1294 		}
1295 		exit(obj);
1296 	}
1297 
1298 	void enter(TypeDefinition obj) {}
1299 	void exit(TypeDefinition obj) {}
1300 
1301 	void accept(TypeDefinition obj) {
1302 		enter(obj);
1303 		final switch(obj.ruleSelection) {
1304 			case TypeDefinitionEnum.S:
1305 				obj.std.visit(this);
1306 				break;
1307 			case TypeDefinitionEnum.O:
1308 				obj.otd.visit(this);
1309 				break;
1310 			case TypeDefinitionEnum.I:
1311 				obj.itd.visit(this);
1312 				break;
1313 			case TypeDefinitionEnum.U:
1314 				obj.utd.visit(this);
1315 				break;
1316 			case TypeDefinitionEnum.E:
1317 				obj.etd.visit(this);
1318 				break;
1319 			case TypeDefinitionEnum.IO:
1320 				obj.iod.visit(this);
1321 				break;
1322 		}
1323 		exit(obj);
1324 	}
1325 
1326 	void enter(const(TypeDefinition) obj) {}
1327 	void exit(const(TypeDefinition) obj) {}
1328 
1329 	void accept(const(TypeDefinition) obj) {
1330 		enter(obj);
1331 		final switch(obj.ruleSelection) {
1332 			case TypeDefinitionEnum.S:
1333 				obj.std.visit(this);
1334 				break;
1335 			case TypeDefinitionEnum.O:
1336 				obj.otd.visit(this);
1337 				break;
1338 			case TypeDefinitionEnum.I:
1339 				obj.itd.visit(this);
1340 				break;
1341 			case TypeDefinitionEnum.U:
1342 				obj.utd.visit(this);
1343 				break;
1344 			case TypeDefinitionEnum.E:
1345 				obj.etd.visit(this);
1346 				break;
1347 			case TypeDefinitionEnum.IO:
1348 				obj.iod.visit(this);
1349 				break;
1350 		}
1351 		exit(obj);
1352 	}
1353 
1354 	void enter(SchemaDefinition obj) {}
1355 	void exit(SchemaDefinition obj) {}
1356 
1357 	void accept(SchemaDefinition obj) {
1358 		enter(obj);
1359 		final switch(obj.ruleSelection) {
1360 			case SchemaDefinitionEnum.DO:
1361 				obj.dir.visit(this);
1362 				obj.otds.visit(this);
1363 				break;
1364 			case SchemaDefinitionEnum.O:
1365 				obj.otds.visit(this);
1366 				break;
1367 		}
1368 		exit(obj);
1369 	}
1370 
1371 	void enter(const(SchemaDefinition) obj) {}
1372 	void exit(const(SchemaDefinition) obj) {}
1373 
1374 	void accept(const(SchemaDefinition) obj) {
1375 		enter(obj);
1376 		final switch(obj.ruleSelection) {
1377 			case SchemaDefinitionEnum.DO:
1378 				obj.dir.visit(this);
1379 				obj.otds.visit(this);
1380 				break;
1381 			case SchemaDefinitionEnum.O:
1382 				obj.otds.visit(this);
1383 				break;
1384 		}
1385 		exit(obj);
1386 	}
1387 
1388 	void enter(OperationTypeDefinitions obj) {}
1389 	void exit(OperationTypeDefinitions obj) {}
1390 
1391 	void accept(OperationTypeDefinitions obj) {
1392 		enter(obj);
1393 		final switch(obj.ruleSelection) {
1394 			case OperationTypeDefinitionsEnum.O:
1395 				obj.otd.visit(this);
1396 				break;
1397 			case OperationTypeDefinitionsEnum.OCS:
1398 				obj.otd.visit(this);
1399 				obj.follow.visit(this);
1400 				break;
1401 			case OperationTypeDefinitionsEnum.OS:
1402 				obj.otd.visit(this);
1403 				obj.follow.visit(this);
1404 				break;
1405 		}
1406 		exit(obj);
1407 	}
1408 
1409 	void enter(const(OperationTypeDefinitions) obj) {}
1410 	void exit(const(OperationTypeDefinitions) obj) {}
1411 
1412 	void accept(const(OperationTypeDefinitions) obj) {
1413 		enter(obj);
1414 		final switch(obj.ruleSelection) {
1415 			case OperationTypeDefinitionsEnum.O:
1416 				obj.otd.visit(this);
1417 				break;
1418 			case OperationTypeDefinitionsEnum.OCS:
1419 				obj.otd.visit(this);
1420 				obj.follow.visit(this);
1421 				break;
1422 			case OperationTypeDefinitionsEnum.OS:
1423 				obj.otd.visit(this);
1424 				obj.follow.visit(this);
1425 				break;
1426 		}
1427 		exit(obj);
1428 	}
1429 
1430 	void enter(OperationTypeDefinition obj) {}
1431 	void exit(OperationTypeDefinition obj) {}
1432 
1433 	void accept(OperationTypeDefinition obj) {
1434 		enter(obj);
1435 		final switch(obj.ruleSelection) {
1436 			case OperationTypeDefinitionEnum.O:
1437 				obj.ot.visit(this);
1438 				obj.nt.visit(this);
1439 				break;
1440 		}
1441 		exit(obj);
1442 	}
1443 
1444 	void enter(const(OperationTypeDefinition) obj) {}
1445 	void exit(const(OperationTypeDefinition) obj) {}
1446 
1447 	void accept(const(OperationTypeDefinition) obj) {
1448 		enter(obj);
1449 		final switch(obj.ruleSelection) {
1450 			case OperationTypeDefinitionEnum.O:
1451 				obj.ot.visit(this);
1452 				obj.nt.visit(this);
1453 				break;
1454 		}
1455 		exit(obj);
1456 	}
1457 
1458 	void enter(ScalarTypeDefinition obj) {}
1459 	void exit(ScalarTypeDefinition obj) {}
1460 
1461 	void accept(ScalarTypeDefinition obj) {
1462 		enter(obj);
1463 		final switch(obj.ruleSelection) {
1464 			case ScalarTypeDefinitionEnum.D:
1465 				obj.name.visit(this);
1466 				obj.dir.visit(this);
1467 				break;
1468 			case ScalarTypeDefinitionEnum.S:
1469 				obj.name.visit(this);
1470 				break;
1471 		}
1472 		exit(obj);
1473 	}
1474 
1475 	void enter(const(ScalarTypeDefinition) obj) {}
1476 	void exit(const(ScalarTypeDefinition) obj) {}
1477 
1478 	void accept(const(ScalarTypeDefinition) obj) {
1479 		enter(obj);
1480 		final switch(obj.ruleSelection) {
1481 			case ScalarTypeDefinitionEnum.D:
1482 				obj.name.visit(this);
1483 				obj.dir.visit(this);
1484 				break;
1485 			case ScalarTypeDefinitionEnum.S:
1486 				obj.name.visit(this);
1487 				break;
1488 		}
1489 		exit(obj);
1490 	}
1491 
1492 	void enter(ObjectTypeDefinition obj) {}
1493 	void exit(ObjectTypeDefinition obj) {}
1494 
1495 	void accept(ObjectTypeDefinition obj) {
1496 		enter(obj);
1497 		final switch(obj.ruleSelection) {
1498 			case ObjectTypeDefinitionEnum.ID:
1499 				obj.name.visit(this);
1500 				obj.ii.visit(this);
1501 				obj.dir.visit(this);
1502 				obj.fds.visit(this);
1503 				break;
1504 			case ObjectTypeDefinitionEnum.I:
1505 				obj.name.visit(this);
1506 				obj.ii.visit(this);
1507 				obj.fds.visit(this);
1508 				break;
1509 			case ObjectTypeDefinitionEnum.D:
1510 				obj.name.visit(this);
1511 				obj.dir.visit(this);
1512 				obj.fds.visit(this);
1513 				break;
1514 			case ObjectTypeDefinitionEnum.F:
1515 				obj.name.visit(this);
1516 				obj.fds.visit(this);
1517 				break;
1518 		}
1519 		exit(obj);
1520 	}
1521 
1522 	void enter(const(ObjectTypeDefinition) obj) {}
1523 	void exit(const(ObjectTypeDefinition) obj) {}
1524 
1525 	void accept(const(ObjectTypeDefinition) obj) {
1526 		enter(obj);
1527 		final switch(obj.ruleSelection) {
1528 			case ObjectTypeDefinitionEnum.ID:
1529 				obj.name.visit(this);
1530 				obj.ii.visit(this);
1531 				obj.dir.visit(this);
1532 				obj.fds.visit(this);
1533 				break;
1534 			case ObjectTypeDefinitionEnum.I:
1535 				obj.name.visit(this);
1536 				obj.ii.visit(this);
1537 				obj.fds.visit(this);
1538 				break;
1539 			case ObjectTypeDefinitionEnum.D:
1540 				obj.name.visit(this);
1541 				obj.dir.visit(this);
1542 				obj.fds.visit(this);
1543 				break;
1544 			case ObjectTypeDefinitionEnum.F:
1545 				obj.name.visit(this);
1546 				obj.fds.visit(this);
1547 				break;
1548 		}
1549 		exit(obj);
1550 	}
1551 
1552 	void enter(FieldDefinitions obj) {}
1553 	void exit(FieldDefinitions obj) {}
1554 
1555 	void accept(FieldDefinitions obj) {
1556 		enter(obj);
1557 		final switch(obj.ruleSelection) {
1558 			case FieldDefinitionsEnum.F:
1559 				obj.fd.visit(this);
1560 				break;
1561 			case FieldDefinitionsEnum.FC:
1562 				obj.fd.visit(this);
1563 				obj.follow.visit(this);
1564 				break;
1565 			case FieldDefinitionsEnum.FNC:
1566 				obj.fd.visit(this);
1567 				obj.follow.visit(this);
1568 				break;
1569 		}
1570 		exit(obj);
1571 	}
1572 
1573 	void enter(const(FieldDefinitions) obj) {}
1574 	void exit(const(FieldDefinitions) obj) {}
1575 
1576 	void accept(const(FieldDefinitions) obj) {
1577 		enter(obj);
1578 		final switch(obj.ruleSelection) {
1579 			case FieldDefinitionsEnum.F:
1580 				obj.fd.visit(this);
1581 				break;
1582 			case FieldDefinitionsEnum.FC:
1583 				obj.fd.visit(this);
1584 				obj.follow.visit(this);
1585 				break;
1586 			case FieldDefinitionsEnum.FNC:
1587 				obj.fd.visit(this);
1588 				obj.follow.visit(this);
1589 				break;
1590 		}
1591 		exit(obj);
1592 	}
1593 
1594 	void enter(FieldDefinition obj) {}
1595 	void exit(FieldDefinition obj) {}
1596 
1597 	void accept(FieldDefinition obj) {
1598 		enter(obj);
1599 		final switch(obj.ruleSelection) {
1600 			case FieldDefinitionEnum.AD:
1601 				obj.name.visit(this);
1602 				obj.arg.visit(this);
1603 				obj.typ.visit(this);
1604 				obj.dir.visit(this);
1605 				break;
1606 			case FieldDefinitionEnum.A:
1607 				obj.name.visit(this);
1608 				obj.arg.visit(this);
1609 				obj.typ.visit(this);
1610 				break;
1611 			case FieldDefinitionEnum.D:
1612 				obj.name.visit(this);
1613 				obj.typ.visit(this);
1614 				obj.dir.visit(this);
1615 				break;
1616 			case FieldDefinitionEnum.T:
1617 				obj.name.visit(this);
1618 				obj.typ.visit(this);
1619 				break;
1620 		}
1621 		exit(obj);
1622 	}
1623 
1624 	void enter(const(FieldDefinition) obj) {}
1625 	void exit(const(FieldDefinition) obj) {}
1626 
1627 	void accept(const(FieldDefinition) obj) {
1628 		enter(obj);
1629 		final switch(obj.ruleSelection) {
1630 			case FieldDefinitionEnum.AD:
1631 				obj.name.visit(this);
1632 				obj.arg.visit(this);
1633 				obj.typ.visit(this);
1634 				obj.dir.visit(this);
1635 				break;
1636 			case FieldDefinitionEnum.A:
1637 				obj.name.visit(this);
1638 				obj.arg.visit(this);
1639 				obj.typ.visit(this);
1640 				break;
1641 			case FieldDefinitionEnum.D:
1642 				obj.name.visit(this);
1643 				obj.typ.visit(this);
1644 				obj.dir.visit(this);
1645 				break;
1646 			case FieldDefinitionEnum.T:
1647 				obj.name.visit(this);
1648 				obj.typ.visit(this);
1649 				break;
1650 		}
1651 		exit(obj);
1652 	}
1653 
1654 	void enter(ImplementsInterfaces obj) {}
1655 	void exit(ImplementsInterfaces obj) {}
1656 
1657 	void accept(ImplementsInterfaces obj) {
1658 		enter(obj);
1659 		final switch(obj.ruleSelection) {
1660 			case ImplementsInterfacesEnum.N:
1661 				obj.nts.visit(this);
1662 				break;
1663 		}
1664 		exit(obj);
1665 	}
1666 
1667 	void enter(const(ImplementsInterfaces) obj) {}
1668 	void exit(const(ImplementsInterfaces) obj) {}
1669 
1670 	void accept(const(ImplementsInterfaces) obj) {
1671 		enter(obj);
1672 		final switch(obj.ruleSelection) {
1673 			case ImplementsInterfacesEnum.N:
1674 				obj.nts.visit(this);
1675 				break;
1676 		}
1677 		exit(obj);
1678 	}
1679 
1680 	void enter(NamedTypes obj) {}
1681 	void exit(NamedTypes obj) {}
1682 
1683 	void accept(NamedTypes obj) {
1684 		enter(obj);
1685 		final switch(obj.ruleSelection) {
1686 			case NamedTypesEnum.N:
1687 				obj.name.visit(this);
1688 				break;
1689 			case NamedTypesEnum.NCS:
1690 				obj.name.visit(this);
1691 				obj.follow.visit(this);
1692 				break;
1693 			case NamedTypesEnum.NS:
1694 				obj.name.visit(this);
1695 				obj.follow.visit(this);
1696 				break;
1697 		}
1698 		exit(obj);
1699 	}
1700 
1701 	void enter(const(NamedTypes) obj) {}
1702 	void exit(const(NamedTypes) obj) {}
1703 
1704 	void accept(const(NamedTypes) obj) {
1705 		enter(obj);
1706 		final switch(obj.ruleSelection) {
1707 			case NamedTypesEnum.N:
1708 				obj.name.visit(this);
1709 				break;
1710 			case NamedTypesEnum.NCS:
1711 				obj.name.visit(this);
1712 				obj.follow.visit(this);
1713 				break;
1714 			case NamedTypesEnum.NS:
1715 				obj.name.visit(this);
1716 				obj.follow.visit(this);
1717 				break;
1718 		}
1719 		exit(obj);
1720 	}
1721 
1722 	void enter(ArgumentsDefinition obj) {}
1723 	void exit(ArgumentsDefinition obj) {}
1724 
1725 	void accept(ArgumentsDefinition obj) {
1726 		enter(obj);
1727 		final switch(obj.ruleSelection) {
1728 			case ArgumentsDefinitionEnum.A:
1729 				break;
1730 		}
1731 		exit(obj);
1732 	}
1733 
1734 	void enter(const(ArgumentsDefinition) obj) {}
1735 	void exit(const(ArgumentsDefinition) obj) {}
1736 
1737 	void accept(const(ArgumentsDefinition) obj) {
1738 		enter(obj);
1739 		final switch(obj.ruleSelection) {
1740 			case ArgumentsDefinitionEnum.A:
1741 				break;
1742 		}
1743 		exit(obj);
1744 	}
1745 
1746 	void enter(InputValueDefinitions obj) {}
1747 	void exit(InputValueDefinitions obj) {}
1748 
1749 	void accept(InputValueDefinitions obj) {
1750 		enter(obj);
1751 		final switch(obj.ruleSelection) {
1752 			case InputValueDefinitionsEnum.I:
1753 				obj.iv.visit(this);
1754 				break;
1755 			case InputValueDefinitionsEnum.ICF:
1756 				obj.iv.visit(this);
1757 				obj.follow.visit(this);
1758 				break;
1759 			case InputValueDefinitionsEnum.IF:
1760 				obj.iv.visit(this);
1761 				obj.follow.visit(this);
1762 				break;
1763 		}
1764 		exit(obj);
1765 	}
1766 
1767 	void enter(const(InputValueDefinitions) obj) {}
1768 	void exit(const(InputValueDefinitions) obj) {}
1769 
1770 	void accept(const(InputValueDefinitions) obj) {
1771 		enter(obj);
1772 		final switch(obj.ruleSelection) {
1773 			case InputValueDefinitionsEnum.I:
1774 				obj.iv.visit(this);
1775 				break;
1776 			case InputValueDefinitionsEnum.ICF:
1777 				obj.iv.visit(this);
1778 				obj.follow.visit(this);
1779 				break;
1780 			case InputValueDefinitionsEnum.IF:
1781 				obj.iv.visit(this);
1782 				obj.follow.visit(this);
1783 				break;
1784 		}
1785 		exit(obj);
1786 	}
1787 
1788 	void enter(InputValueDefinition obj) {}
1789 	void exit(InputValueDefinition obj) {}
1790 
1791 	void accept(InputValueDefinition obj) {
1792 		enter(obj);
1793 		final switch(obj.ruleSelection) {
1794 			case InputValueDefinitionEnum.TVD:
1795 				obj.name.visit(this);
1796 				obj.type.visit(this);
1797 				obj.df.visit(this);
1798 				obj.dirs.visit(this);
1799 				break;
1800 			case InputValueDefinitionEnum.TD:
1801 				obj.name.visit(this);
1802 				obj.type.visit(this);
1803 				obj.dirs.visit(this);
1804 				break;
1805 			case InputValueDefinitionEnum.TV:
1806 				obj.name.visit(this);
1807 				obj.type.visit(this);
1808 				obj.df.visit(this);
1809 				break;
1810 			case InputValueDefinitionEnum.T:
1811 				obj.name.visit(this);
1812 				obj.type.visit(this);
1813 				break;
1814 		}
1815 		exit(obj);
1816 	}
1817 
1818 	void enter(const(InputValueDefinition) obj) {}
1819 	void exit(const(InputValueDefinition) obj) {}
1820 
1821 	void accept(const(InputValueDefinition) obj) {
1822 		enter(obj);
1823 		final switch(obj.ruleSelection) {
1824 			case InputValueDefinitionEnum.TVD:
1825 				obj.name.visit(this);
1826 				obj.type.visit(this);
1827 				obj.df.visit(this);
1828 				obj.dirs.visit(this);
1829 				break;
1830 			case InputValueDefinitionEnum.TD:
1831 				obj.name.visit(this);
1832 				obj.type.visit(this);
1833 				obj.dirs.visit(this);
1834 				break;
1835 			case InputValueDefinitionEnum.TV:
1836 				obj.name.visit(this);
1837 				obj.type.visit(this);
1838 				obj.df.visit(this);
1839 				break;
1840 			case InputValueDefinitionEnum.T:
1841 				obj.name.visit(this);
1842 				obj.type.visit(this);
1843 				break;
1844 		}
1845 		exit(obj);
1846 	}
1847 
1848 	void enter(InterfaceTypeDefinition obj) {}
1849 	void exit(InterfaceTypeDefinition obj) {}
1850 
1851 	void accept(InterfaceTypeDefinition obj) {
1852 		enter(obj);
1853 		final switch(obj.ruleSelection) {
1854 			case InterfaceTypeDefinitionEnum.NDF:
1855 				obj.name.visit(this);
1856 				obj.dirs.visit(this);
1857 				obj.fds.visit(this);
1858 				break;
1859 			case InterfaceTypeDefinitionEnum.NF:
1860 				obj.name.visit(this);
1861 				obj.fds.visit(this);
1862 				break;
1863 		}
1864 		exit(obj);
1865 	}
1866 
1867 	void enter(const(InterfaceTypeDefinition) obj) {}
1868 	void exit(const(InterfaceTypeDefinition) obj) {}
1869 
1870 	void accept(const(InterfaceTypeDefinition) obj) {
1871 		enter(obj);
1872 		final switch(obj.ruleSelection) {
1873 			case InterfaceTypeDefinitionEnum.NDF:
1874 				obj.name.visit(this);
1875 				obj.dirs.visit(this);
1876 				obj.fds.visit(this);
1877 				break;
1878 			case InterfaceTypeDefinitionEnum.NF:
1879 				obj.name.visit(this);
1880 				obj.fds.visit(this);
1881 				break;
1882 		}
1883 		exit(obj);
1884 	}
1885 
1886 	void enter(UnionTypeDefinition obj) {}
1887 	void exit(UnionTypeDefinition obj) {}
1888 
1889 	void accept(UnionTypeDefinition obj) {
1890 		enter(obj);
1891 		final switch(obj.ruleSelection) {
1892 			case UnionTypeDefinitionEnum.NDU:
1893 				obj.name.visit(this);
1894 				obj.dirs.visit(this);
1895 				obj.um.visit(this);
1896 				break;
1897 			case UnionTypeDefinitionEnum.NU:
1898 				obj.name.visit(this);
1899 				obj.um.visit(this);
1900 				break;
1901 		}
1902 		exit(obj);
1903 	}
1904 
1905 	void enter(const(UnionTypeDefinition) obj) {}
1906 	void exit(const(UnionTypeDefinition) obj) {}
1907 
1908 	void accept(const(UnionTypeDefinition) obj) {
1909 		enter(obj);
1910 		final switch(obj.ruleSelection) {
1911 			case UnionTypeDefinitionEnum.NDU:
1912 				obj.name.visit(this);
1913 				obj.dirs.visit(this);
1914 				obj.um.visit(this);
1915 				break;
1916 			case UnionTypeDefinitionEnum.NU:
1917 				obj.name.visit(this);
1918 				obj.um.visit(this);
1919 				break;
1920 		}
1921 		exit(obj);
1922 	}
1923 
1924 	void enter(UnionMembers obj) {}
1925 	void exit(UnionMembers obj) {}
1926 
1927 	void accept(UnionMembers obj) {
1928 		enter(obj);
1929 		final switch(obj.ruleSelection) {
1930 			case UnionMembersEnum.S:
1931 				obj.name.visit(this);
1932 				break;
1933 			case UnionMembersEnum.SPF:
1934 				obj.name.visit(this);
1935 				obj.follow.visit(this);
1936 				break;
1937 			case UnionMembersEnum.SF:
1938 				obj.name.visit(this);
1939 				obj.follow.visit(this);
1940 				break;
1941 		}
1942 		exit(obj);
1943 	}
1944 
1945 	void enter(const(UnionMembers) obj) {}
1946 	void exit(const(UnionMembers) obj) {}
1947 
1948 	void accept(const(UnionMembers) obj) {
1949 		enter(obj);
1950 		final switch(obj.ruleSelection) {
1951 			case UnionMembersEnum.S:
1952 				obj.name.visit(this);
1953 				break;
1954 			case UnionMembersEnum.SPF:
1955 				obj.name.visit(this);
1956 				obj.follow.visit(this);
1957 				break;
1958 			case UnionMembersEnum.SF:
1959 				obj.name.visit(this);
1960 				obj.follow.visit(this);
1961 				break;
1962 		}
1963 		exit(obj);
1964 	}
1965 
1966 	void enter(EnumTypeDefinition obj) {}
1967 	void exit(EnumTypeDefinition obj) {}
1968 
1969 	void accept(EnumTypeDefinition obj) {
1970 		enter(obj);
1971 		final switch(obj.ruleSelection) {
1972 			case EnumTypeDefinitionEnum.NDE:
1973 				obj.name.visit(this);
1974 				obj.dir.visit(this);
1975 				obj.evds.visit(this);
1976 				break;
1977 			case EnumTypeDefinitionEnum.NE:
1978 				obj.name.visit(this);
1979 				obj.evds.visit(this);
1980 				break;
1981 		}
1982 		exit(obj);
1983 	}
1984 
1985 	void enter(const(EnumTypeDefinition) obj) {}
1986 	void exit(const(EnumTypeDefinition) obj) {}
1987 
1988 	void accept(const(EnumTypeDefinition) obj) {
1989 		enter(obj);
1990 		final switch(obj.ruleSelection) {
1991 			case EnumTypeDefinitionEnum.NDE:
1992 				obj.name.visit(this);
1993 				obj.dir.visit(this);
1994 				obj.evds.visit(this);
1995 				break;
1996 			case EnumTypeDefinitionEnum.NE:
1997 				obj.name.visit(this);
1998 				obj.evds.visit(this);
1999 				break;
2000 		}
2001 		exit(obj);
2002 	}
2003 
2004 	void enter(EnumValueDefinitions obj) {}
2005 	void exit(EnumValueDefinitions obj) {}
2006 
2007 	void accept(EnumValueDefinitions obj) {
2008 		enter(obj);
2009 		final switch(obj.ruleSelection) {
2010 			case EnumValueDefinitionsEnum.D:
2011 				obj.evd.visit(this);
2012 				break;
2013 			case EnumValueDefinitionsEnum.DCE:
2014 				obj.evd.visit(this);
2015 				obj.follow.visit(this);
2016 				break;
2017 			case EnumValueDefinitionsEnum.DE:
2018 				obj.evd.visit(this);
2019 				obj.follow.visit(this);
2020 				break;
2021 		}
2022 		exit(obj);
2023 	}
2024 
2025 	void enter(const(EnumValueDefinitions) obj) {}
2026 	void exit(const(EnumValueDefinitions) obj) {}
2027 
2028 	void accept(const(EnumValueDefinitions) obj) {
2029 		enter(obj);
2030 		final switch(obj.ruleSelection) {
2031 			case EnumValueDefinitionsEnum.D:
2032 				obj.evd.visit(this);
2033 				break;
2034 			case EnumValueDefinitionsEnum.DCE:
2035 				obj.evd.visit(this);
2036 				obj.follow.visit(this);
2037 				break;
2038 			case EnumValueDefinitionsEnum.DE:
2039 				obj.evd.visit(this);
2040 				obj.follow.visit(this);
2041 				break;
2042 		}
2043 		exit(obj);
2044 	}
2045 
2046 	void enter(EnumValueDefinition obj) {}
2047 	void exit(EnumValueDefinition obj) {}
2048 
2049 	void accept(EnumValueDefinition obj) {
2050 		enter(obj);
2051 		final switch(obj.ruleSelection) {
2052 			case EnumValueDefinitionEnum.ED:
2053 				obj.name.visit(this);
2054 				obj.dirs.visit(this);
2055 				break;
2056 			case EnumValueDefinitionEnum.E:
2057 				obj.name.visit(this);
2058 				break;
2059 		}
2060 		exit(obj);
2061 	}
2062 
2063 	void enter(const(EnumValueDefinition) obj) {}
2064 	void exit(const(EnumValueDefinition) obj) {}
2065 
2066 	void accept(const(EnumValueDefinition) obj) {
2067 		enter(obj);
2068 		final switch(obj.ruleSelection) {
2069 			case EnumValueDefinitionEnum.ED:
2070 				obj.name.visit(this);
2071 				obj.dirs.visit(this);
2072 				break;
2073 			case EnumValueDefinitionEnum.E:
2074 				obj.name.visit(this);
2075 				break;
2076 		}
2077 		exit(obj);
2078 	}
2079 
2080 	void enter(InputTypeDefinition obj) {}
2081 	void exit(InputTypeDefinition obj) {}
2082 
2083 	void accept(InputTypeDefinition obj) {
2084 		enter(obj);
2085 		final switch(obj.ruleSelection) {
2086 			case InputTypeDefinitionEnum.NDE:
2087 				obj.name.visit(this);
2088 				obj.dir.visit(this);
2089 				obj.ivds.visit(this);
2090 				break;
2091 			case InputTypeDefinitionEnum.NE:
2092 				obj.name.visit(this);
2093 				obj.ivds.visit(this);
2094 				break;
2095 		}
2096 		exit(obj);
2097 	}
2098 
2099 	void enter(const(InputTypeDefinition) obj) {}
2100 	void exit(const(InputTypeDefinition) obj) {}
2101 
2102 	void accept(const(InputTypeDefinition) obj) {
2103 		enter(obj);
2104 		final switch(obj.ruleSelection) {
2105 			case InputTypeDefinitionEnum.NDE:
2106 				obj.name.visit(this);
2107 				obj.dir.visit(this);
2108 				obj.ivds.visit(this);
2109 				break;
2110 			case InputTypeDefinitionEnum.NE:
2111 				obj.name.visit(this);
2112 				obj.ivds.visit(this);
2113 				break;
2114 		}
2115 		exit(obj);
2116 	}
2117 
2118 	void enter(TypeExtensionDefinition obj) {}
2119 	void exit(TypeExtensionDefinition obj) {}
2120 
2121 	void accept(TypeExtensionDefinition obj) {
2122 		enter(obj);
2123 		final switch(obj.ruleSelection) {
2124 			case TypeExtensionDefinitionEnum.O:
2125 				obj.otd.visit(this);
2126 				break;
2127 		}
2128 		exit(obj);
2129 	}
2130 
2131 	void enter(const(TypeExtensionDefinition) obj) {}
2132 	void exit(const(TypeExtensionDefinition) obj) {}
2133 
2134 	void accept(const(TypeExtensionDefinition) obj) {
2135 		enter(obj);
2136 		final switch(obj.ruleSelection) {
2137 			case TypeExtensionDefinitionEnum.O:
2138 				obj.otd.visit(this);
2139 				break;
2140 		}
2141 		exit(obj);
2142 	}
2143 
2144 	void enter(DirectiveDefinition obj) {}
2145 	void exit(DirectiveDefinition obj) {}
2146 
2147 	void accept(DirectiveDefinition obj) {
2148 		enter(obj);
2149 		final switch(obj.ruleSelection) {
2150 			case DirectiveDefinitionEnum.AD:
2151 				obj.name.visit(this);
2152 				obj.ad.visit(this);
2153 				obj.dl.visit(this);
2154 				break;
2155 			case DirectiveDefinitionEnum.D:
2156 				obj.name.visit(this);
2157 				obj.dl.visit(this);
2158 				break;
2159 		}
2160 		exit(obj);
2161 	}
2162 
2163 	void enter(const(DirectiveDefinition) obj) {}
2164 	void exit(const(DirectiveDefinition) obj) {}
2165 
2166 	void accept(const(DirectiveDefinition) obj) {
2167 		enter(obj);
2168 		final switch(obj.ruleSelection) {
2169 			case DirectiveDefinitionEnum.AD:
2170 				obj.name.visit(this);
2171 				obj.ad.visit(this);
2172 				obj.dl.visit(this);
2173 				break;
2174 			case DirectiveDefinitionEnum.D:
2175 				obj.name.visit(this);
2176 				obj.dl.visit(this);
2177 				break;
2178 		}
2179 		exit(obj);
2180 	}
2181 
2182 	void enter(DirectiveLocations obj) {}
2183 	void exit(DirectiveLocations obj) {}
2184 
2185 	void accept(DirectiveLocations obj) {
2186 		enter(obj);
2187 		final switch(obj.ruleSelection) {
2188 			case DirectiveLocationsEnum.N:
2189 				obj.name.visit(this);
2190 				break;
2191 			case DirectiveLocationsEnum.NPF:
2192 				obj.name.visit(this);
2193 				obj.follow.visit(this);
2194 				break;
2195 			case DirectiveLocationsEnum.NF:
2196 				obj.name.visit(this);
2197 				obj.follow.visit(this);
2198 				break;
2199 		}
2200 		exit(obj);
2201 	}
2202 
2203 	void enter(const(DirectiveLocations) obj) {}
2204 	void exit(const(DirectiveLocations) obj) {}
2205 
2206 	void accept(const(DirectiveLocations) obj) {
2207 		enter(obj);
2208 		final switch(obj.ruleSelection) {
2209 			case DirectiveLocationsEnum.N:
2210 				obj.name.visit(this);
2211 				break;
2212 			case DirectiveLocationsEnum.NPF:
2213 				obj.name.visit(this);
2214 				obj.follow.visit(this);
2215 				break;
2216 			case DirectiveLocationsEnum.NF:
2217 				obj.name.visit(this);
2218 				obj.follow.visit(this);
2219 				break;
2220 		}
2221 		exit(obj);
2222 	}
2223 
2224 	void enter(InputObjectTypeDefinition obj) {}
2225 	void exit(InputObjectTypeDefinition obj) {}
2226 
2227 	void accept(InputObjectTypeDefinition obj) {
2228 		enter(obj);
2229 		final switch(obj.ruleSelection) {
2230 			case InputObjectTypeDefinitionEnum.NDI:
2231 				obj.name.visit(this);
2232 				obj.dirs.visit(this);
2233 				break;
2234 			case InputObjectTypeDefinitionEnum.NI:
2235 				obj.name.visit(this);
2236 				break;
2237 		}
2238 		exit(obj);
2239 	}
2240 
2241 	void enter(const(InputObjectTypeDefinition) obj) {}
2242 	void exit(const(InputObjectTypeDefinition) obj) {}
2243 
2244 	void accept(const(InputObjectTypeDefinition) obj) {
2245 		enter(obj);
2246 		final switch(obj.ruleSelection) {
2247 			case InputObjectTypeDefinitionEnum.NDI:
2248 				obj.name.visit(this);
2249 				obj.dirs.visit(this);
2250 				break;
2251 			case InputObjectTypeDefinitionEnum.NI:
2252 				obj.name.visit(this);
2253 				break;
2254 		}
2255 		exit(obj);
2256 	}
2257 }