001//
002// Generated by JTB 1.3.2
003//
004
005package jtb.visitor;
006import jtb.syntaxtree.*;
007import java.util.*;
008
009/**
010 * Provides default methods which visit each node in the tree in depth-first
011 * order.  Your visitors may extend this class.
012 */
013public class DepthFirstVisitor implements Visitor {
014   protected boolean debug = false;
015   protected int indent = 0;
016   protected String indents = "                                                                                                                                                        ";
017
018   private void enterProduction(Node n) {
019      if (debug) System.out.println(indents.substring(0, indent) + n.getClass().getName());
020      indent++;
021   }
022
023   private void exitProduction() {
024      indent--;
025   }
026
027   //
028   // Auto class visitors--probably don't need to be overridden.
029   //
030   public void visit(NodeList n) {
031      enterProduction(n);
032      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
033         e.nextElement().accept(this);
034      exitProduction();
035   }
036
037   public void visit(NodeListOptional n) {
038      enterProduction(n);
039      if ( n.present() )
040         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
041            e.nextElement().accept(this);
042      exitProduction();
043   }
044
045   public void visit(NodeOptional n) {
046      enterProduction(n);
047      if ( n.present() )
048         n.node.accept(this);
049      exitProduction();
050   }
051
052   public void visit(NodeChoice n) {
053      enterProduction(n);
054      n.choice.accept(this);
055      exitProduction();
056   }
057
058   public void visit(NodeSequence n) {
059      enterProduction(n);
060      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
061         e.nextElement().accept(this);
062      exitProduction();
063   }
064
065   public void visit(NodeToken n) {
066      if (debug) System.out.println(indents.substring(0, indent) + "Token{" + n.kind +"}: " + n.tokenImage);
067   }
068
069   //
070   // User-generated visitor methods below
071   //
072
073   // f0 -> [ PackageDeclaration() ]
074   // f1 -> ( ImportDeclaration() )*
075   // f2 -> ( TypeDeclaration() )*
076   // f3 -> ( <"\u001a"> )?
077   // f4 -> ( <STUFF_TO_IGNORE: ~[]> )?
078   // f5 -> <EOF>
079   public void visit(CompilationUnit n) {
080      enterProduction(n);
081      n.f0.accept(this);
082      n.f1.accept(this);
083      n.f2.accept(this);
084      n.f3.accept(this);
085      n.f4.accept(this);
086      n.f5.accept(this);
087      exitProduction();
088   }
089
090   // f0 -> Modifiers()
091   // f1 -> "package"
092   // f2 -> Name()
093   // f3 -> ";"
094   public void visit(PackageDeclaration n) {
095      enterProduction(n);
096      n.f0.accept(this);
097      n.f1.accept(this);
098      n.f2.accept(this);
099      n.f3.accept(this);
100      exitProduction();
101   }
102
103   // f0 -> "import"
104   // f1 -> [ "static" ]
105   // f2 -> Name()
106   // f3 -> [ "." "*" ]
107   // f4 -> ";"
108   public void visit(ImportDeclaration n) {
109      enterProduction(n);
110      n.f0.accept(this);
111      n.f1.accept(this);
112      n.f2.accept(this);
113      n.f3.accept(this);
114      n.f4.accept(this);
115      exitProduction();
116   }
117
118   // f0 -> ( ( "public" | "static" | "protected" | "private" | "final" | "abstract" | "synchronized" | "native" | "transient" | "volatile" | "strictfp" | Annotation() ) )*
119   public void visit(Modifiers n) {
120      enterProduction(n);
121      n.f0.accept(this);
122      exitProduction();
123   }
124
125   // f0 -> ";"
126   //       | Modifiers() ( ClassOrInterfaceDeclaration(modifiers) | EnumDeclaration(modifiers) | AnnotationTypeDeclaration(modifiers) )
127   public void visit(TypeDeclaration n) {
128      enterProduction(n);
129      n.f0.accept(this);
130      exitProduction();
131   }
132
133   // f0 -> ( "class" | "interface" )
134   // f1 -> <IDENTIFIER>
135   // f2 -> [ TypeParameters() ]
136   // f3 -> [ ExtendsList(isInterface) ]
137   // f4 -> [ ImplementsList(isInterface) ]
138   // f5 -> ClassOrInterfaceBody(isInterface)
139   public void visit(ClassOrInterfaceDeclaration n) {
140      enterProduction(n);
141      n.f0.accept(this);
142      n.f1.accept(this);
143      n.f2.accept(this);
144      n.f3.accept(this);
145      n.f4.accept(this);
146      n.f5.accept(this);
147      exitProduction();
148   }
149
150   // f0 -> "extends"
151   // f1 -> ClassOrInterfaceType()
152   // f2 -> ( "," ClassOrInterfaceType() )*
153   public void visit(ExtendsList n) {
154      enterProduction(n);
155      n.f0.accept(this);
156      n.f1.accept(this);
157      n.f2.accept(this);
158      exitProduction();
159   }
160
161   // f0 -> "implements"
162   // f1 -> ClassOrInterfaceType()
163   // f2 -> ( "," ClassOrInterfaceType() )*
164   public void visit(ImplementsList n) {
165      enterProduction(n);
166      n.f0.accept(this);
167      n.f1.accept(this);
168      n.f2.accept(this);
169      exitProduction();
170   }
171
172   // f0 -> "enum"
173   // f1 -> <IDENTIFIER>
174   // f2 -> [ ImplementsList(false) ]
175   // f3 -> EnumBody()
176   public void visit(EnumDeclaration n) {
177      enterProduction(n);
178      n.f0.accept(this);
179      n.f1.accept(this);
180      n.f2.accept(this);
181      n.f3.accept(this);
182      exitProduction();
183   }
184
185   // f0 -> "{"
186   // f1 -> [ EnumConstant() ( "," EnumConstant() )* ]
187   // f2 -> [ "," ]
188   // f3 -> [ ";" ( ClassOrInterfaceBodyDeclaration(false) )* ]
189   // f4 -> "}"
190   public void visit(EnumBody n) {
191      enterProduction(n);
192      n.f0.accept(this);
193      n.f1.accept(this);
194      n.f2.accept(this);
195      n.f3.accept(this);
196      n.f4.accept(this);
197      exitProduction();
198   }
199
200   // f0 -> Modifiers()
201   // f1 -> <IDENTIFIER>
202   // f2 -> [ Arguments() ]
203   // f3 -> [ ClassOrInterfaceBody(false) ]
204   public void visit(EnumConstant n) {
205      enterProduction(n);
206      n.f0.accept(this);
207      n.f1.accept(this);
208      n.f2.accept(this);
209      n.f3.accept(this);
210      exitProduction();
211   }
212
213   // f0 -> "<"
214   // f1 -> TypeParameter()
215   // f2 -> ( "," TypeParameter() )*
216   // f3 -> ">"
217   public void visit(TypeParameters n) {
218      enterProduction(n);
219      n.f0.accept(this);
220      n.f1.accept(this);
221      n.f2.accept(this);
222      n.f3.accept(this);
223      exitProduction();
224   }
225
226   // f0 -> <IDENTIFIER>
227   // f1 -> [ TypeBound() ]
228   public void visit(TypeParameter n) {
229      enterProduction(n);
230      n.f0.accept(this);
231      n.f1.accept(this);
232      exitProduction();
233   }
234
235   // f0 -> "extends"
236   // f1 -> ClassOrInterfaceType()
237   // f2 -> ( "&" ClassOrInterfaceType() )*
238   public void visit(TypeBound n) {
239      enterProduction(n);
240      n.f0.accept(this);
241      n.f1.accept(this);
242      n.f2.accept(this);
243      exitProduction();
244   }
245
246   // f0 -> "{"
247   // f1 -> ( ClassOrInterfaceBodyDeclaration(isInterface) )*
248   // f2 -> "}"
249   public void visit(ClassOrInterfaceBody n) {
250      enterProduction(n);
251      n.f0.accept(this);
252      n.f1.accept(this);
253      n.f2.accept(this);
254      exitProduction();
255   }
256
257   // f0 -> Initializer()
258   //       | Modifiers() ( ClassOrInterfaceDeclaration(modifiers) | EnumDeclaration(modifiers) | ConstructorDeclaration() | FieldDeclaration(modifiers) | MethodDeclaration(modifiers) | AnnotationTypeDeclaration(modifiers) )
259   //       | ";"
260   public void visit(ClassOrInterfaceBodyDeclaration n) {
261      enterProduction(n);
262      n.f0.accept(this);
263      exitProduction();
264   }
265
266   // f0 -> Type()
267   // f1 -> VariableDeclarator()
268   // f2 -> ( "," VariableDeclarator() )*
269   // f3 -> ";"
270   public void visit(FieldDeclaration n) {
271      enterProduction(n);
272      n.f0.accept(this);
273      n.f1.accept(this);
274      n.f2.accept(this);
275      n.f3.accept(this);
276      exitProduction();
277   }
278
279   // f0 -> VariableDeclaratorId()
280   // f1 -> [ "=" VariableInitializer() ]
281   public void visit(VariableDeclarator n) {
282      enterProduction(n);
283      n.f0.accept(this);
284      n.f1.accept(this);
285      exitProduction();
286   }
287
288   // f0 -> <IDENTIFIER>
289   // f1 -> ( "[" "]" )*
290   public void visit(VariableDeclaratorId n) {
291      enterProduction(n);
292      n.f0.accept(this);
293      n.f1.accept(this);
294      exitProduction();
295   }
296
297   // f0 -> ArrayInitializer()
298   //       | Expression()
299   public void visit(VariableInitializer n) {
300      enterProduction(n);
301      n.f0.accept(this);
302      exitProduction();
303   }
304
305   // f0 -> "{"
306   // f1 -> [ VariableInitializer() ( "," VariableInitializer() )* ]
307   // f2 -> [ "," ]
308   // f3 -> "}"
309   public void visit(ArrayInitializer n) {
310      enterProduction(n);
311      n.f0.accept(this);
312      n.f1.accept(this);
313      n.f2.accept(this);
314      n.f3.accept(this);
315      exitProduction();
316   }
317
318   // f0 -> [ TypeParameters() ]
319   // f1 -> ResultType()
320   // f2 -> MethodDeclarator()
321   // f3 -> [ "throws" NameList() ]
322   // f4 -> ( Block() | ";" )
323   public void visit(MethodDeclaration n) {
324      enterProduction(n);
325      n.f0.accept(this);
326      n.f1.accept(this);
327      n.f2.accept(this);
328      n.f3.accept(this);
329      n.f4.accept(this);
330      exitProduction();
331   }
332
333   // f0 -> <IDENTIFIER>
334   // f1 -> FormalParameters()
335   // f2 -> ( "[" "]" )*
336   public void visit(MethodDeclarator n) {
337      enterProduction(n);
338      n.f0.accept(this);
339      n.f1.accept(this);
340      n.f2.accept(this);
341      exitProduction();
342   }
343
344   // f0 -> "("
345   // f1 -> [ FormalParameter() ( "," FormalParameter() )* ]
346   // f2 -> ")"
347   public void visit(FormalParameters n) {
348      enterProduction(n);
349      n.f0.accept(this);
350      n.f1.accept(this);
351      n.f2.accept(this);
352      exitProduction();
353   }
354
355   // f0 -> Modifiers()
356   // f1 -> [ "final" | Annotation() ]
357   // f2 -> Type()
358   // f3 -> [ "..." ]
359   // f4 -> VariableDeclaratorId()
360   public void visit(FormalParameter n) {
361      enterProduction(n);
362      n.f0.accept(this);
363      n.f1.accept(this);
364      n.f2.accept(this);
365      n.f3.accept(this);
366      n.f4.accept(this);
367      exitProduction();
368   }
369
370   // f0 -> [ TypeParameters() ]
371   // f1 -> <IDENTIFIER>
372   // f2 -> FormalParameters()
373   // f3 -> [ "throws" NameList() ]
374   // f4 -> "{"
375   // f5 -> [ ExplicitConstructorInvocation() ]
376   // f6 -> ( BlockStatement() )*
377   // f7 -> "}"
378   public void visit(ConstructorDeclaration n) {
379      enterProduction(n);
380      n.f0.accept(this);
381      n.f1.accept(this);
382      n.f2.accept(this);
383      n.f3.accept(this);
384      n.f4.accept(this);
385      n.f5.accept(this);
386      n.f6.accept(this);
387      n.f7.accept(this);
388      exitProduction();
389   }
390
391   // f0 -> [ TypeArguments() ] ( "this" | "super" ) Arguments() ";"
392   //       | PrimaryExpression() "." [ TypeArguments() ] "super" Arguments() ";"
393   public void visit(ExplicitConstructorInvocation n) {
394      enterProduction(n);
395      n.f0.accept(this);
396      exitProduction();
397   }
398
399   // f0 -> [ "static" ]
400   // f1 -> Block()
401   public void visit(Initializer n) {
402      enterProduction(n);
403      n.f0.accept(this);
404      n.f1.accept(this);
405      exitProduction();
406   }
407
408   // f0 -> ReferenceType()
409   //       | PrimitiveType()
410   public void visit(Type n) {
411      enterProduction(n);
412      n.f0.accept(this);
413      exitProduction();
414   }
415
416   // f0 -> PrimitiveType() ( "[" "]" )+
417   //       | ( ClassOrInterfaceType() ) ( "[" "]" )*
418   public void visit(ReferenceType n) {
419      enterProduction(n);
420      n.f0.accept(this);
421      exitProduction();
422   }
423
424   // f0 -> <IDENTIFIER>
425   // f1 -> [ TypeArguments() ]
426   // f2 -> ( "." <IDENTIFIER> [ TypeArguments() ] )*
427   public void visit(ClassOrInterfaceType n) {
428      enterProduction(n);
429      n.f0.accept(this);
430      n.f1.accept(this);
431      n.f2.accept(this);
432      exitProduction();
433   }
434
435   // f0 -> "<"
436   // f1 -> TypeArgument()
437   // f2 -> ( "," TypeArgument() )*
438   // f3 -> ">"
439   public void visit(TypeArguments n) {
440      enterProduction(n);
441      n.f0.accept(this);
442      n.f1.accept(this);
443      n.f2.accept(this);
444      n.f3.accept(this);
445      exitProduction();
446   }
447
448   // f0 -> ReferenceType()
449   //       | "?" [ WildcardBounds() ]
450   public void visit(TypeArgument n) {
451      enterProduction(n);
452      n.f0.accept(this);
453      exitProduction();
454   }
455
456   // f0 -> "extends" ReferenceType()
457   //       | "super" ReferenceType()
458   public void visit(WildcardBounds n) {
459      enterProduction(n);
460      n.f0.accept(this);
461      exitProduction();
462   }
463
464   // f0 -> "boolean"
465   //       | "char"
466   //       | "byte"
467   //       | "short"
468   //       | "int"
469   //       | "long"
470   //       | "float"
471   //       | "double"
472   public void visit(PrimitiveType n) {
473      enterProduction(n);
474      n.f0.accept(this);
475      exitProduction();
476   }
477
478   // f0 -> "void"
479   //       | Type()
480   public void visit(ResultType n) {
481      enterProduction(n);
482      n.f0.accept(this);
483      exitProduction();
484   }
485
486   // f0 -> <IDENTIFIER>
487   // f1 -> ( "." <IDENTIFIER> )*
488   public void visit(Name n) {
489      enterProduction(n);
490      n.f0.accept(this);
491      n.f1.accept(this);
492      exitProduction();
493   }
494
495   // f0 -> Name()
496   // f1 -> ( "," Name() )*
497   public void visit(NameList n) {
498      enterProduction(n);
499      n.f0.accept(this);
500      n.f1.accept(this);
501      exitProduction();
502   }
503
504   // f0 -> ConditionalExpression()
505   // f1 -> [ AssignmentOperator() Expression() ]
506   public void visit(Expression n) {
507      enterProduction(n);
508      n.f0.accept(this);
509      n.f1.accept(this);
510      exitProduction();
511   }
512
513   // f0 -> "="
514   //       | "*="
515   //       | "/="
516   //       | "%="
517   //       | "+="
518   //       | "-="
519   //       | "<<="
520   //       | ">>="
521   //       | ">>>="
522   //       | "&="
523   //       | "^="
524   //       | "|="
525   public void visit(AssignmentOperator n) {
526      enterProduction(n);
527      n.f0.accept(this);
528      exitProduction();
529   }
530
531   // f0 -> ConditionalOrExpression()
532   // f1 -> [ "?" Expression() ":" Expression() ]
533   public void visit(ConditionalExpression n) {
534      enterProduction(n);
535      n.f0.accept(this);
536      n.f1.accept(this);
537      exitProduction();
538   }
539
540   // f0 -> ConditionalAndExpression()
541   // f1 -> ( "||" ConditionalAndExpression() )*
542   public void visit(ConditionalOrExpression n) {
543      enterProduction(n);
544      n.f0.accept(this);
545      n.f1.accept(this);
546      exitProduction();
547   }
548
549   // f0 -> InclusiveOrExpression()
550   // f1 -> ( "&&" InclusiveOrExpression() )*
551   public void visit(ConditionalAndExpression n) {
552      enterProduction(n);
553      n.f0.accept(this);
554      n.f1.accept(this);
555      exitProduction();
556   }
557
558   // f0 -> ExclusiveOrExpression()
559   // f1 -> ( "|" ExclusiveOrExpression() )*
560   public void visit(InclusiveOrExpression n) {
561      enterProduction(n);
562      n.f0.accept(this);
563      n.f1.accept(this);
564      exitProduction();
565   }
566
567   // f0 -> AndExpression()
568   // f1 -> ( "^" AndExpression() )*
569   public void visit(ExclusiveOrExpression n) {
570      enterProduction(n);
571      n.f0.accept(this);
572      n.f1.accept(this);
573      exitProduction();
574   }
575
576   // f0 -> EqualityExpression()
577   // f1 -> ( "&" EqualityExpression() )*
578   public void visit(AndExpression n) {
579      enterProduction(n);
580      n.f0.accept(this);
581      n.f1.accept(this);
582      exitProduction();
583   }
584
585   // f0 -> InstanceOfExpression()
586   // f1 -> ( ( "==" | "!=" ) InstanceOfExpression() )*
587   public void visit(EqualityExpression n) {
588      enterProduction(n);
589      n.f0.accept(this);
590      n.f1.accept(this);
591      exitProduction();
592   }
593
594   // f0 -> RelationalExpression()
595   // f1 -> [ "instanceof" Type() ]
596   public void visit(InstanceOfExpression n) {
597      enterProduction(n);
598      n.f0.accept(this);
599      n.f1.accept(this);
600      exitProduction();
601   }
602
603   // f0 -> ShiftExpression()
604   // f1 -> ( ( "<" | ">" | "<=" | ">=" ) ShiftExpression() )*
605   public void visit(RelationalExpression n) {
606      enterProduction(n);
607      n.f0.accept(this);
608      n.f1.accept(this);
609      exitProduction();
610   }
611
612   // f0 -> AdditiveExpression()
613   // f1 -> ( ( "<<" | RSIGNEDSHIFT() | RUNSIGNEDSHIFT() ) AdditiveExpression() )*
614   public void visit(ShiftExpression n) {
615      enterProduction(n);
616      n.f0.accept(this);
617      n.f1.accept(this);
618      exitProduction();
619   }
620
621   // f0 -> MultiplicativeExpression()
622   // f1 -> ( ( "+" | "-" ) MultiplicativeExpression() )*
623   public void visit(AdditiveExpression n) {
624      enterProduction(n);
625      n.f0.accept(this);
626      n.f1.accept(this);
627      exitProduction();
628   }
629
630   // f0 -> UnaryExpression()
631   // f1 -> ( ( "*" | "/" | "%" ) UnaryExpression() )*
632   public void visit(MultiplicativeExpression n) {
633      enterProduction(n);
634      n.f0.accept(this);
635      n.f1.accept(this);
636      exitProduction();
637   }
638
639   // f0 -> ( "+" | "-" ) UnaryExpression()
640   //       | PreIncrementExpression()
641   //       | PreDecrementExpression()
642   //       | UnaryExpressionNotPlusMinus()
643   public void visit(UnaryExpression n) {
644      enterProduction(n);
645      n.f0.accept(this);
646      exitProduction();
647   }
648
649   // f0 -> "++"
650   // f1 -> PrimaryExpression()
651   public void visit(PreIncrementExpression n) {
652      enterProduction(n);
653      n.f0.accept(this);
654      n.f1.accept(this);
655      exitProduction();
656   }
657
658   // f0 -> "--"
659   // f1 -> PrimaryExpression()
660   public void visit(PreDecrementExpression n) {
661      enterProduction(n);
662      n.f0.accept(this);
663      n.f1.accept(this);
664      exitProduction();
665   }
666
667   // f0 -> ( "~" | "!" ) UnaryExpression()
668   //       | CastExpression()
669   //       | PostfixExpression()
670   public void visit(UnaryExpressionNotPlusMinus n) {
671      enterProduction(n);
672      n.f0.accept(this);
673      exitProduction();
674   }
675
676   // f0 -> "(" PrimitiveType()
677   //       | "(" Type() "[" "]"
678   //       | "(" Type() ")" ( "~" | "!" | "(" | <IDENTIFIER> | "this" | "super" | "new" | Literal() )
679   public void visit(CastLookahead n) {
680      enterProduction(n);
681      n.f0.accept(this);
682      exitProduction();
683   }
684
685   // f0 -> PrimaryExpression()
686   // f1 -> [ "++" | "--" ]
687   public void visit(PostfixExpression n) {
688      enterProduction(n);
689      n.f0.accept(this);
690      n.f1.accept(this);
691      exitProduction();
692   }
693
694   // f0 -> "(" Type() ")" UnaryExpression()
695   //       | "(" Type() ")" UnaryExpressionNotPlusMinus()
696   public void visit(CastExpression n) {
697      enterProduction(n);
698      n.f0.accept(this);
699      exitProduction();
700   }
701
702   // f0 -> PrimaryPrefix()
703   // f1 -> ( PrimarySuffix() )*
704   public void visit(PrimaryExpression n) {
705      enterProduction(n);
706      n.f0.accept(this);
707      n.f1.accept(this);
708      exitProduction();
709   }
710
711   // f0 -> "."
712   // f1 -> TypeArguments()
713   // f2 -> <IDENTIFIER>
714   public void visit(MemberSelector n) {
715      enterProduction(n);
716      n.f0.accept(this);
717      n.f1.accept(this);
718      n.f2.accept(this);
719      exitProduction();
720   }
721
722   // f0 -> Literal()
723   //       | ( <IDENTIFIER> "." )* "this"
724   //       | "super" "." <IDENTIFIER>
725   //       | ClassOrInterfaceType() "." "super" "." <IDENTIFIER>
726   //       | "(" Expression() ")"
727   //       | AllocationExpression()
728   //       | ResultType() "." "class"
729   //       | Name()
730   public void visit(PrimaryPrefix n) {
731      enterProduction(n);
732      n.f0.accept(this);
733      exitProduction();
734   }
735
736   // f0 -> "." "super"
737   //       | "." "this"
738   //       | "." AllocationExpression()
739   //       | MemberSelector()
740   //       | "[" Expression() "]"
741   //       | "." <IDENTIFIER>
742   //       | Arguments()
743   public void visit(PrimarySuffix n) {
744      enterProduction(n);
745      n.f0.accept(this);
746      exitProduction();
747   }
748
749   // f0 -> <INTEGER_LITERAL>
750   //       | <FLOATING_POINT_LITERAL>
751   //       | <CHARACTER_LITERAL>
752   //       | <STRING_LITERAL>
753   //       | BooleanLiteral()
754   //       | NullLiteral()
755   public void visit(Literal n) {
756      enterProduction(n);
757      n.f0.accept(this);
758      exitProduction();
759   }
760
761   // f0 -> "true"
762   //       | "false"
763   public void visit(BooleanLiteral n) {
764      enterProduction(n);
765      n.f0.accept(this);
766      exitProduction();
767   }
768
769   // f0 -> "null"
770   public void visit(NullLiteral n) {
771      enterProduction(n);
772      n.f0.accept(this);
773      exitProduction();
774   }
775
776   // f0 -> "("
777   // f1 -> [ ArgumentList() ]
778   // f2 -> ")"
779   public void visit(Arguments n) {
780      enterProduction(n);
781      n.f0.accept(this);
782      n.f1.accept(this);
783      n.f2.accept(this);
784      exitProduction();
785   }
786
787   // f0 -> Expression()
788   // f1 -> ( "," Expression() )*
789   public void visit(ArgumentList n) {
790      enterProduction(n);
791      n.f0.accept(this);
792      n.f1.accept(this);
793      exitProduction();
794   }
795
796   // f0 -> "new" PrimitiveType() ArrayDimsAndInits()
797   //       | "new" ClassOrInterfaceType() [ TypeArguments() ] ( ArrayDimsAndInits() | Arguments() [ ClassOrInterfaceBody(false) ] )
798   public void visit(AllocationExpression n) {
799      enterProduction(n);
800      n.f0.accept(this);
801      exitProduction();
802   }
803
804   // f0 -> ( "[" Expression() "]" )+ ( "[" "]" )*
805   //       | ( "[" "]" )+ ArrayInitializer()
806   public void visit(ArrayDimsAndInits n) {
807      enterProduction(n);
808      n.f0.accept(this);
809      exitProduction();
810   }
811
812   // f0 -> LabeledStatement()
813   //       | AssertStatement()
814   //       | Block()
815   //       | EmptyStatement()
816   //       | StatementExpression() ";"
817   //       | SwitchStatement()
818   //       | IfStatement()
819   //       | WhileStatement()
820   //       | DoStatement()
821   //       | ForStatement()
822   //       | BreakStatement()
823   //       | ContinueStatement()
824   //       | ReturnStatement()
825   //       | ThrowStatement()
826   //       | SynchronizedStatement()
827   //       | TryStatement()
828   public void visit(Statement n) {
829      enterProduction(n);
830      n.f0.accept(this);
831      exitProduction();
832   }
833
834   // f0 -> "assert"
835   // f1 -> Expression()
836   // f2 -> [ ":" Expression() ]
837   // f3 -> ";"
838   public void visit(AssertStatement n) {
839      enterProduction(n);
840      n.f0.accept(this);
841      n.f1.accept(this);
842      n.f2.accept(this);
843      n.f3.accept(this);
844      exitProduction();
845   }
846
847   // f0 -> <IDENTIFIER>
848   // f1 -> ":"
849   // f2 -> Statement()
850   public void visit(LabeledStatement n) {
851      enterProduction(n);
852      n.f0.accept(this);
853      n.f1.accept(this);
854      n.f2.accept(this);
855      exitProduction();
856   }
857
858   // f0 -> "{"
859   // f1 -> ( BlockStatement() )*
860   // f2 -> "}"
861   public void visit(Block n) {
862      enterProduction(n);
863      n.f0.accept(this);
864      n.f1.accept(this);
865      n.f2.accept(this);
866      exitProduction();
867   }
868
869   // f0 -> LocalVariableDeclaration() ";"
870   //       | Statement()
871   //       | ClassOrInterfaceDeclaration(0)
872   public void visit(BlockStatement n) {
873      enterProduction(n);
874      n.f0.accept(this);
875      exitProduction();
876   }
877
878   // f0 -> Modifiers()
879   // f1 -> Type()
880   // f2 -> VariableDeclarator()
881   // f3 -> ( "," VariableDeclarator() )*
882   public void visit(LocalVariableDeclaration n) {
883      enterProduction(n);
884      n.f0.accept(this);
885      n.f1.accept(this);
886      n.f2.accept(this);
887      n.f3.accept(this);
888      exitProduction();
889   }
890
891   // f0 -> ";"
892   public void visit(EmptyStatement n) {
893      enterProduction(n);
894      n.f0.accept(this);
895      exitProduction();
896   }
897
898   // f0 -> PreIncrementExpression()
899   //       | PreDecrementExpression()
900   //       | PrimaryExpression() [ "++" | "--" | AssignmentOperator() Expression() ]
901   public void visit(StatementExpression n) {
902      enterProduction(n);
903      n.f0.accept(this);
904      exitProduction();
905   }
906
907   // f0 -> "switch"
908   // f1 -> "("
909   // f2 -> Expression()
910   // f3 -> ")"
911   // f4 -> "{"
912   // f5 -> ( SwitchLabel() ( BlockStatement() )* )*
913   // f6 -> "}"
914   public void visit(SwitchStatement n) {
915      enterProduction(n);
916      n.f0.accept(this);
917      n.f1.accept(this);
918      n.f2.accept(this);
919      n.f3.accept(this);
920      n.f4.accept(this);
921      n.f5.accept(this);
922      n.f6.accept(this);
923      exitProduction();
924   }
925
926   // f0 -> "case" Expression() ":"
927   //       | "default" ":"
928   public void visit(SwitchLabel n) {
929      enterProduction(n);
930      n.f0.accept(this);
931      exitProduction();
932   }
933
934   // f0 -> "if"
935   // f1 -> "("
936   // f2 -> Expression()
937   // f3 -> ")"
938   // f4 -> Statement()
939   // f5 -> [ "else" Statement() ]
940   public void visit(IfStatement n) {
941      enterProduction(n);
942      n.f0.accept(this);
943      n.f1.accept(this);
944      n.f2.accept(this);
945      n.f3.accept(this);
946      n.f4.accept(this);
947      n.f5.accept(this);
948      exitProduction();
949   }
950
951   // f0 -> "while"
952   // f1 -> "("
953   // f2 -> Expression()
954   // f3 -> ")"
955   // f4 -> Statement()
956   public void visit(WhileStatement n) {
957      enterProduction(n);
958      n.f0.accept(this);
959      n.f1.accept(this);
960      n.f2.accept(this);
961      n.f3.accept(this);
962      n.f4.accept(this);
963      exitProduction();
964   }
965
966   // f0 -> "do"
967   // f1 -> Statement()
968   // f2 -> "while"
969   // f3 -> "("
970   // f4 -> Expression()
971   // f5 -> ")"
972   // f6 -> ";"
973   public void visit(DoStatement n) {
974      enterProduction(n);
975      n.f0.accept(this);
976      n.f1.accept(this);
977      n.f2.accept(this);
978      n.f3.accept(this);
979      n.f4.accept(this);
980      n.f5.accept(this);
981      n.f6.accept(this);
982      exitProduction();
983   }
984
985   // f0 -> "for"
986   // f1 -> "("
987   // f2 -> ( Modifiers() Type() <IDENTIFIER> ":" Expression() | [ ForInit() ] ";" [ Expression() ] ";" [ ForUpdate() ] )
988   // f3 -> ")"
989   // f4 -> Statement()
990   public void visit(ForStatement n) {
991      enterProduction(n);
992      n.f0.accept(this);
993      n.f1.accept(this);
994      n.f2.accept(this);
995      n.f3.accept(this);
996      n.f4.accept(this);
997      exitProduction();
998   }
999
1000   // f0 -> LocalVariableDeclaration()
1001   //       | StatementExpressionList()
1002   public void visit(ForInit n) {
1003      enterProduction(n);
1004      n.f0.accept(this);
1005      exitProduction();
1006   }
1007
1008   // f0 -> StatementExpression()
1009   // f1 -> ( "," StatementExpression() )*
1010   public void visit(StatementExpressionList n) {
1011      enterProduction(n);
1012      n.f0.accept(this);
1013      n.f1.accept(this);
1014      exitProduction();
1015   }
1016
1017   // f0 -> StatementExpressionList()
1018   public void visit(ForUpdate n) {
1019      enterProduction(n);
1020      n.f0.accept(this);
1021      exitProduction();
1022   }
1023
1024   // f0 -> "break"
1025   // f1 -> [ <IDENTIFIER> ]
1026   // f2 -> ";"
1027   public void visit(BreakStatement n) {
1028      enterProduction(n);
1029      n.f0.accept(this);
1030      n.f1.accept(this);
1031      n.f2.accept(this);
1032      exitProduction();
1033   }
1034
1035   // f0 -> "continue"
1036   // f1 -> [ <IDENTIFIER> ]
1037   // f2 -> ";"
1038   public void visit(ContinueStatement n) {
1039      enterProduction(n);
1040      n.f0.accept(this);
1041      n.f1.accept(this);
1042      n.f2.accept(this);
1043      exitProduction();
1044   }
1045
1046   // f0 -> "return"
1047   // f1 -> [ Expression() ]
1048   // f2 -> ";"
1049   public void visit(ReturnStatement n) {
1050      enterProduction(n);
1051      n.f0.accept(this);
1052      n.f1.accept(this);
1053      n.f2.accept(this);
1054      exitProduction();
1055   }
1056
1057   // f0 -> "throw"
1058   // f1 -> Expression()
1059   // f2 -> ";"
1060   public void visit(ThrowStatement n) {
1061      enterProduction(n);
1062      n.f0.accept(this);
1063      n.f1.accept(this);
1064      n.f2.accept(this);
1065      exitProduction();
1066   }
1067
1068   // f0 -> "synchronized"
1069   // f1 -> "("
1070   // f2 -> Expression()
1071   // f3 -> ")"
1072   // f4 -> Block()
1073   public void visit(SynchronizedStatement n) {
1074      enterProduction(n);
1075      n.f0.accept(this);
1076      n.f1.accept(this);
1077      n.f2.accept(this);
1078      n.f3.accept(this);
1079      n.f4.accept(this);
1080      exitProduction();
1081   }
1082
1083   // f0 -> "try"
1084   // f1 -> Block()
1085   // f2 -> ( "catch" "(" FormalParameter() ")" Block() )*
1086   // f3 -> [ "finally" Block() ]
1087   public void visit(TryStatement n) {
1088      enterProduction(n);
1089      n.f0.accept(this);
1090      n.f1.accept(this);
1091      n.f2.accept(this);
1092      n.f3.accept(this);
1093      exitProduction();
1094   }
1095
1096   // f0 -> ( ">" ">" ">" )
1097   public void visit(RUNSIGNEDSHIFT n) {
1098      enterProduction(n);
1099      n.f0.accept(this);
1100      exitProduction();
1101   }
1102
1103   // f0 -> ( ">" ">" )
1104   public void visit(RSIGNEDSHIFT n) {
1105      enterProduction(n);
1106      n.f0.accept(this);
1107      exitProduction();
1108   }
1109
1110   // f0 -> NormalAnnotation()
1111   //       | SingleMemberAnnotation()
1112   //       | MarkerAnnotation()
1113   public void visit(Annotation n) {
1114      enterProduction(n);
1115      n.f0.accept(this);
1116      exitProduction();
1117   }
1118
1119   // f0 -> "@"
1120   // f1 -> Name()
1121   // f2 -> "("
1122   // f3 -> [ MemberValuePairs() ]
1123   // f4 -> ")"
1124   public void visit(NormalAnnotation n) {
1125      enterProduction(n);
1126      n.f0.accept(this);
1127      n.f1.accept(this);
1128      n.f2.accept(this);
1129      n.f3.accept(this);
1130      n.f4.accept(this);
1131      exitProduction();
1132   }
1133
1134   // f0 -> "@"
1135   // f1 -> Name()
1136   public void visit(MarkerAnnotation n) {
1137      enterProduction(n);
1138      n.f0.accept(this);
1139      n.f1.accept(this);
1140      exitProduction();
1141   }
1142
1143   // f0 -> "@"
1144   // f1 -> Name()
1145   // f2 -> "("
1146   // f3 -> MemberValue()
1147   // f4 -> ")"
1148   public void visit(SingleMemberAnnotation n) {
1149      enterProduction(n);
1150      n.f0.accept(this);
1151      n.f1.accept(this);
1152      n.f2.accept(this);
1153      n.f3.accept(this);
1154      n.f4.accept(this);
1155      exitProduction();
1156   }
1157
1158   // f0 -> MemberValuePair()
1159   // f1 -> ( "," MemberValuePair() )*
1160   public void visit(MemberValuePairs n) {
1161      enterProduction(n);
1162      n.f0.accept(this);
1163      n.f1.accept(this);
1164      exitProduction();
1165   }
1166
1167   // f0 -> <IDENTIFIER>
1168   // f1 -> "="
1169   // f2 -> MemberValue()
1170   public void visit(MemberValuePair n) {
1171      enterProduction(n);
1172      n.f0.accept(this);
1173      n.f1.accept(this);
1174      n.f2.accept(this);
1175      exitProduction();
1176   }
1177
1178   // f0 -> Annotation()
1179   //       | MemberValueArrayInitializer()
1180   //       | ConditionalExpression()
1181   public void visit(MemberValue n) {
1182      enterProduction(n);
1183      n.f0.accept(this);
1184      exitProduction();
1185   }
1186
1187   // f0 -> "{"
1188   // f1 -> ( MemberValue() ( "," MemberValue() )* [ "," ] )?
1189   // f2 -> "}"
1190   public void visit(MemberValueArrayInitializer n) {
1191      enterProduction(n);
1192      n.f0.accept(this);
1193      n.f1.accept(this);
1194      n.f2.accept(this);
1195      exitProduction();
1196   }
1197
1198   // f0 -> "@"
1199   // f1 -> "interface"
1200   // f2 -> <IDENTIFIER>
1201   // f3 -> AnnotationTypeBody()
1202   public void visit(AnnotationTypeDeclaration n) {
1203      enterProduction(n);
1204      n.f0.accept(this);
1205      n.f1.accept(this);
1206      n.f2.accept(this);
1207      n.f3.accept(this);
1208      exitProduction();
1209   }
1210
1211   // f0 -> "{"
1212   // f1 -> ( AnnotationTypeMemberDeclaration() )*
1213   // f2 -> "}"
1214   public void visit(AnnotationTypeBody n) {
1215      enterProduction(n);
1216      n.f0.accept(this);
1217      n.f1.accept(this);
1218      n.f2.accept(this);
1219      exitProduction();
1220   }
1221
1222   // f0 -> Modifiers() ( Type() <IDENTIFIER> "(" ")" [ DefaultValue() ] ";" | ClassOrInterfaceDeclaration(modifiers) | EnumDeclaration(modifiers) | AnnotationTypeDeclaration(modifiers) | FieldDeclaration(modifiers) )
1223   //       | ( ";" )
1224   public void visit(AnnotationTypeMemberDeclaration n) {
1225      enterProduction(n);
1226      n.f0.accept(this);
1227      exitProduction();
1228   }
1229
1230   // f0 -> "default"
1231   // f1 -> MemberValue()
1232   public void visit(DefaultValue n) {
1233      enterProduction(n);
1234      n.f0.accept(this);
1235      n.f1.accept(this);
1236      exitProduction();
1237   }
1238
1239}