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