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