1 module dud.sdlang.ast;
2
3 import dud.sdlang.tokenmodule;
4
5 import dud.sdlang.visitor;
6
7 @safe pure:
8
9 class Node {}
10
11 enum RootEnum {
12 T,
13 TT,
14 E,
15 }
16
17 class Root : Node {
18 @safe pure:
19
20 RootEnum ruleSelection;
21 Tags tags;
22
23 this(RootEnum ruleSelection, Tags tags) {
24 this.ruleSelection = ruleSelection;
25 this.tags = tags;
26 }
27
28 this(RootEnum ruleSelection) {
29 this.ruleSelection = ruleSelection;
30 }
31
32 void visit(Visitor vis) {
33 vis.accept(this);
34 }
35
36 void visit(Visitor vis) const {
37 vis.accept(this);
38 }
39
40 void visit(ConstVisitor vis) {
41 vis.accept(this);
42 }
43
44 void visit(ConstVisitor vis) const {
45 vis.accept(this);
46 }
47 }
48
49 enum TagsEnum {
50 Tag,
51 TagFollow,
52 }
53
54 class Tags : Node {
55 @safe pure:
56
57 TagsEnum ruleSelection;
58 Tags follow;
59 Tag cur;
60
61 this(TagsEnum ruleSelection, Tag cur) {
62 this.ruleSelection = ruleSelection;
63 this.cur = cur;
64 }
65
66 this(TagsEnum ruleSelection, Tag cur, Tags follow) {
67 this.ruleSelection = ruleSelection;
68 this.cur = cur;
69 this.follow = follow;
70 }
71
72 void visit(Visitor vis) {
73 vis.accept(this);
74 }
75
76 void visit(Visitor vis) const {
77 vis.accept(this);
78 }
79
80 void visit(ConstVisitor vis) {
81 vis.accept(this);
82 }
83
84 void visit(ConstVisitor vis) const {
85 vis.accept(this);
86 }
87 }
88
89 enum TagEnum {
90 IVAO,
91 IAO,
92 IVO,
93 IVA,
94 IO,
95 IA,
96 IV,
97 IE,
98 IVAOT,
99 IAOT,
100 IVOT,
101 IVAT,
102 IOT,
103 IAT,
104 IVT,
105 IET,
106 VAO,
107 VO,
108 VA,
109 O,
110 V,
111 VAOT,
112 VOT,
113 VAT,
114 OT,
115 VT,
116 }
117
118 class Tag : Node {
119 @safe pure:
120
121 TagEnum ruleSelection;
122 OptChild oc;
123 IDFull id;
124 Values vals;
125 Attributes attrs;
126
127 this(TagEnum ruleSelection, IDFull id, Values vals, Attributes attrs, OptChild oc) {
128 this.ruleSelection = ruleSelection;
129 this.id = id;
130 this.vals = vals;
131 this.attrs = attrs;
132 this.oc = oc;
133 }
134
135 this(TagEnum ruleSelection, IDFull id, Attributes attrs, OptChild oc) {
136 this.ruleSelection = ruleSelection;
137 this.id = id;
138 this.attrs = attrs;
139 this.oc = oc;
140 }
141
142 this(TagEnum ruleSelection, IDFull id, Values vals, OptChild oc) {
143 this.ruleSelection = ruleSelection;
144 this.id = id;
145 this.vals = vals;
146 this.oc = oc;
147 }
148
149 this(TagEnum ruleSelection, IDFull id, Values vals, Attributes attrs) {
150 this.ruleSelection = ruleSelection;
151 this.id = id;
152 this.vals = vals;
153 this.attrs = attrs;
154 }
155
156 this(TagEnum ruleSelection, IDFull id, OptChild oc) {
157 this.ruleSelection = ruleSelection;
158 this.id = id;
159 this.oc = oc;
160 }
161
162 this(TagEnum ruleSelection, IDFull id, Attributes attrs) {
163 this.ruleSelection = ruleSelection;
164 this.id = id;
165 this.attrs = attrs;
166 }
167
168 this(TagEnum ruleSelection, IDFull id, Values vals) {
169 this.ruleSelection = ruleSelection;
170 this.id = id;
171 this.vals = vals;
172 }
173
174 this(TagEnum ruleSelection, IDFull id) {
175 this.ruleSelection = ruleSelection;
176 this.id = id;
177 }
178
179 this(TagEnum ruleSelection, Values vals, Attributes attrs, OptChild oc) {
180 this.ruleSelection = ruleSelection;
181 this.vals = vals;
182 this.attrs = attrs;
183 this.oc = oc;
184 }
185
186 this(TagEnum ruleSelection, Values vals, OptChild oc) {
187 this.ruleSelection = ruleSelection;
188 this.vals = vals;
189 this.oc = oc;
190 }
191
192 this(TagEnum ruleSelection, Values vals, Attributes attrs) {
193 this.ruleSelection = ruleSelection;
194 this.vals = vals;
195 this.attrs = attrs;
196 }
197
198 this(TagEnum ruleSelection, OptChild oc) {
199 this.ruleSelection = ruleSelection;
200 this.oc = oc;
201 }
202
203 this(TagEnum ruleSelection, Values vals) {
204 this.ruleSelection = ruleSelection;
205 this.vals = vals;
206 }
207
208 void visit(Visitor vis) {
209 vis.accept(this);
210 }
211
212 void visit(Visitor vis) const {
213 vis.accept(this);
214 }
215
216 void visit(ConstVisitor vis) {
217 vis.accept(this);
218 }
219
220 void visit(ConstVisitor vis) const {
221 vis.accept(this);
222 }
223 }
224
225 enum IDFullEnum {
226 S,
227 L,
228 }
229
230 class IDFull : Node {
231 @safe pure:
232
233 IDFullEnum ruleSelection;
234 IDFull follow;
235 Token cur;
236
237 this(IDFullEnum ruleSelection, Token cur) {
238 this.ruleSelection = ruleSelection;
239 this.cur = cur;
240 }
241
242 this(IDFullEnum ruleSelection, Token cur, IDFull follow) {
243 this.ruleSelection = ruleSelection;
244 this.cur = cur;
245 this.follow = follow;
246 }
247
248 void visit(Visitor vis) {
249 vis.accept(this);
250 }
251
252 void visit(Visitor vis) const {
253 vis.accept(this);
254 }
255
256 void visit(ConstVisitor vis) {
257 vis.accept(this);
258 }
259
260 void visit(ConstVisitor vis) const {
261 vis.accept(this);
262 }
263 }
264
265 enum ValuesEnum {
266 Value,
267 ValueFollow,
268 }
269
270 class Values : Node {
271 @safe pure:
272
273 ValuesEnum ruleSelection;
274 Values follow;
275 Token cur;
276
277 this(ValuesEnum ruleSelection, Token cur) {
278 this.ruleSelection = ruleSelection;
279 this.cur = cur;
280 }
281
282 this(ValuesEnum ruleSelection, Token cur, Values follow) {
283 this.ruleSelection = ruleSelection;
284 this.cur = cur;
285 this.follow = follow;
286 }
287
288 void visit(Visitor vis) {
289 vis.accept(this);
290 }
291
292 void visit(Visitor vis) const {
293 vis.accept(this);
294 }
295
296 void visit(ConstVisitor vis) {
297 vis.accept(this);
298 }
299
300 void visit(ConstVisitor vis) const {
301 vis.accept(this);
302 }
303 }
304
305 enum AttributesEnum {
306 Attribute,
307 AttributeFollow,
308 }
309
310 class Attributes : Node {
311 @safe pure:
312
313 AttributesEnum ruleSelection;
314 Attributes follow;
315 Attribute cur;
316
317 this(AttributesEnum ruleSelection, Attribute cur) {
318 this.ruleSelection = ruleSelection;
319 this.cur = cur;
320 }
321
322 this(AttributesEnum ruleSelection, Attribute cur, Attributes follow) {
323 this.ruleSelection = ruleSelection;
324 this.cur = cur;
325 this.follow = follow;
326 }
327
328 void visit(Visitor vis) {
329 vis.accept(this);
330 }
331
332 void visit(Visitor vis) const {
333 vis.accept(this);
334 }
335
336 void visit(ConstVisitor vis) {
337 vis.accept(this);
338 }
339
340 void visit(ConstVisitor vis) const {
341 vis.accept(this);
342 }
343 }
344
345 enum AttributeEnum {
346 A,
347 }
348
349 class Attribute : Node {
350 @safe pure:
351
352 AttributeEnum ruleSelection;
353 Token value;
354 IDFull id;
355
356 this(AttributeEnum ruleSelection, IDFull id, Token value) {
357 this.ruleSelection = ruleSelection;
358 this.id = id;
359 this.value = value;
360 }
361
362 void visit(Visitor vis) {
363 vis.accept(this);
364 }
365
366 void visit(Visitor vis) const {
367 vis.accept(this);
368 }
369
370 void visit(ConstVisitor vis) {
371 vis.accept(this);
372 }
373
374 void visit(ConstVisitor vis) const {
375 vis.accept(this);
376 }
377 }
378
379 enum OptChildEnum {
380 T,
381 E,
382 E2,
383 }
384
385 class OptChild : Node {
386 @safe pure:
387
388 OptChildEnum ruleSelection;
389 Tags tags;
390
391 this(OptChildEnum ruleSelection, Tags tags) {
392 this.ruleSelection = ruleSelection;
393 this.tags = tags;
394 }
395
396 this(OptChildEnum ruleSelection) {
397 this.ruleSelection = ruleSelection;
398 }
399
400 void visit(Visitor vis) {
401 vis.accept(this);
402 }
403
404 void visit(Visitor vis) const {
405 vis.accept(this);
406 }
407
408 void visit(ConstVisitor vis) {
409 vis.accept(this);
410 }
411
412 void visit(ConstVisitor vis) const {
413 vis.accept(this);
414 }
415 }
416
417 enum TagTerminatorEnum {
418 E,
419 S,
420 EF,
421 SF,
422 }
423
424 class TagTerminator : Node {
425 @safe pure:
426
427 TagTerminatorEnum ruleSelection;
428
429 this(TagTerminatorEnum ruleSelection) {
430 this.ruleSelection = ruleSelection;
431 }
432
433 void visit(Visitor vis) {
434 vis.accept(this);
435 }
436
437 void visit(Visitor vis) const {
438 vis.accept(this);
439 }
440
441 void visit(ConstVisitor vis) {
442 vis.accept(this);
443 }
444
445 void visit(ConstVisitor vis) const {
446 vis.accept(this);
447 }
448 }
449