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