Skip to main content

veryl_parser/
veryl_walker.rs

1use crate::veryl_grammar_trait::*;
2use crate::veryl_token::VerylToken;
3
4macro_rules! before {
5    ($x:ident, $y:ident, $z:ident) => {
6        if let Some(mut handlers) = $x.get_handlers() {
7            for handler in handlers.iter_mut() {
8                handler.set_point(HandlerPoint::Before);
9                let _ = handler.$y($z);
10            }
11        }
12    };
13}
14
15macro_rules! after {
16    ($x:ident, $y:ident, $z:ident) => {
17        if let Some(mut handlers) = $x.get_handlers() {
18            for handler in handlers.iter_mut() {
19                handler.set_point(HandlerPoint::After);
20                let _ = handler.$y($z);
21            }
22        }
23    };
24}
25
26pub trait VerylWalker {
27    /// Semantic action for non-terminal 'VerylToken'
28    fn veryl_token(&mut self, _arg: &VerylToken) {}
29
30    /// Semantic action for non-terminal 'Start'
31    fn start(&mut self, arg: &Start) {
32        before!(self, start, arg);
33        self.veryl_token(&arg.start_token);
34        after!(self, start, arg);
35    }
36
37    /// Semantic action for non-terminal 'StringLiteral'
38    fn string_literal(&mut self, arg: &StringLiteral) {
39        before!(self, string_literal, arg);
40        self.veryl_token(&arg.string_literal_token);
41        after!(self, string_literal, arg);
42    }
43
44    /// Semantic action for non-terminal 'Exponent'
45    fn exponent(&mut self, arg: &Exponent) {
46        before!(self, exponent, arg);
47        self.veryl_token(&arg.exponent_token);
48        after!(self, exponent, arg);
49    }
50
51    /// Semantic action for non-terminal 'FixedPoint'
52    fn fixed_point(&mut self, arg: &FixedPoint) {
53        before!(self, fixed_point, arg);
54        self.veryl_token(&arg.fixed_point_token);
55        after!(self, fixed_point, arg);
56    }
57
58    /// Semantic action for non-terminal 'Based'
59    fn based(&mut self, arg: &Based) {
60        before!(self, based, arg);
61        self.veryl_token(&arg.based_token);
62        after!(self, based, arg);
63    }
64
65    /// Semantic action for non-terminal 'BaseLess'
66    fn base_less(&mut self, arg: &BaseLess) {
67        before!(self, base_less, arg);
68        self.veryl_token(&arg.base_less_token);
69        after!(self, base_less, arg);
70    }
71
72    /// Semantic action for non-terminal 'AllBit'
73    fn all_bit(&mut self, arg: &AllBit) {
74        before!(self, all_bit, arg);
75        self.veryl_token(&arg.all_bit_token);
76        after!(self, all_bit, arg);
77    }
78
79    /// Semantic action for non-terminal 'AssignmentOperator'
80    fn assignment_operator(&mut self, arg: &AssignmentOperator) {
81        before!(self, assignment_operator, arg);
82        self.veryl_token(&arg.assignment_operator_token);
83        after!(self, assignment_operator, arg);
84    }
85
86    /// Semantic action for non-terminal 'DiamondOperator'
87    fn diamond_operator(&mut self, arg: &DiamondOperator) {
88        before!(self, diamond_operator, arg);
89        self.veryl_token(&arg.diamond_operator_token);
90        after!(self, diamond_operator, arg);
91    }
92
93    /// Semantic action for non-terminal 'Operator01'
94    fn operator01(&mut self, arg: &Operator01) {
95        before!(self, operator01, arg);
96        self.veryl_token(&arg.operator01_token);
97        after!(self, operator01, arg);
98    }
99
100    /// Semantic action for non-terminal 'Operator02'
101    fn operator02(&mut self, arg: &Operator02) {
102        before!(self, operator02, arg);
103        self.veryl_token(&arg.operator02_token);
104        after!(self, operator02, arg);
105    }
106
107    /// Semantic action for non-terminal 'Operator03'
108    fn operator03(&mut self, arg: &Operator03) {
109        before!(self, operator03, arg);
110        self.veryl_token(&arg.operator03_token);
111        after!(self, operator03, arg);
112    }
113
114    /// Semantic action for non-terminal 'Operator04'
115    fn operator04(&mut self, arg: &Operator04) {
116        before!(self, operator04, arg);
117        self.veryl_token(&arg.operator04_token);
118        after!(self, operator04, arg);
119    }
120
121    /// Semantic action for non-terminal 'Operator05'
122    fn operator05(&mut self, arg: &Operator05) {
123        before!(self, operator05, arg);
124        self.veryl_token(&arg.operator05_token);
125        after!(self, operator05, arg);
126    }
127
128    /// Semantic action for non-terminal 'Operator06'
129    fn operator06(&mut self, arg: &Operator06) {
130        before!(self, operator06, arg);
131        self.veryl_token(&arg.operator06_token);
132        after!(self, operator06, arg);
133    }
134
135    /// Semantic action for non-terminal 'Operator07'
136    fn operator07(&mut self, arg: &Operator07) {
137        before!(self, operator07, arg);
138        self.veryl_token(&arg.operator07_token);
139        after!(self, operator07, arg);
140    }
141
142    /// Semantic action for non-terminal 'Operator08'
143    fn operator08(&mut self, arg: &Operator08) {
144        before!(self, operator08, arg);
145        self.veryl_token(&arg.operator08_token);
146        after!(self, operator08, arg);
147    }
148
149    /// Semantic action for non-terminal 'UnaryOperator'
150    fn unary_operator(&mut self, arg: &UnaryOperator) {
151        before!(self, unary_operator, arg);
152        self.veryl_token(&arg.unary_operator_token);
153        after!(self, unary_operator, arg);
154    }
155
156    /// Semantic action for non-terminal 'Colon'
157    fn colon(&mut self, arg: &Colon) {
158        before!(self, colon, arg);
159        self.veryl_token(&arg.colon_token);
160        after!(self, colon, arg);
161    }
162
163    /// Semantic action for non-terminal 'ColonColon'
164    fn colon_colon(&mut self, arg: &ColonColon) {
165        before!(self, colon_colon, arg);
166        self.veryl_token(&arg.colon_colon_token);
167        after!(self, colon_colon, arg);
168    }
169
170    /// Semantic action for non-terminal 'ColonColonLAngle'
171    fn colon_colon_l_angle(&mut self, arg: &ColonColonLAngle) {
172        before!(self, colon_colon_l_angle, arg);
173        self.veryl_token(&arg.colon_colon_l_angle_token);
174        after!(self, colon_colon_l_angle, arg);
175    }
176
177    /// Semantic action for non-terminal 'Comma'
178    fn comma(&mut self, arg: &Comma) {
179        before!(self, comma, arg);
180        self.veryl_token(&arg.comma_token);
181        after!(self, comma, arg);
182    }
183
184    /// Semantic action for non-terminal 'DotDot'
185    fn dot_dot(&mut self, arg: &DotDot) {
186        before!(self, dot_dot, arg);
187        self.veryl_token(&arg.dot_dot_token);
188        after!(self, dot_dot, arg);
189    }
190
191    /// Semantic action for non-terminal 'DotDotEqu'
192    fn dot_dot_equ(&mut self, arg: &DotDotEqu) {
193        before!(self, dot_dot_equ, arg);
194        self.veryl_token(&arg.dot_dot_equ_token);
195        after!(self, dot_dot_equ, arg);
196    }
197
198    /// Semantic action for non-terminal 'Dot'
199    fn dot(&mut self, arg: &Dot) {
200        before!(self, dot, arg);
201        self.veryl_token(&arg.dot_token);
202        after!(self, dot, arg);
203    }
204
205    /// Semantic action for non-terminal 'Equ'
206    fn equ(&mut self, arg: &Equ) {
207        before!(self, equ, arg);
208        self.veryl_token(&arg.equ_token);
209        after!(self, equ, arg);
210    }
211
212    /// Semantic action for non-terminal 'HashLBracket'
213    fn hash_l_bracket(&mut self, arg: &HashLBracket) {
214        before!(self, hash_l_bracket, arg);
215        self.veryl_token(&arg.hash_l_bracket_token);
216        after!(self, hash_l_bracket, arg);
217    }
218
219    /// Semantic action for non-terminal 'Hash'
220    fn hash(&mut self, arg: &Hash) {
221        before!(self, hash, arg);
222        self.veryl_token(&arg.hash_token);
223        after!(self, hash, arg);
224    }
225
226    /// Semantic action for non-terminal 'Question'
227    fn question(&mut self, arg: &Question) {
228        before!(self, question, arg);
229        self.veryl_token(&arg.question_token);
230        after!(self, question, arg);
231    }
232
233    /// Semantic action for non-terminal 'QuoteLBrace'
234    fn quote_l_brace(&mut self, arg: &QuoteLBrace) {
235        before!(self, quote_l_brace, arg);
236        self.veryl_token(&arg.quote_l_brace_token);
237        after!(self, quote_l_brace, arg);
238    }
239
240    /// Semantic action for non-terminal 'Quote'
241    fn quote(&mut self, arg: &Quote) {
242        before!(self, quote, arg);
243        self.veryl_token(&arg.quote_token);
244        after!(self, quote, arg);
245    }
246
247    /// Semantic action for non-terminal 'LAngle'
248    fn l_angle(&mut self, arg: &LAngle) {
249        before!(self, l_angle, arg);
250        self.veryl_token(&arg.l_angle_token);
251        after!(self, l_angle, arg);
252    }
253
254    /// Semantic action for non-terminal 'EmbedLBrace'
255    fn embed_l_brace(&mut self, arg: &EmbedLBrace) {
256        before!(self, embed_l_brace, arg);
257        self.veryl_token(&arg.embed_l_brace_token);
258        after!(self, embed_l_brace, arg);
259    }
260
261    /// Semantic action for non-terminal 'EscapedLBrace'
262    fn escaped_l_brace(&mut self, arg: &EscapedLBrace) {
263        before!(self, escaped_l_brace, arg);
264        self.veryl_token(&arg.escaped_l_brace_token);
265        after!(self, escaped_l_brace, arg);
266    }
267
268    /// Semantic action for non-terminal 'TripleLBrace'
269    fn triple_l_brace(&mut self, arg: &TripleLBrace) {
270        before!(self, triple_l_brace, arg);
271        self.veryl_token(&arg.triple_l_brace_token);
272        after!(self, triple_l_brace, arg);
273    }
274
275    /// Semantic action for non-terminal 'LBrace'
276    fn l_brace(&mut self, arg: &LBrace) {
277        before!(self, l_brace, arg);
278        self.veryl_token(&arg.l_brace_token);
279        after!(self, l_brace, arg);
280    }
281
282    /// Semantic action for non-terminal 'LBracket'
283    fn l_bracket(&mut self, arg: &LBracket) {
284        before!(self, l_bracket, arg);
285        self.veryl_token(&arg.l_bracket_token);
286        after!(self, l_bracket, arg);
287    }
288
289    /// Semantic action for non-terminal 'LParen'
290    fn l_paren(&mut self, arg: &LParen) {
291        before!(self, l_paren, arg);
292        self.veryl_token(&arg.l_paren_token);
293        after!(self, l_paren, arg);
294    }
295
296    /// Semantic action for non-terminal 'LTMinus'
297    fn l_t_minus(&mut self, arg: &LTMinus) {
298        before!(self, l_t_minus, arg);
299        self.veryl_token(&arg.l_t_minus_token);
300        after!(self, l_t_minus, arg);
301    }
302
303    /// Semantic action for non-terminal 'MinusColon'
304    fn minus_colon(&mut self, arg: &MinusColon) {
305        before!(self, minus_colon, arg);
306        self.veryl_token(&arg.minus_colon_token);
307        after!(self, minus_colon, arg);
308    }
309
310    /// Semantic action for non-terminal 'MinusGT'
311    fn minus_g_t(&mut self, arg: &MinusGT) {
312        before!(self, minus_g_t, arg);
313        self.veryl_token(&arg.minus_g_t_token);
314        after!(self, minus_g_t, arg);
315    }
316
317    /// Semantic action for non-terminal 'PlusColon'
318    fn plus_colon(&mut self, arg: &PlusColon) {
319        before!(self, plus_colon, arg);
320        self.veryl_token(&arg.plus_colon_token);
321        after!(self, plus_colon, arg);
322    }
323
324    /// Semantic action for non-terminal 'RAngle'
325    fn r_angle(&mut self, arg: &RAngle) {
326        before!(self, r_angle, arg);
327        self.veryl_token(&arg.r_angle_token);
328        after!(self, r_angle, arg);
329    }
330
331    /// Semantic action for non-terminal 'EmbedRBrace'
332    fn embed_r_brace(&mut self, arg: &EmbedRBrace) {
333        before!(self, embed_r_brace, arg);
334        self.veryl_token(&arg.embed_r_brace_token);
335        after!(self, embed_r_brace, arg);
336    }
337
338    /// Semantic action for non-terminal 'EscapedRBrace'
339    fn escaped_r_brace(&mut self, arg: &EscapedRBrace) {
340        before!(self, escaped_r_brace, arg);
341        self.veryl_token(&arg.escaped_r_brace_token);
342        after!(self, escaped_r_brace, arg);
343    }
344
345    /// Semantic action for non-terminal 'TripleRBrace'
346    fn triple_r_brace(&mut self, arg: &TripleRBrace) {
347        before!(self, triple_r_brace, arg);
348        self.veryl_token(&arg.triple_r_brace_token);
349        after!(self, triple_r_brace, arg);
350    }
351
352    /// Semantic action for non-terminal 'RBrace'
353    fn r_brace(&mut self, arg: &RBrace) {
354        before!(self, r_brace, arg);
355        self.veryl_token(&arg.r_brace_token);
356        after!(self, r_brace, arg);
357    }
358
359    /// Semantic action for non-terminal 'RBracket'
360    fn r_bracket(&mut self, arg: &RBracket) {
361        before!(self, r_bracket, arg);
362        self.veryl_token(&arg.r_bracket_token);
363        after!(self, r_bracket, arg);
364    }
365
366    /// Semantic action for non-terminal 'RParen'
367    fn r_paren(&mut self, arg: &RParen) {
368        before!(self, r_paren, arg);
369        self.veryl_token(&arg.r_paren_token);
370        after!(self, r_paren, arg);
371    }
372
373    /// Semantic action for non-terminal 'Semicolon'
374    fn semicolon(&mut self, arg: &Semicolon) {
375        before!(self, semicolon, arg);
376        self.veryl_token(&arg.semicolon_token);
377        after!(self, semicolon, arg);
378    }
379
380    /// Semantic action for non-terminal 'Star'
381    fn star(&mut self, arg: &Star) {
382        before!(self, star, arg);
383        self.veryl_token(&arg.star_token);
384        after!(self, star, arg);
385    }
386
387    /// Semantic action for non-terminal 'Alias'
388    fn alias(&mut self, arg: &Alias) {
389        before!(self, alias, arg);
390        self.veryl_token(&arg.alias_token);
391        after!(self, alias, arg);
392    }
393
394    /// Semantic action for non-terminal 'AlwaysComb'
395    fn always_comb(&mut self, arg: &AlwaysComb) {
396        before!(self, always_comb, arg);
397        self.veryl_token(&arg.always_comb_token);
398        after!(self, always_comb, arg);
399    }
400
401    /// Semantic action for non-terminal 'AlwaysFf'
402    fn always_ff(&mut self, arg: &AlwaysFf) {
403        before!(self, always_ff, arg);
404        self.veryl_token(&arg.always_ff_token);
405        after!(self, always_ff, arg);
406    }
407
408    /// Semantic action for non-terminal 'As'
409    fn r#as(&mut self, arg: &As) {
410        before!(self, r#as, arg);
411        self.veryl_token(&arg.as_token);
412        after!(self, r#as, arg);
413    }
414
415    /// Semantic action for non-terminal 'Assign'
416    fn assign(&mut self, arg: &Assign) {
417        before!(self, assign, arg);
418        self.veryl_token(&arg.assign_token);
419        after!(self, assign, arg);
420    }
421
422    /// Semantic action for non-terminal 'Bind'
423    fn bind(&mut self, arg: &Bind) {
424        before!(self, bind, arg);
425        self.veryl_token(&arg.bind_token);
426        after!(self, bind, arg);
427    }
428
429    /// Semantic action for non-terminal 'Bit'
430    fn bit(&mut self, arg: &Bit) {
431        before!(self, bit, arg);
432        self.veryl_token(&arg.bit_token);
433        after!(self, bit, arg);
434    }
435
436    /// Semantic action for non-terminal 'Block'
437    fn block(&mut self, arg: &Block) {
438        before!(self, block, arg);
439        self.veryl_token(&arg.block_token);
440        after!(self, block, arg);
441    }
442
443    /// Semantic action for non-terminal 'BBool'
444    fn b_bool(&mut self, arg: &BBool) {
445        before!(self, b_bool, arg);
446        self.veryl_token(&arg.b_bool_token);
447        after!(self, b_bool, arg);
448    }
449
450    /// Semantic action for non-terminal 'LBool'
451    fn l_bool(&mut self, arg: &LBool) {
452        before!(self, l_bool, arg);
453        self.veryl_token(&arg.l_bool_token);
454        after!(self, l_bool, arg);
455    }
456
457    /// Semantic action for non-terminal 'Case'
458    fn case(&mut self, arg: &Case) {
459        before!(self, case, arg);
460        self.veryl_token(&arg.case_token);
461        after!(self, case, arg);
462    }
463
464    /// Semantic action for non-terminal 'Clock'
465    fn clock(&mut self, arg: &Clock) {
466        before!(self, clock, arg);
467        self.veryl_token(&arg.clock_token);
468        after!(self, clock, arg);
469    }
470
471    /// Semantic action for non-terminal 'ClockPosedge'
472    fn clock_posedge(&mut self, arg: &ClockPosedge) {
473        before!(self, clock_posedge, arg);
474        self.veryl_token(&arg.clock_posedge_token);
475        after!(self, clock_posedge, arg);
476    }
477
478    /// Semantic action for non-terminal 'ClockNegedge'
479    fn clock_negedge(&mut self, arg: &ClockNegedge) {
480        before!(self, clock_negedge, arg);
481        self.veryl_token(&arg.clock_negedge_token);
482        after!(self, clock_negedge, arg);
483    }
484
485    /// Semantic action for non-terminal 'Connect'
486    fn connect(&mut self, arg: &Connect) {
487        before!(self, connect, arg);
488        self.veryl_token(&arg.connect_token);
489        after!(self, connect, arg);
490    }
491
492    /// Semantic action for non-terminal 'Const'
493    fn r#const(&mut self, arg: &Const) {
494        before!(self, r#const, arg);
495        self.veryl_token(&arg.const_token);
496        after!(self, r#const, arg);
497    }
498
499    /// Semantic action for non-terminal 'Converse'
500    fn converse(&mut self, arg: &Converse) {
501        before!(self, converse, arg);
502        self.veryl_token(&arg.converse_token);
503        after!(self, converse, arg);
504    }
505
506    /// Semantic action for non-terminal 'Defaul'
507    fn defaul(&mut self, arg: &Defaul) {
508        before!(self, defaul, arg);
509        self.veryl_token(&arg.default_token);
510        after!(self, defaul, arg);
511    }
512
513    /// Semantic action for non-terminal 'Else'
514    fn r#else(&mut self, arg: &Else) {
515        before!(self, r#else, arg);
516        self.veryl_token(&arg.else_token);
517        after!(self, r#else, arg);
518    }
519
520    /// Semantic action for non-terminal 'Embed'
521    fn embed(&mut self, arg: &Embed) {
522        before!(self, embed, arg);
523        self.veryl_token(&arg.embed_token);
524        after!(self, embed, arg);
525    }
526
527    /// Semantic action for non-terminal 'Enum'
528    fn r#enum(&mut self, arg: &Enum) {
529        before!(self, r#enum, arg);
530        self.veryl_token(&arg.enum_token);
531        after!(self, r#enum, arg);
532    }
533
534    /// Semantic action for non-terminal 'F32'
535    fn f32(&mut self, arg: &F32) {
536        before!(self, f32, arg);
537        self.veryl_token(&arg.f32_token);
538        after!(self, f32, arg);
539    }
540
541    /// Semantic action for non-terminal 'F64'
542    fn f64(&mut self, arg: &F64) {
543        before!(self, f64, arg);
544        self.veryl_token(&arg.f64_token);
545        after!(self, f64, arg);
546    }
547
548    /// Semantic action for non-terminal 'False'
549    fn r#false(&mut self, arg: &False) {
550        before!(self, r#false, arg);
551        self.veryl_token(&arg.false_token);
552        after!(self, r#false, arg);
553    }
554
555    /// Semantic action for non-terminal 'Final'
556    fn r#final(&mut self, arg: &Final) {
557        before!(self, r#final, arg);
558        self.veryl_token(&arg.final_token);
559        after!(self, r#final, arg);
560    }
561
562    /// Semantic action for non-terminal 'For'
563    fn r#for(&mut self, arg: &For) {
564        before!(self, r#for, arg);
565        self.veryl_token(&arg.for_token);
566        after!(self, r#for, arg);
567    }
568
569    /// Semantic action for non-terminal 'Function'
570    fn function(&mut self, arg: &Function) {
571        before!(self, function, arg);
572        self.veryl_token(&arg.function_token);
573        after!(self, function, arg);
574    }
575
576    /// Semantic action for non-terminal 'Gen'
577    fn r#gen(&mut self, arg: &Gen) {
578        before!(self, r#gen, arg);
579        self.veryl_token(&arg.gen_token);
580        after!(self, r#gen, arg);
581    }
582
583    /// Semantic action for non-terminal 'I8'
584    fn i8(&mut self, arg: &I8) {
585        before!(self, i8, arg);
586        self.veryl_token(&arg.i8_token);
587        after!(self, i8, arg);
588    }
589
590    /// Semantic action for non-terminal 'I16'
591    fn i16(&mut self, arg: &I16) {
592        before!(self, i16, arg);
593        self.veryl_token(&arg.i16_token);
594        after!(self, i16, arg);
595    }
596
597    /// Semantic action for non-terminal 'I32'
598    fn i32(&mut self, arg: &I32) {
599        before!(self, i32, arg);
600        self.veryl_token(&arg.i32_token);
601        after!(self, i32, arg);
602    }
603
604    /// Semantic action for non-terminal 'I64'
605    fn i64(&mut self, arg: &I64) {
606        before!(self, i64, arg);
607        self.veryl_token(&arg.i64_token);
608        after!(self, i64, arg);
609    }
610
611    /// Semantic action for non-terminal 'If'
612    fn r#if(&mut self, arg: &If) {
613        before!(self, r#if, arg);
614        self.veryl_token(&arg.if_token);
615        after!(self, r#if, arg);
616    }
617
618    /// Semantic action for non-terminal 'IfReset'
619    fn if_reset(&mut self, arg: &IfReset) {
620        before!(self, if_reset, arg);
621        self.veryl_token(&arg.if_reset_token);
622        after!(self, if_reset, arg);
623    }
624
625    /// Semantic action for non-terminal 'Import'
626    fn import(&mut self, arg: &Import) {
627        before!(self, import, arg);
628        self.veryl_token(&arg.import_token);
629        after!(self, import, arg);
630    }
631
632    /// Semantic action for non-terminal 'In'
633    fn r#in(&mut self, arg: &In) {
634        before!(self, r#in, arg);
635        self.veryl_token(&arg.in_token);
636        after!(self, r#in, arg);
637    }
638
639    /// Semantic action for non-terminal 'Include'
640    fn include(&mut self, arg: &Include) {
641        before!(self, include, arg);
642        self.veryl_token(&arg.include_token);
643        after!(self, include, arg);
644    }
645
646    /// Semantic action for non-terminal 'Initial'
647    fn initial(&mut self, arg: &Initial) {
648        before!(self, initial, arg);
649        self.veryl_token(&arg.initial_token);
650        after!(self, initial, arg);
651    }
652
653    /// Semantic action for non-terminal 'Inout'
654    fn inout(&mut self, arg: &Inout) {
655        before!(self, inout, arg);
656        self.veryl_token(&arg.inout_token);
657        after!(self, inout, arg);
658    }
659
660    /// Semantic action for non-terminal 'Input'
661    fn input(&mut self, arg: &Input) {
662        before!(self, input, arg);
663        self.veryl_token(&arg.input_token);
664        after!(self, input, arg);
665    }
666
667    /// Semantic action for non-terminal 'Inside'
668    fn inside(&mut self, arg: &Inside) {
669        before!(self, inside, arg);
670        self.veryl_token(&arg.inside_token);
671        after!(self, inside, arg);
672    }
673
674    /// Semantic action for non-terminal 'Inst'
675    fn inst(&mut self, arg: &Inst) {
676        before!(self, inst, arg);
677        self.veryl_token(&arg.inst_token);
678        after!(self, inst, arg);
679    }
680
681    /// Semantic action for non-terminal 'Interface'
682    fn interface(&mut self, arg: &Interface) {
683        before!(self, interface, arg);
684        self.veryl_token(&arg.interface_token);
685        after!(self, interface, arg);
686    }
687
688    /// Semantic action for non-terminal 'Let'
689    fn r#let(&mut self, arg: &Let) {
690        before!(self, r#let, arg);
691        self.veryl_token(&arg.let_token);
692        after!(self, r#let, arg);
693    }
694
695    /// Semantic action for non-terminal 'Logic'
696    fn logic(&mut self, arg: &Logic) {
697        before!(self, logic, arg);
698        self.veryl_token(&arg.logic_token);
699        after!(self, logic, arg);
700    }
701
702    /// Semantic action for non-terminal 'Lsb'
703    fn lsb(&mut self, arg: &Lsb) {
704        before!(self, lsb, arg);
705        self.veryl_token(&arg.lsb_token);
706        after!(self, lsb, arg);
707    }
708
709    /// Semantic action for non-terminal 'Mixin'
710    fn mixin(&mut self, arg: &Mixin) {
711        before!(self, mixin, arg);
712        self.veryl_token(&arg.mixin_token);
713        after!(self, mixin, arg);
714    }
715
716    /// Semantic action for non-terminal 'Modport'
717    fn modport(&mut self, arg: &Modport) {
718        before!(self, modport, arg);
719        self.veryl_token(&arg.modport_token);
720        after!(self, modport, arg);
721    }
722
723    /// Semantic action for non-terminal 'Module'
724    fn module(&mut self, arg: &Module) {
725        before!(self, module, arg);
726        self.veryl_token(&arg.module_token);
727        after!(self, module, arg);
728    }
729
730    /// Semantic action for non-terminal 'Msb'
731    fn msb(&mut self, arg: &Msb) {
732        before!(self, msb, arg);
733        self.veryl_token(&arg.msb_token);
734        after!(self, msb, arg);
735    }
736
737    /// Semantic action for non-terminal 'Output'
738    fn output(&mut self, arg: &Output) {
739        before!(self, output, arg);
740        self.veryl_token(&arg.output_token);
741        after!(self, output, arg);
742    }
743
744    /// Semantic action for non-terminal 'Outside'
745    fn outside(&mut self, arg: &Outside) {
746        before!(self, outside, arg);
747        self.veryl_token(&arg.outside_token);
748        after!(self, outside, arg);
749    }
750
751    /// Semantic action for non-terminal 'Package'
752    fn package(&mut self, arg: &Package) {
753        before!(self, package, arg);
754        self.veryl_token(&arg.package_token);
755        after!(self, package, arg);
756    }
757
758    /// Semantic action for non-terminal 'Param'
759    fn param(&mut self, arg: &Param) {
760        before!(self, param, arg);
761        self.veryl_token(&arg.param_token);
762        after!(self, param, arg);
763    }
764
765    /// Semantic action for non-terminal 'Proto'
766    fn proto(&mut self, arg: &Proto) {
767        before!(self, proto, arg);
768        self.veryl_token(&arg.proto_token);
769        after!(self, proto, arg);
770    }
771
772    /// Semantic action for non-terminal 'Pub'
773    fn r#pub(&mut self, arg: &Pub) {
774        before!(self, r#pub, arg);
775        self.veryl_token(&arg.pub_token);
776        after!(self, r#pub, arg);
777    }
778
779    /// Semantic action for non-terminal 'Repeat'
780    fn repeat(&mut self, arg: &Repeat) {
781        before!(self, repeat, arg);
782        self.veryl_token(&arg.repeat_token);
783        after!(self, repeat, arg);
784    }
785
786    /// Semantic action for non-terminal 'Reset'
787    fn reset(&mut self, arg: &Reset) {
788        before!(self, reset, arg);
789        self.veryl_token(&arg.reset_token);
790        after!(self, reset, arg);
791    }
792
793    /// Semantic action for non-terminal 'ResetAsyncHigh'
794    fn reset_async_high(&mut self, arg: &ResetAsyncHigh) {
795        before!(self, reset_async_high, arg);
796        self.veryl_token(&arg.reset_async_high_token);
797        after!(self, reset_async_high, arg);
798    }
799
800    /// Semantic action for non-terminal 'ResetAsyncLow'
801    fn reset_async_low(&mut self, arg: &ResetAsyncLow) {
802        before!(self, reset_async_low, arg);
803        self.veryl_token(&arg.reset_async_low_token);
804        after!(self, reset_async_low, arg);
805    }
806
807    /// Semantic action for non-terminal 'ResetSyncHigh'
808    fn reset_sync_high(&mut self, arg: &ResetSyncHigh) {
809        before!(self, reset_sync_high, arg);
810        self.veryl_token(&arg.reset_sync_high_token);
811        after!(self, reset_sync_high, arg);
812    }
813
814    /// Semantic action for non-terminal 'ResetSyncLow'
815    fn reset_sync_low(&mut self, arg: &ResetSyncLow) {
816        before!(self, reset_sync_low, arg);
817        self.veryl_token(&arg.reset_sync_low_token);
818        after!(self, reset_sync_low, arg);
819    }
820
821    /// Semantic action for non-terminal 'Return'
822    fn r#return(&mut self, arg: &Return) {
823        before!(self, r#return, arg);
824        self.veryl_token(&arg.return_token);
825        after!(self, r#return, arg);
826    }
827
828    /// Semantic action for non-terminal 'Rev'
829    fn rev(&mut self, arg: &Rev) {
830        before!(self, rev, arg);
831        self.veryl_token(&arg.rev_token);
832        after!(self, rev, arg);
833    }
834
835    /// Semantic action for non-terminal 'Break'
836    fn r#break(&mut self, arg: &Break) {
837        before!(self, r#break, arg);
838        self.veryl_token(&arg.break_token);
839        after!(self, r#break, arg);
840    }
841
842    /// Semantic action for non-terminal 'Same'
843    fn same(&mut self, arg: &Same) {
844        before!(self, same, arg);
845        self.veryl_token(&arg.same_token);
846        after!(self, same, arg);
847    }
848
849    /// Semantic action for non-terminal 'Signed'
850    fn signed(&mut self, arg: &Signed) {
851        before!(self, signed, arg);
852        self.veryl_token(&arg.signed_token);
853        after!(self, signed, arg);
854    }
855
856    /// Semantic action for non-terminal 'Step'
857    fn step(&mut self, arg: &Step) {
858        before!(self, step, arg);
859        self.veryl_token(&arg.step_token);
860        after!(self, step, arg);
861    }
862
863    /// Semantic action for non-terminal 'Strin'
864    fn strin(&mut self, arg: &Strin) {
865        before!(self, strin, arg);
866        self.veryl_token(&arg.string_token);
867        after!(self, strin, arg);
868    }
869
870    /// Semantic action for non-terminal 'Struct'
871    fn r#struct(&mut self, arg: &Struct) {
872        before!(self, r#struct, arg);
873        self.veryl_token(&arg.struct_token);
874        after!(self, r#struct, arg);
875    }
876
877    /// Semantic action for non-terminal 'Switch'
878    fn switch(&mut self, arg: &Switch) {
879        before!(self, switch, arg);
880        self.veryl_token(&arg.switch_token);
881        after!(self, switch, arg);
882    }
883
884    /// Semantic action for non-terminal 'Union'
885    fn union(&mut self, arg: &Union) {
886        before!(self, union, arg);
887        self.veryl_token(&arg.union_token);
888        after!(self, union, arg);
889    }
890
891    /// Semantic action for non-terminal 'Unsafe'
892    fn r#unsafe(&mut self, arg: &Unsafe) {
893        before!(self, r#unsafe, arg);
894        self.veryl_token(&arg.unsafe_token);
895        after!(self, r#unsafe, arg);
896    }
897
898    /// Semantic action for non-terminal 'Tri'
899    fn tri(&mut self, arg: &Tri) {
900        before!(self, tri, arg);
901        self.veryl_token(&arg.tri_token);
902        after!(self, tri, arg);
903    }
904
905    /// Semantic action for non-terminal 'True'
906    fn r#true(&mut self, arg: &True) {
907        before!(self, r#true, arg);
908        self.veryl_token(&arg.true_token);
909        after!(self, r#true, arg);
910    }
911
912    /// Semantic action for non-terminal 'Type'
913    fn r#type(&mut self, arg: &Type) {
914        before!(self, r#type, arg);
915        self.veryl_token(&arg.type_token);
916        after!(self, r#type, arg);
917    }
918
919    /// Semantic action for non-terminal 'P8'
920    fn p8(&mut self, arg: &P8) {
921        before!(self, p8, arg);
922        self.veryl_token(&arg.p8_token);
923        after!(self, p8, arg);
924    }
925
926    /// Semantic action for non-terminal 'P16'
927    fn p16(&mut self, arg: &P16) {
928        before!(self, p16, arg);
929        self.veryl_token(&arg.p16_token);
930        after!(self, p16, arg);
931    }
932
933    /// Semantic action for non-terminal 'P32'
934    fn p32(&mut self, arg: &P32) {
935        before!(self, p32, arg);
936        self.veryl_token(&arg.p32_token);
937        after!(self, p32, arg);
938    }
939
940    /// Semantic action for non-terminal 'P64'
941    fn p64(&mut self, arg: &P64) {
942        before!(self, p64, arg);
943        self.veryl_token(&arg.p64_token);
944        after!(self, p64, arg);
945    }
946
947    /// Semantic action for non-terminal 'U8'
948    fn u8(&mut self, arg: &U8) {
949        before!(self, u8, arg);
950        self.veryl_token(&arg.u8_token);
951        after!(self, u8, arg);
952    }
953
954    /// Semantic action for non-terminal 'U16'
955    fn u16(&mut self, arg: &U16) {
956        before!(self, u16, arg);
957        self.veryl_token(&arg.u16_token);
958        after!(self, u16, arg);
959    }
960
961    /// Semantic action for non-terminal 'U32'
962    fn u32(&mut self, arg: &U32) {
963        before!(self, u32, arg);
964        self.veryl_token(&arg.u32_token);
965        after!(self, u32, arg);
966    }
967
968    /// Semantic action for non-terminal 'U64'
969    fn u64(&mut self, arg: &U64) {
970        before!(self, u64, arg);
971        self.veryl_token(&arg.u64_token);
972        after!(self, u64, arg);
973    }
974
975    /// Semantic action for non-terminal 'Var'
976    fn var(&mut self, arg: &Var) {
977        before!(self, var, arg);
978        self.veryl_token(&arg.var_token);
979        after!(self, var, arg);
980    }
981
982    /// Semantic action for non-terminal 'DollarIdentifier'
983    fn dollar_identifier(&mut self, arg: &DollarIdentifier) {
984        before!(self, dollar_identifier, arg);
985        self.veryl_token(&arg.dollar_identifier_token);
986        after!(self, dollar_identifier, arg);
987    }
988
989    /// Semantic action for non-terminal 'Identifier'
990    fn identifier(&mut self, arg: &Identifier) {
991        before!(self, identifier, arg);
992        self.veryl_token(&arg.identifier_token);
993        after!(self, identifier, arg);
994    }
995
996    /// Semantic action for non-terminal 'Any'
997    fn any(&mut self, arg: &Any) {
998        before!(self, any, arg);
999        self.veryl_token(&arg.any_token);
1000        after!(self, any, arg);
1001    }
1002
1003    /// Semantic action for non-terminal 'Number'
1004    fn number(&mut self, arg: &Number) {
1005        before!(self, number, arg);
1006        match arg {
1007            Number::IntegralNumber(x) => self.integral_number(&x.integral_number),
1008            Number::RealNumber(x) => self.real_number(&x.real_number),
1009        };
1010        after!(self, number, arg);
1011    }
1012
1013    /// Semantic action for non-terminal 'IntegralNumber'
1014    fn integral_number(&mut self, arg: &IntegralNumber) {
1015        before!(self, integral_number, arg);
1016        match arg {
1017            IntegralNumber::Based(x) => self.based(&x.based),
1018            IntegralNumber::BaseLess(x) => self.base_less(&x.base_less),
1019            IntegralNumber::AllBit(x) => self.all_bit(&x.all_bit),
1020        };
1021        after!(self, integral_number, arg);
1022    }
1023
1024    /// Semantic action for non-terminal 'RealNumber'
1025    fn real_number(&mut self, arg: &RealNumber) {
1026        before!(self, real_number, arg);
1027        match arg {
1028            RealNumber::FixedPoint(x) => self.fixed_point(&x.fixed_point),
1029            RealNumber::Exponent(x) => self.exponent(&x.exponent),
1030        };
1031        after!(self, real_number, arg);
1032    }
1033
1034    /// Semantic action for non-terminal 'HierarchicalIdentifier'
1035    fn hierarchical_identifier(&mut self, arg: &HierarchicalIdentifier) {
1036        before!(self, hierarchical_identifier, arg);
1037        self.identifier(&arg.identifier);
1038        for x in &arg.hierarchical_identifier_list {
1039            self.select(&x.select);
1040        }
1041        for x in &arg.hierarchical_identifier_list0 {
1042            self.dot(&x.dot);
1043            self.identifier(&x.identifier);
1044            for x in &x.hierarchical_identifier_list0_list {
1045                self.select(&x.select);
1046            }
1047        }
1048        after!(self, hierarchical_identifier, arg);
1049    }
1050
1051    /// Semantic action for non-terminal 'ScopedIdentifier'
1052    fn scoped_identifier(&mut self, arg: &ScopedIdentifier) {
1053        before!(self, scoped_identifier, arg);
1054        match &*arg.scoped_identifier_group {
1055            ScopedIdentifierGroup::IdentifierScopedIdentifierOpt(x) => {
1056                self.identifier(&x.identifier);
1057                if let Some(ref x) = x.scoped_identifier_opt {
1058                    self.with_generic_argument(&x.with_generic_argument);
1059                }
1060            }
1061            ScopedIdentifierGroup::DollarIdentifier(x) => {
1062                self.dollar_identifier(&x.dollar_identifier)
1063            }
1064        }
1065        for x in &arg.scoped_identifier_list {
1066            self.colon_colon(&x.colon_colon);
1067            self.identifier(&x.identifier);
1068            if let Some(ref x) = x.scoped_identifier_opt0 {
1069                self.with_generic_argument(&x.with_generic_argument);
1070            }
1071        }
1072        after!(self, scoped_identifier, arg);
1073    }
1074
1075    /// Semantic action for non-terminal 'ExpressionIdentifier'
1076    fn expression_identifier(&mut self, arg: &ExpressionIdentifier) {
1077        before!(self, expression_identifier, arg);
1078        self.scoped_identifier(&arg.scoped_identifier);
1079        if let Some(ref x) = arg.expression_identifier_opt {
1080            self.width(&x.width);
1081        }
1082        for x in &arg.expression_identifier_list {
1083            self.select(&x.select);
1084        }
1085        for x in &arg.expression_identifier_list0 {
1086            self.dot(&x.dot);
1087            self.identifier(&x.identifier);
1088            for x in &x.expression_identifier_list0_list {
1089                self.select(&x.select);
1090            }
1091        }
1092        after!(self, expression_identifier, arg);
1093    }
1094
1095    /// Semantic action for non-terminal 'GenericArgIdentifier'
1096    fn generic_arg_identifier(&mut self, arg: &GenericArgIdentifier) {
1097        before!(self, generic_arg_identifier, arg);
1098        self.scoped_identifier(&arg.scoped_identifier);
1099        for x in &arg.generic_arg_identifier_list {
1100            self.dot(&x.dot);
1101            self.identifier(&x.identifier);
1102        }
1103        after!(self, generic_arg_identifier, arg);
1104    }
1105
1106    /// Semantic action for non-terminal 'Expression'
1107    fn expression(&mut self, arg: &Expression) {
1108        before!(self, expression, arg);
1109        self.if_expression(&arg.if_expression);
1110        after!(self, expression, arg);
1111    }
1112
1113    /// Semantic action for non-terminal 'IfExpression'
1114    fn if_expression(&mut self, arg: &IfExpression) {
1115        before!(self, if_expression, arg);
1116        for x in &arg.if_expression_list {
1117            self.r#if(&x.r#if);
1118            self.expression(&x.expression);
1119            self.question(&x.question);
1120            self.expression(&x.expression0);
1121            self.colon(&x.colon);
1122        }
1123        self.expression01(&arg.expression01);
1124        after!(self, if_expression, arg);
1125    }
1126
1127    /// Semantic action for non-terminal 'Expression01'
1128    fn expression01(&mut self, arg: &Expression01) {
1129        before!(self, expression01, arg);
1130        self.expression02(&arg.expression02);
1131        for x in &arg.expression01_list {
1132            self.expression01_op(&x.expression01_op);
1133            self.expression02(&x.expression02);
1134        }
1135        after!(self, expression01, arg);
1136    }
1137
1138    /// Semantic action for non-terminal 'Expression01Op'
1139    fn expression01_op(&mut self, arg: &Expression01Op) {
1140        before!(self, expression01_op, arg);
1141        match arg {
1142            Expression01Op::Operator01(x) => self.operator01(&x.operator01),
1143            Expression01Op::Operator02(x) => self.operator02(&x.operator02),
1144            Expression01Op::Operator03(x) => self.operator03(&x.operator03),
1145            Expression01Op::Operator04(x) => self.operator04(&x.operator04),
1146            Expression01Op::Operator05(x) => self.operator05(&x.operator05),
1147            Expression01Op::Operator06(x) => self.operator06(&x.operator06),
1148            Expression01Op::Operator07(x) => self.operator07(&x.operator07),
1149            Expression01Op::Star(x) => self.star(&x.star),
1150            Expression01Op::Operator08(x) => self.operator08(&x.operator08),
1151        }
1152        after!(self, expression01_op, arg);
1153    }
1154
1155    /// Semantic action for non-terminal 'Expression02'
1156    fn expression02(&mut self, arg: &Expression02) {
1157        before!(self, expression02, arg);
1158        for x in &arg.expression02_list {
1159            self.expression02_op(&x.expression02_op);
1160        }
1161        self.factor(&arg.factor);
1162        if let Some(x) = &arg.expression02_opt {
1163            self.r#as(&x.r#as);
1164            self.casting_type(&x.casting_type);
1165        }
1166        after!(self, expression02, arg);
1167    }
1168
1169    /// Semantic action for non-terminal 'Expression02Op'
1170    fn expression02_op(&mut self, arg: &Expression02Op) {
1171        before!(self, expression02_op, arg);
1172        match arg {
1173            Expression02Op::UnaryOperator(x) => self.unary_operator(&x.unary_operator),
1174            Expression02Op::Operator06(x) => self.operator06(&x.operator06),
1175            Expression02Op::Operator05(x) => self.operator05(&x.operator05),
1176            Expression02Op::Operator03(x) => self.operator03(&x.operator03),
1177            Expression02Op::Operator04(x) => self.operator04(&x.operator04),
1178        }
1179        after!(self, expression02_op, arg);
1180    }
1181
1182    /// Semantic action for non-terminal 'Factor'
1183    fn factor(&mut self, arg: &Factor) {
1184        before!(self, factor, arg);
1185        match arg {
1186            Factor::Number(x) => self.number(&x.number),
1187            Factor::BooleanLiteral(x) => self.boolean_literal(&x.boolean_literal),
1188            Factor::IdentifierFactor(x) => self.identifier_factor(&x.identifier_factor),
1189            Factor::LParenExpressionRParen(x) => {
1190                self.l_paren(&x.l_paren);
1191                self.expression(&x.expression);
1192                self.r_paren(&x.r_paren);
1193            }
1194            Factor::LBraceConcatenationListRBrace(x) => {
1195                self.l_brace(&x.l_brace);
1196                self.concatenation_list(&x.concatenation_list);
1197                self.r_brace(&x.r_brace);
1198            }
1199            Factor::QuoteLBraceArrayLiteralListRBrace(x) => {
1200                self.quote_l_brace(&x.quote_l_brace);
1201                self.array_literal_list(&x.array_literal_list);
1202                self.r_brace(&x.r_brace);
1203            }
1204            Factor::CaseExpression(x) => {
1205                self.case_expression(&x.case_expression);
1206            }
1207            Factor::SwitchExpression(x) => {
1208                self.switch_expression(&x.switch_expression);
1209            }
1210            Factor::StringLiteral(x) => {
1211                self.string_literal(&x.string_literal);
1212            }
1213            Factor::FactorGroup(x) => match &*x.factor_group {
1214                FactorGroup::Msb(x) => self.msb(&x.msb),
1215                FactorGroup::Lsb(x) => self.lsb(&x.lsb),
1216            },
1217            Factor::InsideExpression(x) => {
1218                self.inside_expression(&x.inside_expression);
1219            }
1220            Factor::OutsideExpression(x) => {
1221                self.outside_expression(&x.outside_expression);
1222            }
1223            Factor::TypeExpression(x) => {
1224                self.type_expression(&x.type_expression);
1225            }
1226            Factor::FactorTypeFactor(x) => {
1227                self.factor_type_factor(&x.factor_type_factor);
1228            }
1229        }
1230        after!(self, factor, arg);
1231    }
1232
1233    /// Semantic action for non-terminal 'BooleanLiteral'
1234    fn boolean_literal(&mut self, arg: &BooleanLiteral) {
1235        before!(self, boolean_literal, arg);
1236        match arg {
1237            BooleanLiteral::True(x) => self.r#true(&x.r#true),
1238            BooleanLiteral::False(x) => self.r#false(&x.r#false),
1239        }
1240        after!(self, boolean_literal, arg);
1241    }
1242
1243    /// Semantic action for non-terminal 'IdentifierFactor'
1244    fn identifier_factor(&mut self, arg: &IdentifierFactor) {
1245        before!(self, identifier_factor, arg);
1246        self.expression_identifier(&arg.expression_identifier);
1247        if let Some(ref x) = arg.identifier_factor_opt {
1248            match x.identifier_factor_opt_group.as_ref() {
1249                IdentifierFactorOptGroup::FunctionCall(x) => {
1250                    self.function_call(&x.function_call);
1251                }
1252                IdentifierFactorOptGroup::StructConstructor(x) => {
1253                    self.struct_constructor(&x.struct_constructor);
1254                }
1255            }
1256        }
1257        after!(self, identifier_factor, arg);
1258    }
1259
1260    /// Semantic action for non-terminal 'FactorTypeFactor'
1261    fn factor_type_factor(&mut self, arg: &FactorTypeFactor) {
1262        before!(self, factor_type_factor, arg);
1263        for x in &arg.factor_type_factor_list {
1264            self.type_modifier(&x.type_modifier);
1265        }
1266        self.factor_type(&arg.factor_type);
1267        after!(self, factor_type_factor, arg);
1268    }
1269
1270    /// Semantic action for non-terminal 'FunctionCall'
1271    fn function_call(&mut self, arg: &FunctionCall) {
1272        before!(self, function_call, arg);
1273        self.l_paren(&arg.l_paren);
1274        if let Some(ref x) = arg.function_call_opt {
1275            self.argument_list(&x.argument_list);
1276        }
1277        self.r_paren(&arg.r_paren);
1278        after!(self, function_call, arg);
1279    }
1280
1281    /// Semantic action for non-terminal 'ArgumentList'
1282    fn argument_list(&mut self, arg: &ArgumentList) {
1283        before!(self, argument_list, arg);
1284        self.argument_item(&arg.argument_item);
1285        for x in &arg.argument_list_list {
1286            self.comma(&x.comma);
1287            self.argument_item(&x.argument_item);
1288        }
1289        if let Some(ref x) = arg.argument_list_opt {
1290            self.comma(&x.comma);
1291        }
1292        after!(self, argument_list, arg);
1293    }
1294
1295    /// Semantic action for non-terminal 'ArgumentItem'
1296    fn argument_item(&mut self, arg: &ArgumentItem) {
1297        before!(self, argument_item, arg);
1298        self.argument_expression(&arg.argument_expression);
1299        if let Some(ref x) = arg.argument_item_opt {
1300            self.colon(&x.colon);
1301            self.expression(&x.expression);
1302        }
1303        after!(self, argument_item, arg);
1304    }
1305
1306    /// Semantic action for non-terminal 'ArgumentExpression'
1307    fn argument_expression(&mut self, arg: &ArgumentExpression) {
1308        before!(self, argument_expression, arg);
1309        self.expression(&arg.expression);
1310        after!(self, argument_expression, arg);
1311    }
1312
1313    /// Semantic action for non-terminal 'StructConstructor'
1314    fn struct_constructor(&mut self, arg: &StructConstructor) {
1315        before!(self, struct_constructor, arg);
1316        self.quote_l_brace(&arg.quote_l_brace);
1317        self.struct_constructor_list(&arg.struct_constructor_list);
1318        if let Some(ref x) = arg.struct_constructor_opt {
1319            self.dot_dot(&x.dot_dot);
1320            self.defaul(&x.defaul);
1321            self.l_paren(&x.l_paren);
1322            self.expression(&x.expression);
1323            self.r_paren(&x.r_paren);
1324        }
1325        self.r_brace(&arg.r_brace);
1326        after!(self, struct_constructor, arg);
1327    }
1328
1329    /// Semantic action for non-terminal 'StructConstructorList'
1330    fn struct_constructor_list(&mut self, arg: &StructConstructorList) {
1331        before!(self, struct_constructor_list, arg);
1332        self.struct_constructor_item(&arg.struct_constructor_item);
1333        for x in &arg.struct_constructor_list_list {
1334            self.comma(&x.comma);
1335            self.struct_constructor_item(&x.struct_constructor_item);
1336        }
1337        if let Some(ref x) = arg.struct_constructor_list_opt {
1338            self.comma(&x.comma);
1339        }
1340        after!(self, struct_constructor_list, arg);
1341    }
1342
1343    /// Semantic action for non-terminal 'StructConstructorItem'
1344    fn struct_constructor_item(&mut self, arg: &StructConstructorItem) {
1345        before!(self, struct_constructor_item, arg);
1346        self.identifier(&arg.identifier);
1347        self.colon(&arg.colon);
1348        self.expression(&arg.expression);
1349        after!(self, struct_constructor_item, arg);
1350    }
1351
1352    /// Semantic action for non-terminal 'ConcatenationList'
1353    fn concatenation_list(&mut self, arg: &ConcatenationList) {
1354        before!(self, concatenation_list, arg);
1355        self.concatenation_item(&arg.concatenation_item);
1356        for x in &arg.concatenation_list_list {
1357            self.comma(&x.comma);
1358            self.concatenation_item(&x.concatenation_item);
1359        }
1360        if let Some(ref x) = arg.concatenation_list_opt {
1361            self.comma(&x.comma);
1362        }
1363        after!(self, concatenation_list, arg);
1364    }
1365
1366    /// Semantic action for non-terminal 'ConcatenationItem'
1367    fn concatenation_item(&mut self, arg: &ConcatenationItem) {
1368        before!(self, concatenation_item, arg);
1369        self.expression(&arg.expression);
1370        if let Some(ref x) = arg.concatenation_item_opt {
1371            self.repeat(&x.repeat);
1372            self.expression(&x.expression);
1373        }
1374        after!(self, concatenation_item, arg);
1375    }
1376
1377    /// Semantic action for non-terminal 'ArrayLiteralList'
1378    fn array_literal_list(&mut self, arg: &ArrayLiteralList) {
1379        before!(self, array_literal_list, arg);
1380        self.array_literal_item(&arg.array_literal_item);
1381        for x in &arg.array_literal_list_list {
1382            self.comma(&x.comma);
1383            self.array_literal_item(&x.array_literal_item);
1384        }
1385        if let Some(ref x) = arg.array_literal_list_opt {
1386            self.comma(&x.comma);
1387        }
1388        after!(self, array_literal_list, arg);
1389    }
1390
1391    /// Semantic action for non-terminal 'ArrayLiteralItem'
1392    fn array_literal_item(&mut self, arg: &ArrayLiteralItem) {
1393        before!(self, array_literal_item, arg);
1394        match &*arg.array_literal_item_group {
1395            ArrayLiteralItemGroup::ExpressionArrayLiteralItemOpt(x) => {
1396                self.expression(&x.expression);
1397                if let Some(ref x) = x.array_literal_item_opt {
1398                    self.repeat(&x.repeat);
1399                    self.expression(&x.expression);
1400                }
1401            }
1402            ArrayLiteralItemGroup::DefaulColonExpression(x) => {
1403                self.defaul(&x.defaul);
1404                self.colon(&x.colon);
1405                self.expression(&x.expression);
1406            }
1407        }
1408        after!(self, array_literal_item, arg);
1409    }
1410
1411    /// Semantic action for non-terminal 'CaseExpression'
1412    fn case_expression(&mut self, arg: &CaseExpression) {
1413        before!(self, case_expression, arg);
1414        self.case(&arg.case);
1415        self.expression(&arg.expression);
1416        self.l_brace(&arg.l_brace);
1417        self.case_condition(&arg.case_condition);
1418        self.colon(&arg.colon);
1419        self.expression(&arg.expression0);
1420        self.comma(&arg.comma);
1421        for x in &arg.case_expression_list {
1422            self.case_condition(&x.case_condition);
1423            self.colon(&x.colon);
1424            self.expression(&x.expression);
1425            self.comma(&x.comma);
1426        }
1427        self.defaul(&arg.defaul);
1428        self.colon(&arg.colon0);
1429        self.expression(&arg.expression1);
1430        if let Some(ref x) = arg.case_expression_opt {
1431            self.comma(&x.comma);
1432        }
1433        self.r_brace(&arg.r_brace);
1434        after!(self, case_expression, arg);
1435    }
1436
1437    /// Semantic action for non-terminal 'SwitchExpression'
1438    fn switch_expression(&mut self, arg: &SwitchExpression) {
1439        before!(self, switch_expression, arg);
1440        self.switch(&arg.switch);
1441        self.l_brace(&arg.l_brace);
1442        self.switch_condition(&arg.switch_condition);
1443        self.colon(&arg.colon);
1444        self.expression(&arg.expression);
1445        self.comma(&arg.comma);
1446        for x in &arg.switch_expression_list {
1447            self.switch_condition(&x.switch_condition);
1448            self.colon(&x.colon);
1449            self.expression(&x.expression);
1450            self.comma(&x.comma);
1451        }
1452        self.defaul(&arg.defaul);
1453        self.colon(&arg.colon0);
1454        self.expression(&arg.expression0);
1455        if let Some(ref x) = arg.switch_expression_opt {
1456            self.comma(&x.comma);
1457        }
1458        self.r_brace(&arg.r_brace);
1459        after!(self, switch_expression, arg);
1460    }
1461
1462    /// Semantic action for non-terminal 'TypeExpression'
1463    fn type_expression(&mut self, arg: &TypeExpression) {
1464        before!(self, type_expression, arg);
1465        self.r#type(&arg.r#type);
1466        self.l_paren(&arg.l_paren);
1467        self.expression(&arg.expression);
1468        self.r_paren(&arg.r_paren);
1469        after!(self, type_expression, arg);
1470    }
1471
1472    /// Semantic action for non-terminal 'InsideExpression'
1473    fn inside_expression(&mut self, arg: &InsideExpression) {
1474        before!(self, inside_expression, arg);
1475        self.inside(&arg.inside);
1476        self.expression(&arg.expression);
1477        self.l_brace(&arg.l_brace);
1478        self.range_list(&arg.range_list);
1479        self.r_brace(&arg.r_brace);
1480        after!(self, inside_expression, arg);
1481    }
1482
1483    /// Semantic action for non-terminal 'OutsideExpression'
1484    fn outside_expression(&mut self, arg: &OutsideExpression) {
1485        before!(self, outside_expression, arg);
1486        self.outside(&arg.outside);
1487        self.expression(&arg.expression);
1488        self.l_brace(&arg.l_brace);
1489        self.range_list(&arg.range_list);
1490        self.r_brace(&arg.r_brace);
1491        after!(self, outside_expression, arg);
1492    }
1493
1494    /// Semantic action for non-terminal 'RangeList'
1495    fn range_list(&mut self, arg: &RangeList) {
1496        before!(self, range_list, arg);
1497        self.range_item(&arg.range_item);
1498        for x in &arg.range_list_list {
1499            self.comma(&x.comma);
1500            self.range_item(&x.range_item);
1501        }
1502        if let Some(ref x) = arg.range_list_opt {
1503            self.comma(&x.comma);
1504        }
1505        after!(self, range_list, arg);
1506    }
1507
1508    /// Semantic action for non-terminal 'RangeItem'
1509    fn range_item(&mut self, arg: &RangeItem) {
1510        before!(self, range_item, arg);
1511        self.range(&arg.range);
1512        after!(self, range_item, arg);
1513    }
1514
1515    /// Semantic action for non-terminal 'Select'
1516    fn select(&mut self, arg: &Select) {
1517        before!(self, select, arg);
1518        self.l_bracket(&arg.l_bracket);
1519        self.expression(&arg.expression);
1520        if let Some(ref x) = arg.select_opt {
1521            self.select_operator(&x.select_operator);
1522            self.expression(&x.expression);
1523        }
1524        self.r_bracket(&arg.r_bracket);
1525        after!(self, select, arg);
1526    }
1527
1528    /// Semantic action for non-terminal 'SelectOperator'
1529    fn select_operator(&mut self, arg: &SelectOperator) {
1530        before!(self, select_operator, arg);
1531        match arg {
1532            SelectOperator::Colon(x) => self.colon(&x.colon),
1533            SelectOperator::PlusColon(x) => self.plus_colon(&x.plus_colon),
1534            SelectOperator::MinusColon(x) => self.minus_colon(&x.minus_colon),
1535            SelectOperator::Step(x) => self.step(&x.step),
1536        }
1537        after!(self, select_operator, arg);
1538    }
1539
1540    /// Semantic action for non-terminal 'Width'
1541    fn width(&mut self, arg: &Width) {
1542        before!(self, width, arg);
1543        self.l_angle(&arg.l_angle);
1544        self.expression(&arg.expression);
1545        for x in &arg.width_list {
1546            self.comma(&x.comma);
1547            self.expression(&x.expression);
1548        }
1549        self.r_angle(&arg.r_angle);
1550        after!(self, width, arg);
1551    }
1552
1553    /// Semantic action for non-terminal 'Array'
1554    fn array(&mut self, arg: &Array) {
1555        before!(self, array, arg);
1556        self.l_bracket(&arg.l_bracket);
1557        self.expression(&arg.expression);
1558        for x in &arg.array_list {
1559            self.comma(&x.comma);
1560            self.expression(&x.expression);
1561        }
1562        self.r_bracket(&arg.r_bracket);
1563        after!(self, array, arg);
1564    }
1565
1566    /// Semantic action for non-terminal 'Range'
1567    fn range(&mut self, arg: &Range) {
1568        before!(self, range, arg);
1569        self.expression(&arg.expression);
1570        if let Some(ref x) = arg.range_opt {
1571            self.range_operator(&x.range_operator);
1572            self.expression(&x.expression);
1573        }
1574        after!(self, range, arg);
1575    }
1576
1577    /// Semantic action for non-terminal 'RangeOperator'
1578    fn range_operator(&mut self, arg: &RangeOperator) {
1579        before!(self, range_operator, arg);
1580        match arg {
1581            RangeOperator::DotDot(x) => self.dot_dot(&x.dot_dot),
1582            RangeOperator::DotDotEqu(x) => self.dot_dot_equ(&x.dot_dot_equ),
1583        }
1584        after!(self, range_operator, arg);
1585    }
1586
1587    /// Semantic action for non-terminal 'FixedType'
1588    fn fixed_type(&mut self, arg: &FixedType) {
1589        before!(self, fixed_type, arg);
1590        match arg {
1591            FixedType::P8(x) => self.p8(&x.p8),
1592            FixedType::P16(x) => self.p16(&x.p16),
1593            FixedType::P32(x) => self.p32(&x.p32),
1594            FixedType::P64(x) => self.p64(&x.p64),
1595            FixedType::U8(x) => self.u8(&x.u8),
1596            FixedType::U16(x) => self.u16(&x.u16),
1597            FixedType::U32(x) => self.u32(&x.u32),
1598            FixedType::U64(x) => self.u64(&x.u64),
1599            FixedType::I8(x) => self.i8(&x.i8),
1600            FixedType::I16(x) => self.i16(&x.i16),
1601            FixedType::I32(x) => self.i32(&x.i32),
1602            FixedType::I64(x) => self.i64(&x.i64),
1603            FixedType::F32(x) => self.f32(&x.f32),
1604            FixedType::F64(x) => self.f64(&x.f64),
1605            FixedType::BBool(x) => self.b_bool(&x.b_bool),
1606            FixedType::LBool(x) => self.l_bool(&x.l_bool),
1607            FixedType::Strin(x) => self.strin(&x.strin),
1608        };
1609        after!(self, fixed_type, arg);
1610    }
1611
1612    /// Semantic action for non-terminal 'VariableType'
1613    fn variable_type(&mut self, arg: &VariableType) {
1614        before!(self, variable_type, arg);
1615        match arg {
1616            VariableType::Clock(x) => self.clock(&x.clock),
1617            VariableType::ClockPosedge(x) => self.clock_posedge(&x.clock_posedge),
1618            VariableType::ClockNegedge(x) => self.clock_negedge(&x.clock_negedge),
1619            VariableType::Reset(x) => self.reset(&x.reset),
1620            VariableType::ResetAsyncHigh(x) => self.reset_async_high(&x.reset_async_high),
1621            VariableType::ResetAsyncLow(x) => self.reset_async_low(&x.reset_async_low),
1622            VariableType::ResetSyncHigh(x) => self.reset_sync_high(&x.reset_sync_high),
1623            VariableType::ResetSyncLow(x) => self.reset_sync_low(&x.reset_sync_low),
1624            VariableType::Logic(x) => self.logic(&x.logic),
1625            VariableType::Bit(x) => self.bit(&x.bit),
1626        };
1627        after!(self, variable_type, arg);
1628    }
1629
1630    /// Semantic action for non-terminal 'UserDefinedType'
1631    fn user_defined_type(&mut self, arg: &UserDefinedType) {
1632        before!(self, user_defined_type, arg);
1633        self.scoped_identifier(&arg.scoped_identifier);
1634        after!(self, user_defined_type, arg);
1635    }
1636
1637    /// Semantic action for non-terminal 'TypeModifier'
1638    fn type_modifier(&mut self, arg: &TypeModifier) {
1639        before!(self, type_modifier, arg);
1640        match arg {
1641            TypeModifier::Tri(x) => self.tri(&x.tri),
1642            TypeModifier::Signed(x) => self.signed(&x.signed),
1643            TypeModifier::Defaul(x) => self.defaul(&x.defaul),
1644        }
1645        after!(self, type_modifier, arg);
1646    }
1647
1648    /// Semantic action for non-terminal 'FactorType'
1649    fn factor_type(&mut self, arg: &FactorType) {
1650        before!(self, factor_type, arg);
1651        match arg.factor_type_group.as_ref() {
1652            FactorTypeGroup::VariableTypeFactorTypeOpt(x) => {
1653                self.variable_type(&x.variable_type);
1654                if let Some(ref x) = x.factor_type_opt {
1655                    self.width(&x.width);
1656                }
1657            }
1658            FactorTypeGroup::FixedType(x) => self.fixed_type(&x.fixed_type),
1659        }
1660        after!(self, factor_type, arg);
1661    }
1662
1663    /// Semantic action for non-terminal 'ScalarType'
1664    fn scalar_type(&mut self, arg: &ScalarType) {
1665        before!(self, scalar_type, arg);
1666        for x in &arg.scalar_type_list {
1667            self.type_modifier(&x.type_modifier);
1668        }
1669        match &*arg.scalar_type_group {
1670            ScalarTypeGroup::UserDefinedTypeScalarTypeOpt(x) => {
1671                self.user_defined_type(&x.user_defined_type);
1672                if let Some(ref x) = x.scalar_type_opt {
1673                    self.width(&x.width);
1674                }
1675            }
1676            ScalarTypeGroup::FactorType(x) => {
1677                self.factor_type(&x.factor_type);
1678            }
1679        }
1680        after!(self, scalar_type, arg);
1681    }
1682
1683    /// Semantic action for non-terminal 'ArrayType'
1684    fn array_type(&mut self, arg: &ArrayType) {
1685        before!(self, array_type, arg);
1686        self.scalar_type(&arg.scalar_type);
1687        if let Some(ref x) = arg.array_type_opt {
1688            self.array(&x.array);
1689        }
1690        after!(self, array_type, arg);
1691    }
1692
1693    /// Semantic action for non-terminal 'CastingType'
1694    fn casting_type(&mut self, arg: &CastingType) {
1695        before!(self, casting_type, arg);
1696        match arg {
1697            CastingType::P8(x) => self.p8(&x.p8),
1698            CastingType::P16(x) => self.p16(&x.p16),
1699            CastingType::P32(x) => self.p32(&x.p32),
1700            CastingType::P64(x) => self.p64(&x.p64),
1701            CastingType::U8(x) => self.u8(&x.u8),
1702            CastingType::U16(x) => self.u16(&x.u16),
1703            CastingType::U32(x) => self.u32(&x.u32),
1704            CastingType::U64(x) => self.u64(&x.u64),
1705            CastingType::I8(x) => self.i8(&x.i8),
1706            CastingType::I16(x) => self.i16(&x.i16),
1707            CastingType::I32(x) => self.i32(&x.i32),
1708            CastingType::I64(x) => self.i64(&x.i64),
1709            CastingType::F32(x) => self.f32(&x.f32),
1710            CastingType::F64(x) => self.f64(&x.f64),
1711            CastingType::BBool(x) => self.b_bool(&x.b_bool),
1712            CastingType::LBool(x) => self.l_bool(&x.l_bool),
1713            CastingType::Clock(x) => self.clock(&x.clock),
1714            CastingType::ClockPosedge(x) => self.clock_posedge(&x.clock_posedge),
1715            CastingType::ClockNegedge(x) => self.clock_negedge(&x.clock_negedge),
1716            CastingType::Reset(x) => self.reset(&x.reset),
1717            CastingType::ResetAsyncHigh(x) => self.reset_async_high(&x.reset_async_high),
1718            CastingType::ResetAsyncLow(x) => self.reset_async_low(&x.reset_async_low),
1719            CastingType::ResetSyncHigh(x) => self.reset_sync_high(&x.reset_sync_high),
1720            CastingType::ResetSyncLow(x) => self.reset_sync_low(&x.reset_sync_low),
1721            CastingType::UserDefinedType(x) => self.user_defined_type(&x.user_defined_type),
1722            CastingType::Based(x) => self.based(&x.based),
1723            CastingType::BaseLess(x) => self.base_less(&x.base_less),
1724        }
1725        after!(self, casting_type, arg);
1726    }
1727
1728    /// Semantic action for non-terminal 'ClockDomain'
1729    fn clock_domain(&mut self, arg: &ClockDomain) {
1730        before!(self, clock_domain, arg);
1731        self.quote(&arg.quote);
1732        self.identifier(&arg.identifier);
1733        after!(self, clock_domain, arg);
1734    }
1735
1736    /// Semantic action for non-terminal 'StatementBlock'
1737    fn statement_block(&mut self, arg: &StatementBlock) {
1738        before!(self, statement_block, arg);
1739        self.l_brace(&arg.l_brace);
1740        for x in &arg.statement_block_list {
1741            self.statement_block_group(&x.statement_block_group);
1742        }
1743        self.r_brace(&arg.r_brace);
1744        after!(self, statement_block, arg);
1745    }
1746
1747    /// Semantic action for non-terminal 'StatementBlockGroup'
1748    fn statement_block_group(&mut self, arg: &StatementBlockGroup) {
1749        before!(self, statement_block_group, arg);
1750        for x in &arg.statement_block_group_list {
1751            self.attribute(&x.attribute);
1752        }
1753        match arg.statement_block_group_group.as_ref() {
1754            StatementBlockGroupGroup::BlockLBraceStatementBlockGroupGroupListRBrace(x) => {
1755                self.block(&x.block);
1756                self.l_brace(&x.l_brace);
1757                for x in &x.statement_block_group_group_list {
1758                    self.statement_block_group(&x.statement_block_group);
1759                }
1760                self.r_brace(&x.r_brace);
1761            }
1762            StatementBlockGroupGroup::StatementBlockItem(x) => {
1763                self.statement_block_item(&x.statement_block_item);
1764            }
1765        }
1766        after!(self, statement_block_group, arg);
1767    }
1768
1769    /// Semantic action for non-terminal 'StatementOrVarDeclaration'
1770    fn statement_block_item(&mut self, arg: &StatementBlockItem) {
1771        before!(self, statement_block_item, arg);
1772        match arg {
1773            StatementBlockItem::VarDeclaration(x) => self.var_declaration(&x.var_declaration),
1774            StatementBlockItem::LetStatement(x) => self.let_statement(&x.let_statement),
1775            StatementBlockItem::Statement(x) => self.statement(&x.statement),
1776            StatementBlockItem::ConstDeclaration(x) => self.const_declaration(&x.const_declaration),
1777            StatementBlockItem::GenDeclaration(x) => self.gen_declaration(&x.gen_declaration),
1778            StatementBlockItem::ConcatenationAssignment(x) => {
1779                self.concatenation_assignment(&x.concatenation_assignment)
1780            }
1781        }
1782        after!(self, statement_block_item, arg);
1783    }
1784
1785    /// Semantic action for non-terminal 'Statement'
1786    fn statement(&mut self, arg: &Statement) {
1787        before!(self, statement, arg);
1788        match arg {
1789            Statement::IdentifierStatement(x) => self.identifier_statement(&x.identifier_statement),
1790            Statement::IfStatement(x) => self.if_statement(&x.if_statement),
1791            Statement::IfResetStatement(x) => self.if_reset_statement(&x.if_reset_statement),
1792            Statement::ReturnStatement(x) => self.return_statement(&x.return_statement),
1793            Statement::BreakStatement(x) => self.break_statement(&x.break_statement),
1794            Statement::ForStatement(x) => self.for_statement(&x.for_statement),
1795            Statement::CaseStatement(x) => self.case_statement(&x.case_statement),
1796            Statement::SwitchStatement(x) => self.switch_statement(&x.switch_statement),
1797        };
1798        after!(self, statement, arg);
1799    }
1800
1801    /// Semantic action for non-terminal 'LetStatement'
1802    fn let_statement(&mut self, arg: &LetStatement) {
1803        before!(self, let_statement, arg);
1804        self.r#let(&arg.r#let);
1805        self.identifier(&arg.identifier);
1806        if let Some(ref x) = arg.let_statement_opt {
1807            self.colon(&x.colon);
1808            if let Some(ref y) = x.let_statement_opt0 {
1809                self.clock_domain(&y.clock_domain);
1810            }
1811            self.array_type(&x.array_type);
1812        }
1813        self.equ(&arg.equ);
1814        self.expression(&arg.expression);
1815        self.semicolon(&arg.semicolon);
1816        after!(self, let_statement, arg);
1817    }
1818
1819    /// Semantic action for non-terminal 'IdentifierStatement'
1820    fn identifier_statement(&mut self, arg: &IdentifierStatement) {
1821        before!(self, identifier_statement, arg);
1822        self.expression_identifier(&arg.expression_identifier);
1823        match &*arg.identifier_statement_group {
1824            IdentifierStatementGroup::FunctionCall(x) => {
1825                self.function_call(&x.function_call);
1826            }
1827            IdentifierStatementGroup::Assignment(x) => {
1828                self.assignment(&x.assignment);
1829            }
1830        }
1831        self.semicolon(&arg.semicolon);
1832        after!(self, identifier_statement, arg);
1833    }
1834
1835    /// Semantic action for non-terminal 'ConcatenationAssignment'
1836    fn concatenation_assignment(&mut self, arg: &ConcatenationAssignment) {
1837        before!(self, concatenation_assignment, arg);
1838        self.l_brace(&arg.l_brace);
1839        self.assign_concatenation_list(&arg.assign_concatenation_list);
1840        self.r_brace(&arg.r_brace);
1841        self.equ(&arg.equ);
1842        self.expression(&arg.expression);
1843        self.semicolon(&arg.semicolon);
1844        after!(self, concatenation_assignment, arg);
1845    }
1846
1847    /// Semantic action for non-terminal 'Assignment'
1848    fn assignment(&mut self, arg: &Assignment) {
1849        before!(self, assignment, arg);
1850        match &*arg.assignment_group {
1851            AssignmentGroup::Equ(x) => self.equ(&x.equ),
1852            AssignmentGroup::AssignmentOperator(x) => {
1853                self.assignment_operator(&x.assignment_operator)
1854            }
1855            AssignmentGroup::DiamondOperator(x) => {
1856                self.diamond_operator(&x.diamond_operator);
1857            }
1858        }
1859        self.expression(&arg.expression);
1860        after!(self, assignment, arg);
1861    }
1862
1863    /// Semantic action for non-terminal 'IfStatement'
1864    fn if_statement(&mut self, arg: &IfStatement) {
1865        before!(self, if_statement, arg);
1866        self.r#if(&arg.r#if);
1867        self.expression(&arg.expression);
1868        self.statement_block(&arg.statement_block);
1869        for x in &arg.if_statement_list {
1870            self.r#else(&x.r#else);
1871            self.r#if(&x.r#if);
1872            self.expression(&x.expression);
1873            self.statement_block(&x.statement_block);
1874        }
1875        if let Some(ref x) = arg.if_statement_opt {
1876            self.r#else(&x.r#else);
1877            self.statement_block(&x.statement_block);
1878        }
1879        after!(self, if_statement, arg);
1880    }
1881
1882    /// Semantic action for non-terminal 'IfResetStatement'
1883    fn if_reset_statement(&mut self, arg: &IfResetStatement) {
1884        before!(self, if_reset_statement, arg);
1885        self.if_reset(&arg.if_reset);
1886        self.statement_block(&arg.statement_block);
1887        for x in &arg.if_reset_statement_list {
1888            self.r#else(&x.r#else);
1889            self.r#if(&x.r#if);
1890            self.expression(&x.expression);
1891            self.statement_block(&x.statement_block);
1892        }
1893        if let Some(ref x) = arg.if_reset_statement_opt {
1894            self.r#else(&x.r#else);
1895            self.statement_block(&x.statement_block);
1896        }
1897        after!(self, if_reset_statement, arg);
1898    }
1899
1900    /// Semantic action for non-terminal 'ReturnStatement'
1901    fn return_statement(&mut self, arg: &ReturnStatement) {
1902        before!(self, return_statement, arg);
1903        self.r#return(&arg.r#return);
1904        self.expression(&arg.expression);
1905        self.semicolon(&arg.semicolon);
1906        after!(self, return_statement, arg);
1907    }
1908
1909    /// Semantic action for non-terminal 'BreakStatement'
1910    fn break_statement(&mut self, arg: &BreakStatement) {
1911        before!(self, break_statement, arg);
1912        self.r#break(&arg.r#break);
1913        self.semicolon(&arg.semicolon);
1914        after!(self, break_statement, arg);
1915    }
1916
1917    /// Semantic action for non-terminal 'ForStatement'
1918    fn for_statement(&mut self, arg: &ForStatement) {
1919        before!(self, for_statement, arg);
1920        self.r#for(&arg.r#for);
1921        self.identifier(&arg.identifier);
1922        self.r#in(&arg.r#in);
1923        if let Some(ref x) = arg.for_statement_opt {
1924            self.rev(&x.rev);
1925        }
1926        self.range(&arg.range);
1927        if let Some(ref x) = arg.for_statement_opt0 {
1928            self.step(&x.step);
1929            self.assignment_operator(&x.assignment_operator);
1930            self.expression(&x.expression);
1931        }
1932        self.statement_block(&arg.statement_block);
1933        after!(self, for_statement, arg);
1934    }
1935
1936    /// Semantic action for non-terminal 'CaseStatement'
1937    fn case_statement(&mut self, arg: &CaseStatement) {
1938        before!(self, case_statement, arg);
1939        self.case(&arg.case);
1940        self.expression(&arg.expression);
1941        self.l_brace(&arg.l_brace);
1942        for x in &arg.case_statement_list {
1943            self.case_item(&x.case_item);
1944        }
1945        self.r_brace(&arg.r_brace);
1946        after!(self, case_statement, arg);
1947    }
1948
1949    /// Semantic action for non-terminal 'CaseItem'
1950    fn case_item(&mut self, arg: &CaseItem) {
1951        before!(self, case_item, arg);
1952        match &*arg.case_item_group {
1953            CaseItemGroup::CaseCondition(x) => self.case_condition(&x.case_condition),
1954            CaseItemGroup::Defaul(x) => self.defaul(&x.defaul),
1955        }
1956        self.colon(&arg.colon);
1957        match &*arg.case_item_group0 {
1958            CaseItemGroup0::Statement(x) => self.statement(&x.statement),
1959            CaseItemGroup0::StatementBlock(x) => self.statement_block(&x.statement_block),
1960        }
1961        after!(self, case_item, arg);
1962    }
1963
1964    /// Semantic action for non-terminal 'CaseCondition'
1965    fn case_condition(&mut self, arg: &CaseCondition) {
1966        before!(self, case_condition, arg);
1967        self.range_item(&arg.range_item);
1968        for x in &arg.case_condition_list {
1969            self.comma(&x.comma);
1970            self.range_item(&x.range_item);
1971        }
1972        after!(self, case_condition, arg);
1973    }
1974
1975    /// Semantic action for non-terminal 'SwitchStatement'
1976    fn switch_statement(&mut self, arg: &SwitchStatement) {
1977        before!(self, switch_statement, arg);
1978        self.switch(&arg.switch);
1979        self.l_brace(&arg.l_brace);
1980        for x in &arg.switch_statement_list {
1981            self.switch_item(&x.switch_item);
1982        }
1983        self.r_brace(&arg.r_brace);
1984        after!(self, switch_statement, arg);
1985    }
1986
1987    /// Semantic action for non-terminal 'SwitchItem'
1988    fn switch_item(&mut self, arg: &SwitchItem) {
1989        before!(self, switch_item, arg);
1990        match &*arg.switch_item_group {
1991            SwitchItemGroup::SwitchCondition(x) => self.switch_condition(&x.switch_condition),
1992            SwitchItemGroup::Defaul(x) => self.defaul(&x.defaul),
1993        }
1994        self.colon(&arg.colon);
1995        match &*arg.switch_item_group0 {
1996            SwitchItemGroup0::Statement(x) => self.statement(&x.statement),
1997            SwitchItemGroup0::StatementBlock(x) => self.statement_block(&x.statement_block),
1998        }
1999        after!(self, switch_item, arg);
2000    }
2001
2002    /// Semantic action for non-terminal 'SwitchCondition'
2003    fn switch_condition(&mut self, arg: &SwitchCondition) {
2004        before!(self, switch_condition, arg);
2005        self.expression(&arg.expression);
2006        for x in &arg.switch_condition_list {
2007            self.comma(&x.comma);
2008            self.expression(&x.expression);
2009        }
2010        after!(self, switch_condition, arg);
2011    }
2012
2013    /// Semantic action for non-terminal 'Attribute'
2014    fn attribute(&mut self, arg: &Attribute) {
2015        before!(self, attribute, arg);
2016        self.hash_l_bracket(&arg.hash_l_bracket);
2017        self.identifier(&arg.identifier);
2018        if let Some(ref x) = arg.attribute_opt {
2019            self.l_paren(&x.l_paren);
2020            self.attribute_list(&x.attribute_list);
2021            self.r_paren(&x.r_paren);
2022        }
2023        self.r_bracket(&arg.r_bracket);
2024        after!(self, attribute, arg);
2025    }
2026
2027    /// Semantic action for non-terminal 'AttributeList'
2028    fn attribute_list(&mut self, arg: &AttributeList) {
2029        before!(self, attribute_list, arg);
2030        self.attribute_item(&arg.attribute_item);
2031        for x in &arg.attribute_list_list {
2032            self.comma(&x.comma);
2033            self.attribute_item(&x.attribute_item);
2034        }
2035        if let Some(ref x) = arg.attribute_list_opt {
2036            self.comma(&x.comma);
2037        }
2038        after!(self, attribute_list, arg);
2039    }
2040
2041    /// Semantic action for non-terminal 'AttributeItem'
2042    fn attribute_item(&mut self, arg: &AttributeItem) {
2043        before!(self, attribute_item, arg);
2044        match arg {
2045            AttributeItem::Identifier(x) => self.identifier(&x.identifier),
2046            AttributeItem::StringLiteral(x) => self.string_literal(&x.string_literal),
2047        }
2048        after!(self, attribute_item, arg);
2049    }
2050
2051    /// Semantic action for non-terminal 'LetDeclaration'
2052    fn let_declaration(&mut self, arg: &LetDeclaration) {
2053        before!(self, let_declaration, arg);
2054        self.r#let(&arg.r#let);
2055        self.identifier(&arg.identifier);
2056        if let Some(ref x) = arg.let_declaration_opt {
2057            self.colon(&x.colon);
2058            if let Some(ref y) = x.let_declaration_opt0 {
2059                self.clock_domain(&y.clock_domain);
2060            }
2061            self.array_type(&x.array_type);
2062        }
2063        self.equ(&arg.equ);
2064        self.expression(&arg.expression);
2065        self.semicolon(&arg.semicolon);
2066        after!(self, let_declaration, arg);
2067    }
2068
2069    /// Semantic action for non-terminal 'VarDeclaration'
2070    fn var_declaration(&mut self, arg: &VarDeclaration) {
2071        before!(self, var_declaration, arg);
2072        self.var(&arg.var);
2073        self.identifier(&arg.identifier);
2074        if let Some(ref x) = arg.var_declaration_opt {
2075            self.colon(&x.colon);
2076            if let Some(ref y) = x.var_declaration_opt0 {
2077                self.clock_domain(&y.clock_domain);
2078            }
2079            self.array_type(&x.array_type);
2080        }
2081        self.semicolon(&arg.semicolon);
2082        after!(self, var_declaration, arg);
2083    }
2084
2085    /// Semantic action for non-terminal 'ConstDeclaration'
2086    fn const_declaration(&mut self, arg: &ConstDeclaration) {
2087        before!(self, const_declaration, arg);
2088        self.r#const(&arg.r#const);
2089        self.identifier(&arg.identifier);
2090        if let Some(ref x) = arg.const_declaration_opt {
2091            self.colon(&x.colon);
2092            match &*x.const_declaration_opt_group {
2093                ConstDeclarationOptGroup::ArrayType(x) => {
2094                    self.array_type(&x.array_type);
2095                }
2096                ConstDeclarationOptGroup::Type(x) => {
2097                    self.r#type(&x.r#type);
2098                }
2099            }
2100        }
2101        self.equ(&arg.equ);
2102        self.expression(&arg.expression);
2103        self.semicolon(&arg.semicolon);
2104        after!(self, const_declaration, arg);
2105    }
2106
2107    /// Semantic action for non-terminal 'GenDeclaration'
2108    fn gen_declaration(&mut self, arg: &GenDeclaration) {
2109        before!(self, gen_declaration, arg);
2110        self.r#gen(&arg.r#gen);
2111        self.identifier(&arg.identifier);
2112        self.colon(&arg.colon);
2113        match &*arg.gen_declaration_group {
2114            GenDeclarationGroup::GenericProtoBound(x) => {
2115                self.generic_proto_bound(&x.generic_proto_bound);
2116            }
2117            GenDeclarationGroup::Type(x) => {
2118                self.r#type(&x.r#type);
2119            }
2120        }
2121        self.equ(&arg.equ);
2122        self.expression(&arg.expression);
2123        self.semicolon(&arg.semicolon);
2124        after!(self, gen_declaration, arg);
2125    }
2126
2127    /// Semantic action for non-terminal 'TypeDefDeclaration'
2128    fn type_def_declaration(&mut self, arg: &TypeDefDeclaration) {
2129        before!(self, type_def_declaration, arg);
2130        self.r#type(&arg.r#type);
2131        self.identifier(&arg.identifier);
2132        self.equ(&arg.equ);
2133        self.array_type(&arg.array_type);
2134        self.semicolon(&arg.semicolon);
2135        after!(self, type_def_declaration, arg);
2136    }
2137
2138    /// Semantic action for non-terminal 'AlwaysFfDeclaration'
2139    fn always_ff_declaration(&mut self, arg: &AlwaysFfDeclaration) {
2140        before!(self, always_ff_declaration, arg);
2141        self.always_ff(&arg.always_ff);
2142        if let Some(ref x) = arg.always_ff_declaration_opt {
2143            self.always_ff_event_list(&x.always_ff_event_list);
2144        }
2145        self.statement_block(&arg.statement_block);
2146        after!(self, always_ff_declaration, arg);
2147    }
2148
2149    /// Semantic action for non-terminal 'AlwaysFfEventList'
2150    fn always_ff_event_list(&mut self, arg: &AlwaysFfEventList) {
2151        before!(self, always_ff_event_list, arg);
2152        self.l_paren(&arg.l_paren);
2153        self.always_ff_clock(&arg.always_ff_clock);
2154        if let Some(ref x) = arg.always_ff_event_list_opt {
2155            self.comma(&x.comma);
2156            self.always_ff_reset(&x.always_ff_reset);
2157        }
2158        self.r_paren(&arg.r_paren);
2159        after!(self, always_ff_event_list, arg);
2160    }
2161
2162    /// Semantic action for non-terminal 'AlwaysFfClock'
2163    fn always_ff_clock(&mut self, arg: &AlwaysFfClock) {
2164        before!(self, always_ff_clock, arg);
2165        self.hierarchical_identifier(&arg.hierarchical_identifier);
2166        after!(self, always_ff_clock, arg);
2167    }
2168
2169    /// Semantic action for non-terminal 'AlwaysFfReset'
2170    fn always_ff_reset(&mut self, arg: &AlwaysFfReset) {
2171        before!(self, always_ff_reset, arg);
2172        self.hierarchical_identifier(&arg.hierarchical_identifier);
2173        after!(self, always_ff_reset, arg);
2174    }
2175
2176    /// Semantic action for non-terminal 'AlwaysCombDeclaration'
2177    fn always_comb_declaration(&mut self, arg: &AlwaysCombDeclaration) {
2178        before!(self, always_comb_declaration, arg);
2179        self.always_comb(&arg.always_comb);
2180        self.statement_block(&arg.statement_block);
2181        after!(self, always_comb_declaration, arg);
2182    }
2183
2184    /// Semantic action for non-terminal 'AssignDeclaration'
2185    fn assign_declaration(&mut self, arg: &AssignDeclaration) {
2186        before!(self, assign_declaration, arg);
2187        self.assign(&arg.assign);
2188        self.assign_destination(&arg.assign_destination);
2189        self.equ(&arg.equ);
2190        self.expression(&arg.expression);
2191        self.semicolon(&arg.semicolon);
2192        after!(self, assign_declaration, arg);
2193    }
2194
2195    /// Semantic action for non-terminal 'AssignDestination'
2196    fn assign_destination(&mut self, arg: &AssignDestination) {
2197        before!(self, assign_destination, arg);
2198        match arg {
2199            AssignDestination::HierarchicalIdentifier(x) => {
2200                self.hierarchical_identifier(&x.hierarchical_identifier);
2201            }
2202            AssignDestination::LBraceAssignConcatenationListRBrace(x) => {
2203                self.l_brace(&x.l_brace);
2204                self.assign_concatenation_list(&x.assign_concatenation_list);
2205                self.r_brace(&x.r_brace);
2206            }
2207        }
2208        after!(self, assign_destination, arg);
2209    }
2210
2211    /// Semantic action for non-terminal 'AssignConcatenationList'
2212    fn assign_concatenation_list(&mut self, arg: &AssignConcatenationList) {
2213        before!(self, assign_concatenation_list, arg);
2214        self.assign_concatenation_item(&arg.assign_concatenation_item);
2215        for x in &arg.assign_concatenation_list_list {
2216            self.comma(&x.comma);
2217            self.assign_concatenation_item(&x.assign_concatenation_item);
2218        }
2219        if let Some(ref x) = arg.assign_concatenation_list_opt {
2220            self.comma(&x.comma);
2221        }
2222        after!(self, assign_concatenation_list, arg);
2223    }
2224
2225    /// Semantic action for non-terminal 'AssignConcatenationItem'
2226    fn assign_concatenation_item(&mut self, arg: &AssignConcatenationItem) {
2227        before!(self, assign_concatenation_item, arg);
2228        self.hierarchical_identifier(&arg.hierarchical_identifier);
2229        after!(self, assign_concatenation_item, arg);
2230    }
2231
2232    /// Semantic action for non-terminal 'ConnectDeclaration'
2233    fn connect_declaration(&mut self, arg: &ConnectDeclaration) {
2234        before!(self, connect_declaration, arg);
2235        self.connect(&arg.connect);
2236        self.hierarchical_identifier(&arg.hierarchical_identifier);
2237        self.diamond_operator(&arg.diamond_operator);
2238        self.expression(&arg.expression);
2239        self.semicolon(&arg.semicolon);
2240        after!(self, connect_declaration, arg);
2241    }
2242
2243    /// Semantic action for non-terminal 'ModportDeclaration'
2244    fn modport_declaration(&mut self, arg: &ModportDeclaration) {
2245        before!(self, modport_declaration, arg);
2246        self.modport(&arg.modport);
2247        self.identifier(&arg.identifier);
2248        self.l_brace(&arg.l_brace);
2249        if let Some(ref x) = arg.modport_declaration_opt {
2250            self.modport_list(&x.modport_list);
2251        }
2252        if let Some(ref x) = arg.modport_declaration_opt0 {
2253            self.dot_dot(&x.dot_dot);
2254            self.modport_default(&x.modport_default);
2255        }
2256        self.r_brace(&arg.r_brace);
2257        after!(self, modport_declaration, arg);
2258    }
2259
2260    /// Semantic action for non-terminal 'ModportList'
2261    fn modport_list(&mut self, arg: &ModportList) {
2262        before!(self, modport_list, arg);
2263        self.modport_group(&arg.modport_group);
2264        for x in &arg.modport_list_list {
2265            self.comma(&x.comma);
2266            self.modport_group(&x.modport_group);
2267        }
2268        if let Some(ref x) = arg.modport_list_opt {
2269            self.comma(&x.comma);
2270        }
2271        after!(self, modport_list, arg);
2272    }
2273
2274    /// Semantic action for non-terminal 'ModportGroup'
2275    fn modport_group(&mut self, arg: &ModportGroup) {
2276        before!(self, modport_group, arg);
2277        for x in &arg.modport_group_list {
2278            self.attribute(&x.attribute);
2279        }
2280        match &*arg.modport_group_group {
2281            ModportGroupGroup::LBraceModportListRBrace(x) => {
2282                self.l_brace(&x.l_brace);
2283                self.modport_list(&x.modport_list);
2284                self.r_brace(&x.r_brace);
2285            }
2286            ModportGroupGroup::ModportItem(x) => self.modport_item(&x.modport_item),
2287        }
2288        after!(self, modport_group, arg);
2289    }
2290
2291    /// Semantic action for non-terminal 'ModportItem'
2292    fn modport_item(&mut self, arg: &ModportItem) {
2293        before!(self, modport_item, arg);
2294        self.identifier(&arg.identifier);
2295        self.colon(&arg.colon);
2296        self.direction(&arg.direction);
2297        after!(self, modport_item, arg);
2298    }
2299
2300    /// Semantic action for non-terminal 'ModportDefault'
2301    fn modport_default(&mut self, arg: &ModportDefault) {
2302        before!(self, modport_default, arg);
2303        match arg {
2304            ModportDefault::Input(x) => self.input(&x.input),
2305            ModportDefault::Output(x) => self.output(&x.output),
2306            ModportDefault::SameLParenModportDefaultListRParen(x) => {
2307                self.same(&x.same);
2308                self.l_paren(&x.l_paren);
2309                self.modport_default_list(&x.modport_default_list);
2310                self.r_paren(&x.r_paren);
2311            }
2312            ModportDefault::ConverseLParenModportDefaultListRParen(x) => {
2313                self.converse(&x.converse);
2314                self.l_paren(&x.l_paren);
2315                self.modport_default_list(&x.modport_default_list);
2316                self.r_paren(&x.r_paren);
2317            }
2318        }
2319        after!(self, modport_default, arg);
2320    }
2321
2322    /// Semantic action for non-terminal 'ModportDefaultList'
2323    fn modport_default_list(&mut self, arg: &ModportDefaultList) {
2324        before!(self, modport_default_list, arg);
2325        self.identifier(&arg.identifier);
2326        for x in &arg.modport_default_list_list {
2327            self.comma(&x.comma);
2328            self.identifier(&x.identifier);
2329        }
2330        if let Some(ref x) = arg.modport_default_list_opt {
2331            self.comma(&x.comma);
2332        }
2333        after!(self, modport_default_list, arg);
2334    }
2335
2336    /// Semantic action for non-terminal 'EnumDeclaration'
2337    fn enum_declaration(&mut self, arg: &EnumDeclaration) {
2338        before!(self, enum_declaration, arg);
2339        self.r#enum(&arg.r#enum);
2340        self.identifier(&arg.identifier);
2341        if let Some(ref x) = arg.enum_declaration_opt {
2342            self.colon(&x.colon);
2343            self.scalar_type(&x.scalar_type);
2344        }
2345        self.l_brace(&arg.l_brace);
2346        self.enum_list(&arg.enum_list);
2347        self.r_brace(&arg.r_brace);
2348        after!(self, enum_declaration, arg);
2349    }
2350
2351    /// Semantic action for non-terminal 'EnumList'
2352    fn enum_list(&mut self, arg: &EnumList) {
2353        before!(self, enum_list, arg);
2354        self.enum_group(&arg.enum_group);
2355        for x in &arg.enum_list_list {
2356            self.comma(&x.comma);
2357            self.enum_group(&x.enum_group);
2358        }
2359        if let Some(ref x) = arg.enum_list_opt {
2360            self.comma(&x.comma);
2361        }
2362        after!(self, enum_list, arg);
2363    }
2364
2365    /// Semantic action for non-terminal 'EnumGroup'
2366    fn enum_group(&mut self, arg: &EnumGroup) {
2367        before!(self, enum_group, arg);
2368        for x in &arg.enum_group_list {
2369            self.attribute(&x.attribute);
2370        }
2371        match &*arg.enum_group_group {
2372            EnumGroupGroup::LBraceEnumListRBrace(x) => {
2373                self.l_brace(&x.l_brace);
2374                self.enum_list(&x.enum_list);
2375                self.r_brace(&x.r_brace);
2376            }
2377            EnumGroupGroup::EnumItem(x) => self.enum_item(&x.enum_item),
2378        }
2379        after!(self, enum_group, arg);
2380    }
2381
2382    /// Semantic action for non-terminal 'EnumItem'
2383    fn enum_item(&mut self, arg: &EnumItem) {
2384        before!(self, enum_item, arg);
2385        self.identifier(&arg.identifier);
2386        if let Some(ref x) = arg.enum_item_opt {
2387            self.equ(&x.equ);
2388            self.expression(&x.expression);
2389        }
2390        after!(self, enum_item, arg);
2391    }
2392
2393    /// Semantic action for non-terminal 'StructUnionDeclaration'
2394    fn struct_union_declaration(&mut self, arg: &StructUnionDeclaration) {
2395        before!(self, struct_union_declaration, arg);
2396        self.struct_union(&arg.struct_union);
2397        self.identifier(&arg.identifier);
2398        if let Some(ref x) = arg.struct_union_declaration_opt {
2399            self.with_generic_parameter(&x.with_generic_parameter);
2400        }
2401        self.l_brace(&arg.l_brace);
2402        self.struct_union_list(&arg.struct_union_list);
2403        self.r_brace(&arg.r_brace);
2404        after!(self, struct_union_declaration, arg);
2405    }
2406
2407    fn struct_union(&mut self, arg: &StructUnion) {
2408        before!(self, struct_union, arg);
2409        match arg {
2410            StructUnion::Struct(x) => {
2411                self.r#struct(&x.r#struct);
2412            }
2413            StructUnion::Union(x) => {
2414                self.union(&x.union);
2415            }
2416        }
2417        after!(self, struct_union, arg);
2418    }
2419
2420    /// Semantic action for non-terminal 'StructList'
2421    fn struct_union_list(&mut self, arg: &StructUnionList) {
2422        before!(self, struct_union_list, arg);
2423        self.struct_union_group(&arg.struct_union_group);
2424        for x in &arg.struct_union_list_list {
2425            self.comma(&x.comma);
2426            self.struct_union_group(&x.struct_union_group);
2427        }
2428        if let Some(ref x) = arg.struct_union_list_opt {
2429            self.comma(&x.comma);
2430        }
2431        after!(self, struct_union_list, arg);
2432    }
2433
2434    /// Semantic action for non-terminal 'struct_unionUnionGroup'
2435    fn struct_union_group(&mut self, arg: &StructUnionGroup) {
2436        before!(self, struct_union_group, arg);
2437        for x in &arg.struct_union_group_list {
2438            self.attribute(&x.attribute);
2439        }
2440        match &*arg.struct_union_group_group {
2441            StructUnionGroupGroup::LBraceStructUnionListRBrace(x) => {
2442                self.l_brace(&x.l_brace);
2443                self.struct_union_list(&x.struct_union_list);
2444                self.r_brace(&x.r_brace);
2445            }
2446            StructUnionGroupGroup::StructUnionItem(x) => {
2447                self.struct_union_item(&x.struct_union_item)
2448            }
2449        }
2450        after!(self, struct_union_group, arg);
2451    }
2452
2453    /// Semantic action for non-terminal 'struct_unionUnionItem'
2454    fn struct_union_item(&mut self, arg: &StructUnionItem) {
2455        before!(self, struct_union_item, arg);
2456        self.identifier(&arg.identifier);
2457        self.colon(&arg.colon);
2458        self.scalar_type(&arg.scalar_type);
2459        after!(self, struct_union_item, arg);
2460    }
2461
2462    /// Semantic action for non-terminal 'InitialDeclaration'
2463    fn initial_declaration(&mut self, arg: &InitialDeclaration) {
2464        before!(self, initial_declaration, arg);
2465        self.initial(&arg.initial);
2466        self.statement_block(&arg.statement_block);
2467        after!(self, initial_declaration, arg);
2468    }
2469
2470    /// Semantic action for non-terminal 'FinalDeclaration'
2471    fn final_declaration(&mut self, arg: &FinalDeclaration) {
2472        before!(self, final_declaration, arg);
2473        self.r#final(&arg.r#final);
2474        self.statement_block(&arg.statement_block);
2475        after!(self, final_declaration, arg);
2476    }
2477
2478    /// Semantic action for non-terminal 'InstDeclaration'
2479    fn inst_declaration(&mut self, arg: &InstDeclaration) {
2480        before!(self, inst_declaration, arg);
2481        self.inst(&arg.inst);
2482        self.component_instantiation(&arg.component_instantiation);
2483        self.semicolon(&arg.semicolon);
2484        after!(self, inst_declaration, arg);
2485    }
2486
2487    /// Semantic action for non-terminal 'BindDeclaration'
2488    fn bind_declaration(&mut self, arg: &BindDeclaration) {
2489        before!(self, bind_declaration, arg);
2490        self.bind(&arg.bind);
2491        self.scoped_identifier(&arg.scoped_identifier);
2492        self.l_t_minus(&arg.l_t_minus);
2493        self.component_instantiation(&arg.component_instantiation);
2494        self.semicolon(&arg.semicolon);
2495        after!(self, bind_declaration, arg);
2496    }
2497
2498    /// Semantic action for non-terminal 'ComponentInstantiation'
2499    fn component_instantiation(&mut self, arg: &ComponentInstantiation) {
2500        before!(self, component_instantiation, arg);
2501        self.identifier(&arg.identifier);
2502        self.colon(&arg.colon);
2503        if let Some(ref x) = arg.component_instantiation_opt {
2504            self.clock_domain(&x.clock_domain);
2505        }
2506        self.scoped_identifier(&arg.scoped_identifier);
2507        if let Some(ref x) = arg.component_instantiation_opt0 {
2508            self.array(&x.array);
2509        }
2510        if let Some(ref x) = arg.component_instantiation_opt1 {
2511            self.inst_parameter(&x.inst_parameter);
2512        }
2513        if let Some(ref x) = arg.component_instantiation_opt2 {
2514            self.inst_port(&x.inst_port);
2515        }
2516        after!(self, component_instantiation, arg);
2517    }
2518
2519    /// Semantic action for non-terminal 'InstParameter'
2520    fn inst_parameter(&mut self, arg: &InstParameter) {
2521        before!(self, inst_parameter, arg);
2522        self.hash(&arg.hash);
2523        self.l_paren(&arg.l_paren);
2524        if let Some(ref x) = arg.inst_parameter_opt {
2525            self.inst_parameter_list(&x.inst_parameter_list);
2526        }
2527        self.r_paren(&arg.r_paren);
2528        after!(self, inst_parameter, arg);
2529    }
2530
2531    /// Semantic action for non-terminal 'InstParameterList'
2532    fn inst_parameter_list(&mut self, arg: &InstParameterList) {
2533        before!(self, inst_parameter_list, arg);
2534        self.inst_parameter_group(&arg.inst_parameter_group);
2535        for x in &arg.inst_parameter_list_list {
2536            self.comma(&x.comma);
2537            self.inst_parameter_group(&x.inst_parameter_group);
2538        }
2539        if let Some(ref x) = arg.inst_parameter_list_opt {
2540            self.comma(&x.comma);
2541        }
2542        after!(self, inst_parameter_list, arg);
2543    }
2544
2545    /// Semantic action for non-terminal 'InstParameterGroup'
2546    fn inst_parameter_group(&mut self, arg: &InstParameterGroup) {
2547        before!(self, inst_parameter_group, arg);
2548        for x in &arg.inst_parameter_group_list {
2549            self.attribute(&x.attribute);
2550        }
2551        match &*arg.inst_parameter_group_group {
2552            InstParameterGroupGroup::LBraceInstParameterListRBrace(x) => {
2553                self.l_brace(&x.l_brace);
2554                self.inst_parameter_list(&x.inst_parameter_list);
2555                self.r_brace(&x.r_brace);
2556            }
2557            InstParameterGroupGroup::InstParameterItem(x) => {
2558                self.inst_parameter_item(&x.inst_parameter_item)
2559            }
2560        }
2561        after!(self, inst_parameter_group, arg);
2562    }
2563
2564    /// Semantic action for non-terminal 'InstParameterItem'
2565    fn inst_parameter_item(&mut self, arg: &InstParameterItem) {
2566        before!(self, inst_parameter_item, arg);
2567        self.identifier(&arg.identifier);
2568        if let Some(ref x) = arg.inst_parameter_item_opt {
2569            self.colon(&x.colon);
2570            self.expression(&x.expression);
2571        }
2572        after!(self, inst_parameter_item, arg);
2573    }
2574
2575    /// Semantic action for non-terminal 'InstPort'
2576    fn inst_port(&mut self, arg: &InstPort) {
2577        before!(self, inst_port, arg);
2578        self.l_paren(&arg.l_paren);
2579        if let Some(ref x) = arg.inst_port_opt {
2580            self.inst_port_list(&x.inst_port_list);
2581        }
2582        self.r_paren(&arg.r_paren);
2583        after!(self, inst_port, arg);
2584    }
2585
2586    /// Semantic action for non-terminal 'InstPortList'
2587    fn inst_port_list(&mut self, arg: &InstPortList) {
2588        before!(self, inst_port_list, arg);
2589        self.inst_port_group(&arg.inst_port_group);
2590        for x in &arg.inst_port_list_list {
2591            self.comma(&x.comma);
2592            self.inst_port_group(&x.inst_port_group);
2593        }
2594        if let Some(ref x) = arg.inst_port_list_opt {
2595            self.comma(&x.comma);
2596        }
2597        after!(self, inst_port_list, arg);
2598    }
2599
2600    /// Semantic action for non-terminal 'InstPortGroup'
2601    fn inst_port_group(&mut self, arg: &InstPortGroup) {
2602        before!(self, inst_port_group, arg);
2603        for x in &arg.inst_port_group_list {
2604            self.attribute(&x.attribute);
2605        }
2606        match &*arg.inst_port_group_group {
2607            InstPortGroupGroup::LBraceInstPortListRBrace(x) => {
2608                self.l_brace(&x.l_brace);
2609                self.inst_port_list(&x.inst_port_list);
2610                self.r_brace(&x.r_brace);
2611            }
2612            InstPortGroupGroup::InstPortItem(x) => self.inst_port_item(&x.inst_port_item),
2613        }
2614        after!(self, inst_port_group, arg);
2615    }
2616
2617    /// Semantic action for non-terminal 'InstPortItem'
2618    fn inst_port_item(&mut self, arg: &InstPortItem) {
2619        before!(self, inst_port_item, arg);
2620        self.identifier(&arg.identifier);
2621        if let Some(ref x) = arg.inst_port_item_opt {
2622            self.colon(&x.colon);
2623            self.expression(&x.expression);
2624        }
2625        after!(self, inst_port_item, arg);
2626    }
2627
2628    /// Semantic action for non-terminal 'WithParameter'
2629    fn with_parameter(&mut self, arg: &WithParameter) {
2630        before!(self, with_parameter, arg);
2631        self.hash(&arg.hash);
2632        self.l_paren(&arg.l_paren);
2633        if let Some(ref x) = arg.with_parameter_opt {
2634            self.with_parameter_list(&x.with_parameter_list);
2635        }
2636        self.r_paren(&arg.r_paren);
2637        after!(self, with_parameter, arg);
2638    }
2639
2640    /// Semantic action for non-terminal 'WithParameterList'
2641    fn with_parameter_list(&mut self, arg: &WithParameterList) {
2642        before!(self, with_parameter_list, arg);
2643        self.with_parameter_group(&arg.with_parameter_group);
2644        for x in &arg.with_parameter_list_list {
2645            self.comma(&x.comma);
2646            self.with_parameter_group(&x.with_parameter_group);
2647        }
2648        if let Some(ref x) = arg.with_parameter_list_opt {
2649            self.comma(&x.comma);
2650        }
2651        after!(self, with_parameter_list, arg);
2652    }
2653
2654    /// Semantic action for non-terminal 'WithParameterGroup'
2655    fn with_parameter_group(&mut self, arg: &WithParameterGroup) {
2656        before!(self, with_parameter_group, arg);
2657        for x in &arg.with_parameter_group_list {
2658            self.attribute(&x.attribute);
2659        }
2660        match &*arg.with_parameter_group_group {
2661            WithParameterGroupGroup::LBraceWithParameterListRBrace(x) => {
2662                self.l_brace(&x.l_brace);
2663                self.with_parameter_list(&x.with_parameter_list);
2664                self.r_brace(&x.r_brace);
2665            }
2666            WithParameterGroupGroup::WithParameterItem(x) => {
2667                self.with_parameter_item(&x.with_parameter_item)
2668            }
2669        }
2670        after!(self, with_parameter_group, arg);
2671    }
2672
2673    /// Semantic action for non-terminal 'WithParameterItem'
2674    fn with_parameter_item(&mut self, arg: &WithParameterItem) {
2675        before!(self, with_parameter_item, arg);
2676        match &*arg.with_parameter_item_group {
2677            WithParameterItemGroup::Param(x) => self.param(&x.param),
2678            WithParameterItemGroup::Const(x) => self.r#const(&x.r#const),
2679        };
2680        self.identifier(&arg.identifier);
2681        self.colon(&arg.colon);
2682        match &*arg.with_parameter_item_group0 {
2683            WithParameterItemGroup0::ArrayType(x) => {
2684                self.array_type(&x.array_type);
2685            }
2686            WithParameterItemGroup0::Type(x) => {
2687                self.r#type(&x.r#type);
2688            }
2689        }
2690        if let Some(ref x) = arg.with_parameter_item_opt {
2691            self.equ(&x.equ);
2692            self.expression(&x.expression);
2693        }
2694        after!(self, with_parameter_item, arg);
2695    }
2696
2697    /// Semantic action for non-terminal 'GenericBound'
2698    fn generic_bound(&mut self, arg: &GenericBound) {
2699        before!(self, generic_bound, arg);
2700        match arg {
2701            GenericBound::Type(x) => self.r#type(&x.r#type),
2702            GenericBound::InstScopedIdentifier(x) => {
2703                self.inst(&x.inst);
2704                self.scoped_identifier(&x.scoped_identifier);
2705            }
2706            GenericBound::GenericProtoBound(x) => self.generic_proto_bound(&x.generic_proto_bound),
2707        }
2708        after!(self, generic_bound, arg);
2709    }
2710
2711    /// Semantic action for non-terminal 'WithGenericParameter'
2712    fn with_generic_parameter(&mut self, arg: &WithGenericParameter) {
2713        before!(self, with_generic_parameter, arg);
2714        self.colon_colon_l_angle(&arg.colon_colon_l_angle);
2715        self.with_generic_parameter_list(&arg.with_generic_parameter_list);
2716        self.r_angle(&arg.r_angle);
2717        after!(self, with_generic_parameter, arg);
2718    }
2719
2720    /// Semantic action for non-terminal 'WithGenericParameterList'
2721    fn with_generic_parameter_list(&mut self, arg: &WithGenericParameterList) {
2722        before!(self, with_generic_parameter_list, arg);
2723        self.with_generic_parameter_item(&arg.with_generic_parameter_item);
2724        for x in &arg.with_generic_parameter_list_list {
2725            self.comma(&x.comma);
2726            self.with_generic_parameter_item(&x.with_generic_parameter_item);
2727        }
2728        if let Some(ref x) = arg.with_generic_parameter_list_opt {
2729            self.comma(&x.comma);
2730        }
2731        after!(self, with_generic_parameter_list, arg);
2732    }
2733
2734    /// Semantic action for non-terminal 'WithGenericParameterItem'
2735    fn with_generic_parameter_item(&mut self, arg: &WithGenericParameterItem) {
2736        before!(self, with_generic_parameter_item, arg);
2737        self.identifier(&arg.identifier);
2738        self.colon(&arg.colon);
2739        self.generic_bound(&arg.generic_bound);
2740        if let Some(ref x) = arg.with_generic_parameter_item_opt {
2741            self.equ(&x.equ);
2742            self.with_generic_argument_item(&x.with_generic_argument_item);
2743        }
2744        after!(self, with_generic_parameter_item, arg);
2745    }
2746
2747    /// Semantic action for non-terminal 'GenericProtoBound'
2748    fn generic_proto_bound(&mut self, arg: &GenericProtoBound) {
2749        before!(self, generic_proto_bound, arg);
2750        match arg {
2751            GenericProtoBound::ScopedIdentifier(x) => self.scoped_identifier(&x.scoped_identifier),
2752            GenericProtoBound::FixedType(x) => self.fixed_type(&x.fixed_type),
2753        }
2754        after!(self, generic_proto_bound, arg);
2755    }
2756
2757    /// Semantic action for non-terminal 'WithGenericArgument'
2758    fn with_generic_argument(&mut self, arg: &WithGenericArgument) {
2759        before!(self, with_generic_argument, arg);
2760        self.colon_colon_l_angle(&arg.colon_colon_l_angle);
2761        if let Some(x) = &arg.with_generic_argument_opt {
2762            self.with_generic_argument_list(&x.with_generic_argument_list);
2763        }
2764        self.r_angle(&arg.r_angle);
2765        after!(self, with_generic_argument, arg);
2766    }
2767
2768    /// Semantic action for non-terminal 'WithGenericArgumentList'
2769    fn with_generic_argument_list(&mut self, arg: &WithGenericArgumentList) {
2770        before!(self, with_generic_argument_list, arg);
2771        self.with_generic_argument_item(&arg.with_generic_argument_item);
2772        for x in &arg.with_generic_argument_list_list {
2773            self.comma(&x.comma);
2774            self.with_generic_argument_item(&x.with_generic_argument_item);
2775        }
2776        if let Some(ref x) = arg.with_generic_argument_list_opt {
2777            self.comma(&x.comma);
2778        }
2779        after!(self, with_generic_argument_list, arg);
2780    }
2781
2782    /// Semantic action for non-terminal 'WithGenericArgumentItem'
2783    fn with_generic_argument_item(&mut self, arg: &WithGenericArgumentItem) {
2784        before!(self, with_generic_argument_item, arg);
2785        match arg {
2786            WithGenericArgumentItem::GenericArgIdentifier(x) => {
2787                self.generic_arg_identifier(&x.generic_arg_identifier);
2788            }
2789            WithGenericArgumentItem::FixedType(x) => {
2790                self.fixed_type(&x.fixed_type);
2791            }
2792            WithGenericArgumentItem::Number(x) => {
2793                self.number(&x.number);
2794            }
2795            WithGenericArgumentItem::BooleanLiteral(x) => {
2796                self.boolean_literal(&x.boolean_literal);
2797            }
2798        }
2799        after!(self, with_generic_argument_item, arg);
2800    }
2801
2802    /// Semantic action for non-terminal 'PortDeclaration'
2803    fn port_declaration(&mut self, arg: &PortDeclaration) {
2804        before!(self, port_declaration, arg);
2805        self.l_paren(&arg.l_paren);
2806        if let Some(ref x) = arg.port_declaration_opt {
2807            self.port_declaration_list(&x.port_declaration_list);
2808        }
2809        self.r_paren(&arg.r_paren);
2810        after!(self, port_declaration, arg);
2811    }
2812
2813    /// Semantic action for non-terminal 'PortDeclarationList'
2814    fn port_declaration_list(&mut self, arg: &PortDeclarationList) {
2815        before!(self, port_declaration_list, arg);
2816        self.port_declaration_group(&arg.port_declaration_group);
2817        for x in &arg.port_declaration_list_list {
2818            self.comma(&x.comma);
2819            self.port_declaration_group(&x.port_declaration_group);
2820        }
2821        if let Some(ref x) = arg.port_declaration_list_opt {
2822            self.comma(&x.comma);
2823        }
2824        after!(self, port_declaration_list, arg);
2825    }
2826
2827    /// Semantic action for non-terminal 'PortDeclarationGroup'
2828    fn port_declaration_group(&mut self, arg: &PortDeclarationGroup) {
2829        before!(self, port_declaration_group, arg);
2830        for x in &arg.port_declaration_group_list {
2831            self.attribute(&x.attribute);
2832        }
2833        match &*arg.port_declaration_group_group {
2834            PortDeclarationGroupGroup::LBracePortDeclarationListRBrace(x) => {
2835                self.l_brace(&x.l_brace);
2836                self.port_declaration_list(&x.port_declaration_list);
2837                self.r_brace(&x.r_brace);
2838            }
2839            PortDeclarationGroupGroup::PortDeclarationItem(x) => {
2840                self.port_declaration_item(&x.port_declaration_item)
2841            }
2842        }
2843        after!(self, port_declaration_group, arg);
2844    }
2845
2846    /// Semantic action for non-terminal 'PortDeclarationItem'
2847    fn port_declaration_item(&mut self, arg: &PortDeclarationItem) {
2848        before!(self, port_declaration_item, arg);
2849        self.identifier(&arg.identifier);
2850        self.colon(&arg.colon);
2851        match &*arg.port_declaration_item_group {
2852            PortDeclarationItemGroup::PortTypeConcrete(x) => {
2853                self.port_type_concrete(&x.port_type_concrete);
2854            }
2855            PortDeclarationItemGroup::PortTypeAbstract(x) => {
2856                self.port_type_abstract(&x.port_type_abstract);
2857            }
2858        }
2859        after!(self, port_declaration_item, arg);
2860    }
2861
2862    /// Semantic action for non-terminal 'PortTypeConcrete'
2863    fn port_type_concrete(&mut self, arg: &PortTypeConcrete) {
2864        before!(self, port_type_concrete, arg);
2865        self.direction(&arg.direction);
2866        if let Some(ref x) = arg.port_type_concrete_opt {
2867            self.clock_domain(&x.clock_domain);
2868        }
2869        self.array_type(&arg.array_type);
2870        if let Some(ref x) = arg.port_type_concrete_opt0 {
2871            self.equ(&x.equ);
2872            self.port_default_value(&x.port_default_value);
2873        }
2874        after!(self, port_type_concrete, arg);
2875    }
2876
2877    /// Semantic action for non-terminal 'PortDefaultValue'
2878    fn port_default_value(&mut self, arg: &PortDefaultValue) {
2879        before!(self, port_default_value, arg);
2880        self.expression(&arg.expression);
2881        after!(self, port_default_value, arg);
2882    }
2883
2884    /// Semantic action for non-terminal 'PortTypeAbstract'
2885    fn port_type_abstract(&mut self, arg: &PortTypeAbstract) {
2886        if let Some(ref x) = arg.port_type_abstract_opt {
2887            self.clock_domain(&x.clock_domain);
2888        }
2889        self.interface(&arg.interface);
2890        if let Some(ref x) = arg.port_type_abstract_opt0 {
2891            self.colon_colon(&x.colon_colon);
2892            self.identifier(&x.identifier);
2893        }
2894        if let Some(ref x) = arg.port_type_abstract_opt1 {
2895            self.array(&x.array);
2896        }
2897    }
2898
2899    /// Semantic action for non-terminal 'Direction'
2900    fn direction(&mut self, arg: &Direction) {
2901        before!(self, direction, arg);
2902        match arg {
2903            Direction::Input(x) => self.input(&x.input),
2904            Direction::Output(x) => self.output(&x.output),
2905            Direction::Inout(x) => self.inout(&x.inout),
2906            Direction::Modport(x) => self.modport(&x.modport),
2907            Direction::Import(x) => self.import(&x.import),
2908        };
2909        after!(self, direction, arg);
2910    }
2911
2912    /// Semantic action for non-terminal 'FunctionDeclaration'
2913    fn function_declaration(&mut self, arg: &FunctionDeclaration) {
2914        before!(self, function_declaration, arg);
2915        self.function(&arg.function);
2916        self.identifier(&arg.identifier);
2917        if let Some(ref x) = arg.function_declaration_opt {
2918            self.with_generic_parameter(&x.with_generic_parameter);
2919        }
2920        if let Some(ref x) = arg.function_declaration_opt0 {
2921            self.port_declaration(&x.port_declaration);
2922        }
2923        if let Some(ref x) = arg.function_declaration_opt1 {
2924            self.minus_g_t(&x.minus_g_t);
2925            self.scalar_type(&x.scalar_type);
2926        }
2927        self.statement_block(&arg.statement_block);
2928        after!(self, function_declaration, arg);
2929    }
2930
2931    /// Semantic action for non-terminal 'ImportDeclaration'
2932    fn import_declaration(&mut self, arg: &ImportDeclaration) {
2933        before!(self, import_declaration, arg);
2934        self.import(&arg.import);
2935        self.scoped_identifier(&arg.scoped_identifier);
2936        if let Some(ref x) = arg.import_declaration_opt {
2937            self.colon_colon(&x.colon_colon);
2938            match x.import_declaration_opt_group.as_ref() {
2939                ImportDeclarationOptGroup::Star(x) => self.star(&x.star),
2940                ImportDeclarationOptGroup::MultipleImportList(x) => {
2941                    self.multiple_import_list(&x.multiple_import_list)
2942                }
2943            }
2944        }
2945        self.semicolon(&arg.semicolon);
2946        after!(self, import_declaration, arg);
2947    }
2948
2949    /// Semantic action for non-terminal 'MultipleImportList'
2950    fn multiple_import_list(&mut self, arg: &MultipleImportList) {
2951        before!(self, multiple_import_list, arg);
2952        self.l_brace(&arg.l_brace);
2953        self.multiple_import_item(&arg.multiple_import_item);
2954        for x in &arg.multiple_import_list_list {
2955            self.comma(&x.comma);
2956            self.multiple_import_item(&x.multiple_import_item);
2957        }
2958        if let Some(ref x) = arg.multiple_import_list_opt {
2959            self.comma(&x.comma);
2960        }
2961        self.r_brace(&arg.r_brace);
2962        after!(self, multiple_import_list, arg);
2963    }
2964
2965    /// Semantic action for non-terminal 'MultipleImportItem'
2966    fn multiple_import_item(&mut self, arg: &MultipleImportItem) {
2967        before!(self, multiple_import_item, arg);
2968        self.identifier(&arg.identifier);
2969        after!(self, multiple_import_item, arg);
2970    }
2971
2972    /// Semantic action for non-terminal 'MixinDeclaration'
2973    fn mixin_declaration(&mut self, arg: &MixinDeclaration) {
2974        before!(self, mixin_declaration, arg);
2975        self.mixin(&arg.mixin);
2976        self.scoped_identifier(&arg.scoped_identifier);
2977        after!(self, mixin_declaration, arg);
2978    }
2979
2980    /// Semantic action for non-terminal 'UnsafeBlock'
2981    fn unsafe_block(&mut self, arg: &UnsafeBlock) {
2982        before!(self, unsafe_block, arg);
2983        self.r#unsafe(&arg.r#unsafe);
2984        self.l_paren(&arg.l_paren);
2985        self.identifier(&arg.identifier);
2986        self.r_paren(&arg.r_paren);
2987        self.l_brace(&arg.l_brace);
2988        for x in &arg.unsafe_block_list {
2989            self.generate_group(&x.generate_group);
2990        }
2991        self.r_brace(&arg.r_brace);
2992        after!(self, unsafe_block, arg);
2993    }
2994
2995    /// Semantic action for non-terminal 'ModuleDeclaration'
2996    fn module_declaration(&mut self, arg: &ModuleDeclaration) {
2997        before!(self, module_declaration, arg);
2998        self.module(&arg.module);
2999        self.identifier(&arg.identifier);
3000        if let Some(ref x) = arg.module_declaration_opt {
3001            self.with_generic_parameter(&x.with_generic_parameter);
3002        }
3003        if let Some(ref x) = arg.module_declaration_opt0 {
3004            self.r#for(&x.r#for);
3005            self.scoped_identifier(&x.scoped_identifier);
3006        }
3007        if let Some(ref x) = arg.module_declaration_opt1 {
3008            self.with_parameter(&x.with_parameter);
3009        }
3010        if let Some(ref x) = arg.module_declaration_opt2 {
3011            self.port_declaration(&x.port_declaration);
3012        }
3013        self.l_brace(&arg.l_brace);
3014        for x in &arg.module_declaration_list {
3015            self.module_group(&x.module_group);
3016        }
3017        self.r_brace(&arg.r_brace);
3018        after!(self, module_declaration, arg);
3019    }
3020
3021    /// Semantic action for non-terminal 'ModuleGroup'
3022    fn module_group(&mut self, arg: &ModuleGroup) {
3023        before!(self, module_group, arg);
3024        for x in &arg.module_group_list {
3025            self.attribute(&x.attribute);
3026        }
3027        match &*arg.module_group_group {
3028            ModuleGroupGroup::LBraceModuleGroupGroupListRBrace(x) => {
3029                self.l_brace(&x.l_brace);
3030                for x in &x.module_group_group_list {
3031                    self.module_group(&x.module_group);
3032                }
3033                self.r_brace(&x.r_brace);
3034            }
3035            ModuleGroupGroup::ModuleItem(x) => {
3036                self.module_item(&x.module_item);
3037            }
3038        }
3039        after!(self, module_group, arg);
3040    }
3041
3042    /// Semantic action for non-terminal 'ModuleItem'
3043    fn module_item(&mut self, arg: &ModuleItem) {
3044        before!(self, module_item, arg);
3045        self.generate_item(&arg.generate_item);
3046        after!(self, module_item, arg);
3047    }
3048
3049    /// Semantic action for non-terminal 'InterfaceDeclaration'
3050    fn interface_declaration(&mut self, arg: &InterfaceDeclaration) {
3051        before!(self, interface_declaration, arg);
3052        self.interface(&arg.interface);
3053        self.identifier(&arg.identifier);
3054        if let Some(ref x) = arg.interface_declaration_opt {
3055            self.with_generic_parameter(&x.with_generic_parameter);
3056        }
3057        if let Some(ref x) = arg.interface_declaration_opt0 {
3058            self.r#for(&x.r#for);
3059            self.scoped_identifier(&x.scoped_identifier);
3060        }
3061        if let Some(ref x) = arg.interface_declaration_opt1 {
3062            self.with_parameter(&x.with_parameter);
3063        }
3064        self.l_brace(&arg.l_brace);
3065        for x in &arg.interface_declaration_list {
3066            self.interface_group(&x.interface_group);
3067        }
3068        self.r_brace(&arg.r_brace);
3069        after!(self, interface_declaration, arg);
3070    }
3071
3072    /// Semantic action for non-terminal 'InterfaceGroup'
3073    fn interface_group(&mut self, arg: &InterfaceGroup) {
3074        before!(self, interface_group, arg);
3075        for x in &arg.interface_group_list {
3076            self.attribute(&x.attribute);
3077        }
3078        match &*arg.interface_group_group {
3079            InterfaceGroupGroup::LBraceInterfaceGroupGroupListRBrace(x) => {
3080                self.l_brace(&x.l_brace);
3081                for x in &x.interface_group_group_list {
3082                    self.interface_group(&x.interface_group);
3083                }
3084                self.r_brace(&x.r_brace);
3085            }
3086            InterfaceGroupGroup::InterfaceItem(x) => {
3087                self.interface_item(&x.interface_item);
3088            }
3089        }
3090        after!(self, interface_group, arg);
3091    }
3092
3093    /// Semantic action for non-terminal 'InterfaceItem'
3094    fn interface_item(&mut self, arg: &InterfaceItem) {
3095        before!(self, interface_item, arg);
3096        match arg {
3097            InterfaceItem::GenerateItem(x) => self.generate_item(&x.generate_item),
3098            InterfaceItem::MixinDeclaration(x) => self.mixin_declaration(&x.mixin_declaration),
3099            InterfaceItem::ModportDeclaration(x) => {
3100                self.modport_declaration(&x.modport_declaration)
3101            }
3102        }
3103        after!(self, interface_item, arg);
3104    }
3105
3106    /// Semantic action for non-terminal 'GenerateIfDeclaration'
3107    fn generate_if_declaration(&mut self, arg: &GenerateIfDeclaration) {
3108        before!(self, generate_if_declaration, arg);
3109        self.r#if(&arg.r#if);
3110        self.expression(&arg.expression);
3111        self.generate_named_block(&arg.generate_named_block);
3112        for x in &arg.generate_if_declaration_list {
3113            self.r#else(&x.r#else);
3114            self.r#if(&x.r#if);
3115            self.expression(&x.expression);
3116            self.generate_optional_named_block(&x.generate_optional_named_block);
3117        }
3118        if let Some(ref x) = arg.generate_if_declaration_opt {
3119            self.r#else(&x.r#else);
3120            self.generate_optional_named_block(&x.generate_optional_named_block);
3121        }
3122        after!(self, generate_if_declaration, arg);
3123    }
3124
3125    /// Semantic action for non-terminal 'GenerateForDeclaration'
3126    fn generate_for_declaration(&mut self, arg: &GenerateForDeclaration) {
3127        before!(self, generate_for_declaration, arg);
3128        self.r#for(&arg.r#for);
3129        self.identifier(&arg.identifier);
3130        self.r#in(&arg.r#in);
3131        if let Some(ref x) = arg.generate_for_declaration_opt {
3132            self.rev(&x.rev);
3133        }
3134        self.range(&arg.range);
3135        if let Some(ref x) = arg.generate_for_declaration_opt0 {
3136            self.step(&x.step);
3137            self.assignment_operator(&x.assignment_operator);
3138            self.expression(&x.expression);
3139        }
3140        self.generate_named_block(&arg.generate_named_block);
3141        after!(self, generate_for_declaration, arg);
3142    }
3143
3144    /// Semantic action for non-terminal 'GenerateBlockDeclaration'
3145    fn generate_block_declaration(&mut self, arg: &GenerateBlockDeclaration) {
3146        before!(self, generate_block_declaration, arg);
3147        self.generate_named_block(&arg.generate_named_block);
3148        after!(self, generate_block_declaration, arg);
3149    }
3150
3151    /// Semantic action for non-terminal 'GenerateNamedBlock'
3152    fn generate_named_block(&mut self, arg: &GenerateNamedBlock) {
3153        before!(self, generate_named_block, arg);
3154        self.colon(&arg.colon);
3155        self.identifier(&arg.identifier);
3156        self.l_brace(&arg.l_brace);
3157        for x in &arg.generate_named_block_list {
3158            self.generate_group(&x.generate_group);
3159        }
3160        self.r_brace(&arg.r_brace);
3161        after!(self, generate_named_block, arg);
3162    }
3163
3164    /// Semantic action for non-terminal 'GenerateOptionalNamedBlock'
3165    fn generate_optional_named_block(&mut self, arg: &GenerateOptionalNamedBlock) {
3166        before!(self, generate_optional_named_block, arg);
3167        if let Some(ref x) = arg.generate_optional_named_block_opt {
3168            self.colon(&x.colon);
3169            self.identifier(&x.identifier);
3170        }
3171        self.l_brace(&arg.l_brace);
3172        for x in &arg.generate_optional_named_block_list {
3173            self.generate_group(&x.generate_group);
3174        }
3175        self.r_brace(&arg.r_brace);
3176        after!(self, generate_optional_named_block, arg);
3177    }
3178
3179    /// Semantic action for non-terminal 'GenerateGroup'
3180    fn generate_group(&mut self, arg: &GenerateGroup) {
3181        before!(self, generate_group, arg);
3182        for x in &arg.generate_group_list {
3183            self.attribute(&x.attribute);
3184        }
3185        match &*arg.generate_group_group {
3186            GenerateGroupGroup::LBraceGenerateGroupGroupListRBrace(x) => {
3187                self.l_brace(&x.l_brace);
3188                for x in &x.generate_group_group_list {
3189                    self.generate_group(&x.generate_group);
3190                }
3191                self.r_brace(&x.r_brace);
3192            }
3193            GenerateGroupGroup::GenerateItem(x) => self.generate_item(&x.generate_item),
3194        }
3195        after!(self, generate_group, arg);
3196    }
3197
3198    /// Semantic action for non-terminal 'GenerateItem'
3199    fn generate_item(&mut self, arg: &GenerateItem) {
3200        before!(self, generate_item, arg);
3201        match arg {
3202            GenerateItem::LetDeclaration(x) => self.let_declaration(&x.let_declaration),
3203            GenerateItem::VarDeclaration(x) => self.var_declaration(&x.var_declaration),
3204            GenerateItem::InstDeclaration(x) => self.inst_declaration(&x.inst_declaration),
3205            GenerateItem::BindDeclaration(x) => self.bind_declaration(&x.bind_declaration),
3206            GenerateItem::ConstDeclaration(x) => self.const_declaration(&x.const_declaration),
3207            GenerateItem::GenDeclaration(x) => self.gen_declaration(&x.gen_declaration),
3208            GenerateItem::AlwaysFfDeclaration(x) => {
3209                self.always_ff_declaration(&x.always_ff_declaration)
3210            }
3211            GenerateItem::AlwaysCombDeclaration(x) => {
3212                self.always_comb_declaration(&x.always_comb_declaration)
3213            }
3214            GenerateItem::AssignDeclaration(x) => self.assign_declaration(&x.assign_declaration),
3215            GenerateItem::ConnectDeclaration(x) => self.connect_declaration(&x.connect_declaration),
3216            GenerateItem::FunctionDeclaration(x) => {
3217                self.function_declaration(&x.function_declaration)
3218            }
3219            GenerateItem::GenerateIfDeclaration(x) => {
3220                self.generate_if_declaration(&x.generate_if_declaration)
3221            }
3222            GenerateItem::GenerateForDeclaration(x) => {
3223                self.generate_for_declaration(&x.generate_for_declaration)
3224            }
3225            GenerateItem::GenerateBlockDeclaration(x) => {
3226                self.generate_block_declaration(&x.generate_block_declaration)
3227            }
3228            GenerateItem::TypeDefDeclaration(x) => {
3229                self.type_def_declaration(&x.type_def_declaration)
3230            }
3231            GenerateItem::EnumDeclaration(x) => self.enum_declaration(&x.enum_declaration),
3232            GenerateItem::StructUnionDeclaration(x) => {
3233                self.struct_union_declaration(&x.struct_union_declaration)
3234            }
3235            GenerateItem::ImportDeclaration(x) => self.import_declaration(&x.import_declaration),
3236            GenerateItem::AliasDeclaration(x) => self.alias_declaration(&x.alias_declaration),
3237            GenerateItem::InitialDeclaration(x) => self.initial_declaration(&x.initial_declaration),
3238            GenerateItem::FinalDeclaration(x) => self.final_declaration(&x.final_declaration),
3239            GenerateItem::UnsafeBlock(x) => self.unsafe_block(&x.unsafe_block),
3240            GenerateItem::EmbedDeclaration(x) => self.embed_declaration(&x.embed_declaration),
3241        };
3242        after!(self, generate_item, arg);
3243    }
3244
3245    /// Semantic action for non-terminal 'PackageDeclaration'
3246    fn package_declaration(&mut self, arg: &PackageDeclaration) {
3247        before!(self, package_declaration, arg);
3248        self.package(&arg.package);
3249        self.identifier(&arg.identifier);
3250        if let Some(ref x) = arg.package_declaration_opt {
3251            self.with_generic_parameter(&x.with_generic_parameter);
3252        }
3253        if let Some(ref x) = arg.package_declaration_opt0 {
3254            self.r#for(&x.r#for);
3255            self.scoped_identifier(&x.scoped_identifier);
3256        }
3257        self.l_brace(&arg.l_brace);
3258        for x in &arg.package_declaration_list {
3259            self.package_group(&x.package_group);
3260        }
3261        self.r_brace(&arg.r_brace);
3262        after!(self, package_declaration, arg);
3263    }
3264
3265    /// Semantic action for non-terminal 'PackageGroup'
3266    fn package_group(&mut self, arg: &PackageGroup) {
3267        before!(self, package_group, arg);
3268        for x in &arg.package_group_list {
3269            self.attribute(&x.attribute);
3270        }
3271        match &*arg.package_group_group {
3272            PackageGroupGroup::LBracePackageGroupGroupListRBrace(x) => {
3273                self.l_brace(&x.l_brace);
3274                for x in &x.package_group_group_list {
3275                    self.package_group(&x.package_group);
3276                }
3277                self.r_brace(&x.r_brace);
3278            }
3279            PackageGroupGroup::PackageItem(x) => self.package_item(&x.package_item),
3280        }
3281        after!(self, package_group, arg);
3282    }
3283
3284    /// Semantic action for non-terminal 'PackageItem'
3285    fn package_item(&mut self, arg: &PackageItem) {
3286        before!(self, package_item, arg);
3287        match arg {
3288            PackageItem::ConstDeclaration(x) => self.const_declaration(&x.const_declaration),
3289            PackageItem::GenDeclaration(x) => self.gen_declaration(&x.gen_declaration),
3290            PackageItem::TypeDefDeclaration(x) => {
3291                self.type_def_declaration(&x.type_def_declaration)
3292            }
3293            PackageItem::EnumDeclaration(x) => self.enum_declaration(&x.enum_declaration),
3294            PackageItem::StructUnionDeclaration(x) => {
3295                self.struct_union_declaration(&x.struct_union_declaration)
3296            }
3297            PackageItem::FunctionDeclaration(x) => {
3298                self.function_declaration(&x.function_declaration)
3299            }
3300            PackageItem::ImportDeclaration(x) => self.import_declaration(&x.import_declaration),
3301            PackageItem::AliasDeclaration(x) => self.alias_declaration(&x.alias_declaration),
3302            PackageItem::EmbedDeclaration(x) => self.embed_declaration(&x.embed_declaration),
3303        }
3304        after!(self, package_item, arg);
3305    }
3306
3307    /// Semantic action for non-terminal 'AliasDeclaration'
3308    fn alias_declaration(&mut self, arg: &AliasDeclaration) {
3309        before!(self, alias_declaration, arg);
3310        self.alias(&arg.alias);
3311        match &*arg.alias_declaration_group {
3312            AliasDeclarationGroup::Module(x) => self.module(&x.module),
3313            AliasDeclarationGroup::Interface(x) => self.interface(&x.interface),
3314            AliasDeclarationGroup::Package(x) => self.package(&x.package),
3315        }
3316        self.identifier(&arg.identifier);
3317        self.equ(&arg.equ);
3318        self.scoped_identifier(&arg.scoped_identifier);
3319        self.semicolon(&arg.semicolon);
3320        after!(self, alias_declaration, arg);
3321    }
3322
3323    /// Semantic action for non-terminal 'ProtoDeclaration'
3324    fn proto_declaration(&mut self, arg: &ProtoDeclaration) {
3325        before!(self, proto_declaration, arg);
3326        self.proto(&arg.proto);
3327        match &*arg.proto_declaration_group {
3328            ProtoDeclarationGroup::ProtoModuleDeclaration(x) => {
3329                self.proto_module_declaration(&x.proto_module_declaration);
3330            }
3331            ProtoDeclarationGroup::ProtoInterfaceDeclaration(x) => {
3332                self.proto_interface_declaration(&x.proto_interface_declaration);
3333            }
3334            ProtoDeclarationGroup::ProtoPackageDeclaration(x) => {
3335                self.proto_package_declaration(&x.proto_package_declaration);
3336            }
3337        }
3338        after!(self, proto_declaration, arg);
3339    }
3340
3341    /// Semantic action for non-terminal 'ProtoModuleDeclaration'
3342    fn proto_module_declaration(&mut self, arg: &ProtoModuleDeclaration) {
3343        before!(self, proto_module_declaration, arg);
3344        self.module(&arg.module);
3345        self.identifier(&arg.identifier);
3346        if let Some(ref x) = arg.proto_module_declaration_opt {
3347            self.with_parameter(&x.with_parameter);
3348        }
3349        if let Some(ref x) = arg.proto_module_declaration_opt0 {
3350            self.port_declaration(&x.port_declaration);
3351        }
3352        self.semicolon(&arg.semicolon);
3353        after!(self, proto_module_declaration, arg);
3354    }
3355
3356    /// Semantic action for non-terminal 'ProtoInterfaceDeclaration'
3357    fn proto_interface_declaration(&mut self, arg: &ProtoInterfaceDeclaration) {
3358        before!(self, proto_interface_declaration, arg);
3359        self.interface(&arg.interface);
3360        self.identifier(&arg.identifier);
3361        if let Some(ref x) = arg.proto_interface_declaration_opt {
3362            self.with_parameter(&x.with_parameter);
3363        }
3364        self.l_brace(&arg.l_brace);
3365        for x in &arg.proto_interface_declaration_list {
3366            self.proto_interface_item(&x.proto_interface_item);
3367        }
3368        self.r_brace(&arg.r_brace);
3369        after!(self, proto_interface_declaration, arg);
3370    }
3371
3372    /// Semantic action for non-terminal 'ProtoInterfaceItem'
3373    fn proto_interface_item(&mut self, arg: &ProtoInterfaceItem) {
3374        before!(self, proto_interface_item, arg);
3375        match arg {
3376            ProtoInterfaceItem::VarDeclaration(x) => {
3377                self.var_declaration(&x.var_declaration);
3378            }
3379            ProtoInterfaceItem::ProtoConstDeclaration(x) => {
3380                self.proto_const_declaration(&x.proto_const_declaration);
3381            }
3382            ProtoInterfaceItem::ProtoFunctionDeclaration(x) => {
3383                self.proto_function_declaration(&x.proto_function_declaration);
3384            }
3385            ProtoInterfaceItem::ProtoTypeDefDeclaration(x) => {
3386                self.proto_type_def_declaration(&x.proto_type_def_declaration);
3387            }
3388            ProtoInterfaceItem::ProtoAliasDeclaration(x) => {
3389                self.proto_alias_declaration(&x.proto_alias_declaration);
3390            }
3391            ProtoInterfaceItem::ModportDeclaration(x) => {
3392                self.modport_declaration(&x.modport_declaration);
3393            }
3394            ProtoInterfaceItem::ImportDeclaration(x) => {
3395                self.import_declaration(&x.import_declaration);
3396            }
3397        }
3398        after!(self, proto_interface_item, arg);
3399    }
3400
3401    /// Semantic action for non-terminal 'ProtoPackageDeclaration'
3402    fn proto_package_declaration(&mut self, arg: &ProtoPackageDeclaration) {
3403        before!(self, proto_package_declaration, arg);
3404        self.package(&arg.package);
3405        self.identifier(&arg.identifier);
3406        self.l_brace(&arg.l_brace);
3407        for x in &arg.proto_package_declaration_list {
3408            self.proto_pacakge_item(&x.proto_pacakge_item);
3409        }
3410        self.r_brace(&arg.r_brace);
3411        after!(self, proto_package_declaration, arg);
3412    }
3413
3414    /// Semantic action for non-terminal 'ProtoPacakgeItem'
3415    fn proto_pacakge_item(&mut self, arg: &ProtoPacakgeItem) {
3416        before!(self, proto_pacakge_item, arg);
3417        match arg {
3418            ProtoPacakgeItem::ProtoConstDeclaration(x) => {
3419                self.proto_const_declaration(&x.proto_const_declaration);
3420            }
3421            ProtoPacakgeItem::ProtoTypeDefDeclaration(x) => {
3422                self.proto_type_def_declaration(&x.proto_type_def_declaration);
3423            }
3424            ProtoPacakgeItem::EnumDeclaration(x) => {
3425                self.enum_declaration(&x.enum_declaration);
3426            }
3427            ProtoPacakgeItem::StructUnionDeclaration(x) => {
3428                self.struct_union_declaration(&x.struct_union_declaration);
3429            }
3430            ProtoPacakgeItem::ProtoFunctionDeclaration(x) => {
3431                self.proto_function_declaration(&x.proto_function_declaration);
3432            }
3433            ProtoPacakgeItem::ProtoAliasDeclaration(x) => {
3434                self.proto_alias_declaration(&x.proto_alias_declaration);
3435            }
3436            ProtoPacakgeItem::ImportDeclaration(x) => {
3437                self.import_declaration(&x.import_declaration);
3438            }
3439        }
3440        after!(self, proto_pacakge_item, arg);
3441    }
3442
3443    /// Semantic action for non-terminal 'ProtoConstDeclaration'
3444    fn proto_const_declaration(&mut self, arg: &ProtoConstDeclaration) {
3445        before!(self, proto_const_declaration, arg);
3446        self.r#const(&arg.r#const);
3447        self.identifier(&arg.identifier);
3448        self.colon(&arg.colon);
3449        match &*arg.proto_const_declaration_group {
3450            ProtoConstDeclarationGroup::ArrayType(x) => {
3451                self.array_type(&x.array_type);
3452            }
3453            ProtoConstDeclarationGroup::Type(x) => {
3454                self.r#type(&x.r#type);
3455            }
3456        }
3457        self.semicolon(&arg.semicolon);
3458        after!(self, proto_const_declaration, arg);
3459    }
3460
3461    /// Semantic action for non-terminal 'ProtoTypeDefDeclaration'
3462    fn proto_type_def_declaration(&mut self, arg: &ProtoTypeDefDeclaration) {
3463        before!(self, proto_type_def_declaration, arg);
3464        self.r#type(&arg.r#type);
3465        self.identifier(&arg.identifier);
3466        if let Some(ref x) = arg.proto_type_def_declaration_opt {
3467            self.equ(&x.equ);
3468            self.array_type(&x.array_type);
3469        }
3470        self.semicolon(&arg.semicolon);
3471        after!(self, proto_type_def_declaration, arg);
3472    }
3473
3474    /// Semantic action for non-terminal 'ProtoFunctionDeclaration'
3475    fn proto_function_declaration(&mut self, arg: &ProtoFunctionDeclaration) {
3476        before!(self, proto_function_declaration, arg);
3477        self.function(&arg.function);
3478        self.identifier(&arg.identifier);
3479        if let Some(ref x) = arg.proto_function_declaration_opt {
3480            self.with_generic_parameter(&x.with_generic_parameter);
3481        }
3482        if let Some(ref x) = arg.proto_function_declaration_opt0 {
3483            self.port_declaration(&x.port_declaration);
3484        }
3485        if let Some(ref x) = arg.proto_function_declaration_opt1 {
3486            self.minus_g_t(&x.minus_g_t);
3487            self.scalar_type(&x.scalar_type);
3488        }
3489        self.semicolon(&arg.semicolon);
3490        after!(self, proto_function_declaration, arg);
3491    }
3492
3493    /// Semantic action for non-terminal 'ProtoAliasDeclaration'
3494    fn proto_alias_declaration(&mut self, arg: &ProtoAliasDeclaration) {
3495        before!(self, proto_alias_declaration, arg);
3496        self.alias(&arg.alias);
3497        match &*arg.proto_alias_declaration_group {
3498            ProtoAliasDeclarationGroup::Module(x) => self.module(&x.module),
3499            ProtoAliasDeclarationGroup::Interface(x) => self.interface(&x.interface),
3500            ProtoAliasDeclarationGroup::Package(x) => self.package(&x.package),
3501        }
3502        self.identifier(&arg.identifier);
3503        self.colon(&arg.colon);
3504        self.scoped_identifier(&arg.scoped_identifier);
3505        self.semicolon(&arg.semicolon);
3506        after!(self, proto_alias_declaration, arg);
3507    }
3508
3509    /// Semantic action for non-terminal 'EmbedDeclaration'
3510    fn embed_declaration(&mut self, arg: &EmbedDeclaration) {
3511        before!(self, embed_declaration, arg);
3512        self.embed(&arg.embed);
3513        self.l_paren(&arg.l_paren);
3514        self.identifier(&arg.identifier);
3515        self.r_paren(&arg.r_paren);
3516        self.identifier(&arg.identifier0);
3517        self.embed_content(&arg.embed_content);
3518        after!(self, embed_declaration, arg);
3519    }
3520
3521    /// Semantic action for non-terminal 'EmbedContent'
3522    fn embed_content(&mut self, arg: &EmbedContent) {
3523        before!(self, embed_content, arg);
3524        self.triple_l_brace(&arg.triple_l_brace);
3525        for x in &arg.embed_content_list {
3526            self.embed_item(&x.embed_item);
3527        }
3528        self.triple_r_brace(&arg.triple_r_brace);
3529        after!(self, embed_content, arg);
3530    }
3531
3532    /// Semantic action for non-terminal 'EmbedScopedIdentifier'
3533    fn embed_scoped_identifier(&mut self, arg: &EmbedScopedIdentifier) {
3534        before!(self, embed_scoped_identifier, arg);
3535        self.escaped_l_brace(&arg.escaped_l_brace);
3536        self.scoped_identifier(&arg.scoped_identifier);
3537        self.escaped_r_brace(&arg.escaped_r_brace);
3538        after!(self, embed_scoped_identifier, arg);
3539    }
3540
3541    /// Semantic action for non-terminal 'EmbedItem'
3542    fn embed_item(&mut self, arg: &EmbedItem) {
3543        before!(self, embed_item, arg);
3544        match arg {
3545            EmbedItem::EmbedLBraceEmbedItemListEmbedRBrace(x) => {
3546                self.embed_l_brace(&x.embed_l_brace);
3547                for x in &x.embed_item_list {
3548                    self.embed_item(&x.embed_item);
3549                }
3550                self.embed_r_brace(&x.embed_r_brace);
3551            }
3552            EmbedItem::EmbedScopedIdentifier(x) => {
3553                self.embed_scoped_identifier(&x.embed_scoped_identifier)
3554            }
3555            EmbedItem::Any(x) => self.any(&x.any),
3556        }
3557        after!(self, embed_item, arg);
3558    }
3559
3560    /// Semantic action for non-terminal 'IncludeDeclaration'
3561    fn include_declaration(&mut self, arg: &IncludeDeclaration) {
3562        before!(self, include_declaration, arg);
3563        self.include(&arg.include);
3564        self.l_paren(&arg.l_paren);
3565        self.identifier(&arg.identifier);
3566        self.comma(&arg.comma);
3567        self.string_literal(&arg.string_literal);
3568        self.r_paren(&arg.r_paren);
3569        self.semicolon(&arg.semicolon);
3570        after!(self, include_declaration, arg);
3571    }
3572
3573    /// Semantic action for non-terminal 'DescriptionGroup'
3574    fn description_group(&mut self, arg: &DescriptionGroup) {
3575        if self.skip_description_group(arg) {
3576            return;
3577        }
3578        before!(self, description_group, arg);
3579        for x in &arg.description_group_list {
3580            self.attribute(&x.attribute);
3581        }
3582        match &*arg.description_group_group {
3583            DescriptionGroupGroup::LBraceDescriptionGroupGroupListRBrace(x) => {
3584                self.l_brace(&x.l_brace);
3585                for x in &x.description_group_group_list {
3586                    self.description_group(&x.description_group);
3587                }
3588                self.r_brace(&x.r_brace);
3589            }
3590            DescriptionGroupGroup::DescriptionItem(x) => self.description_item(&x.description_item),
3591        }
3592        after!(self, description_group, arg);
3593    }
3594
3595    /// Semantic action for non-terminal 'DescriptionItem'
3596    fn description_item(&mut self, arg: &DescriptionItem) {
3597        before!(self, description_item, arg);
3598        match arg {
3599            DescriptionItem::DescriptionItemOptPublicDescriptionItem(x) => {
3600                if let Some(ref x) = x.description_item_opt {
3601                    self.r#pub(&x.r#pub);
3602                }
3603                self.public_description_item(&x.public_description_item);
3604            }
3605            DescriptionItem::ImportDeclaration(x) => self.import_declaration(&x.import_declaration),
3606            DescriptionItem::BindDeclaration(x) => self.bind_declaration(&x.bind_declaration),
3607            DescriptionItem::EmbedDeclaration(x) => self.embed_declaration(&x.embed_declaration),
3608            DescriptionItem::IncludeDeclaration(x) => {
3609                self.include_declaration(&x.include_declaration)
3610            }
3611        };
3612        after!(self, description_item, arg);
3613    }
3614
3615    /// Semantic action for non-terminal 'PublicDescriptionItem'
3616    fn public_description_item(&mut self, arg: &PublicDescriptionItem) {
3617        before!(self, public_description_item, arg);
3618        match arg {
3619            PublicDescriptionItem::ModuleDeclaration(x) => {
3620                self.module_declaration(&x.module_declaration)
3621            }
3622            PublicDescriptionItem::InterfaceDeclaration(x) => {
3623                self.interface_declaration(&x.interface_declaration)
3624            }
3625            PublicDescriptionItem::PackageDeclaration(x) => {
3626                self.package_declaration(&x.package_declaration)
3627            }
3628            PublicDescriptionItem::AliasDeclaration(x) => {
3629                self.alias_declaration(&x.alias_declaration)
3630            }
3631            PublicDescriptionItem::ProtoDeclaration(x) => {
3632                self.proto_declaration(&x.proto_declaration)
3633            }
3634            PublicDescriptionItem::FunctionDeclaration(x) => {
3635                self.function_declaration(&x.function_declaration)
3636            }
3637        };
3638        after!(self, public_description_item, arg);
3639    }
3640
3641    /// Semantic action for non-terminal 'Veryl'
3642    fn veryl(&mut self, arg: &Veryl) {
3643        before!(self, veryl, arg);
3644        self.start(&arg.start);
3645        for x in &arg.veryl_list {
3646            self.description_group(&x.description_group);
3647        }
3648        after!(self, veryl, arg);
3649    }
3650
3651    fn get_handlers(&mut self) -> Option<Vec<&mut dyn Handler>> {
3652        None
3653    }
3654
3655    /// Returning `true` skips the group and its whole subtree.
3656    fn skip_description_group(&mut self, _arg: &DescriptionGroup) -> bool {
3657        false
3658    }
3659}
3660
3661#[derive(Default)]
3662pub enum HandlerPoint {
3663    #[default]
3664    Before,
3665    After,
3666}
3667
3668pub trait Handler: VerylGrammarTrait {
3669    fn set_point(&mut self, p: HandlerPoint);
3670}