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