001//
002// Generated by JTB 1.1.2
003//
004
005package jtb.cparser.visitor;
006import jtb.cparser.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   //
015   // Auto class visitors--probably don't need to be overridden.
016   //
017   public void visit(NodeList n) {
018      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
019         (e.nextElement()).accept(this);
020   }
021
022   public void visit(NodeListOptional n) {
023      if ( n.present() )
024         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
025            (e.nextElement()).accept(this);
026   }
027
028   public void visit(NodeOptional n) {
029      if ( n.present() )
030         n.node.accept(this);
031   }
032
033   public void visit(NodeSequence n) {
034      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
035         (e.nextElement()).accept(this);
036   }
037
038   public void visit(NodeToken n) { }
039
040   //
041   // User-generated visitor methods below
042   //
043
044   // f0 -> ( ExternalDeclaration() )+
045   public void visit(TranslationUnit n) {
046      n.f0.accept(this);
047   }
048
049   // f0 -> ( FunctionDefinition() | Declaration() )
050   public void visit(ExternalDeclaration n) {
051      n.f0.accept(this);
052   }
053
054   // f0 -> [ DeclarationSpecifiers() ]
055   // f1 -> Declarator()
056   // f2 -> [ DeclarationList() ]
057   // f3 -> CompoundStatement()
058   public void visit(FunctionDefinition n) {
059      n.f0.accept(this);
060      n.f1.accept(this);
061      n.f2.accept(this);
062      n.f3.accept(this);
063   }
064
065   // f0 -> DeclarationSpecifiers()
066   // f1 -> [ InitDeclaratorList() ]
067   // f2 -> ";"
068   public void visit(Declaration n) {
069      n.f0.accept(this);
070      n.f1.accept(this);
071      n.f2.accept(this);
072   }
073
074   // f0 -> ( Declaration() )+
075   public void visit(DeclarationList n) {
076      n.f0.accept(this);
077   }
078
079   // f0 -> StorageClassSpecifier() [ DeclarationSpecifiers() ]
080   //       | TypeSpecifier() [ DeclarationSpecifiers() ]
081   //       | TypeQualifier() [ DeclarationSpecifiers() ]
082   public void visit(DeclarationSpecifiers n) {
083      n.f0.accept(this);
084   }
085
086   // f0 -> ( &lt; AUTO &gt; | <REGISTER> | <STATIC> | <EXTERN> | <TYPEDEF> )
087   public void visit(StorageClassSpecifier n) {
088      n.f0.accept(this);
089   }
090
091   // f0 -> ( <VOID> | <CHAR> | <SHORT> | <INT> | <LONG> | <FLOAT> | <DOUBLE> | <SIGNED> | <UNSIGNED> | StructOrUnionSpecifier() | EnumSpecifier() | TypedefName() )
092   public void visit(TypeSpecifier n) {
093      n.f0.accept(this);
094   }
095
096   // f0 -> ( <CONST> | <VOLATILE> )
097   public void visit(TypeQualifier n) {
098      n.f0.accept(this);
099   }
100
101   // f0 -> StructOrUnion()
102   // f1 -> ( [ <IDENTIFIER> ] "{" StructDeclarationList() "}" | <IDENTIFIER> )
103   public void visit(StructOrUnionSpecifier n) {
104      n.f0.accept(this);
105      n.f1.accept(this);
106   }
107
108   // f0 -> ( <STRUCT> | <UNION> )
109   public void visit(StructOrUnion n) {
110      n.f0.accept(this);
111   }
112
113   // f0 -> ( StructDeclaration() )+
114   public void visit(StructDeclarationList n) {
115      n.f0.accept(this);
116   }
117
118   // f0 -> InitDeclarator()
119   // f1 -> ( "," InitDeclarator() )*
120   public void visit(InitDeclaratorList n) {
121      n.f0.accept(this);
122      n.f1.accept(this);
123   }
124
125   // f0 -> Declarator()
126   // f1 -> [ "=" Initializer() ]
127   public void visit(InitDeclarator n) {
128      n.f0.accept(this);
129      n.f1.accept(this);
130   }
131
132   // f0 -> SpecifierQualifierList()
133   // f1 -> StructDeclaratorList()
134   // f2 -> ";"
135   public void visit(StructDeclaration n) {
136      n.f0.accept(this);
137      n.f1.accept(this);
138      n.f2.accept(this);
139   }
140
141   // f0 -> TypeSpecifier() [ SpecifierQualifierList() ]
142   //       | TypeQualifier() [ SpecifierQualifierList() ]
143   public void visit(SpecifierQualifierList n) {
144      n.f0.accept(this);
145   }
146
147   // f0 -> StructDeclarator()
148   // f1 -> ( "," StructDeclarator() )*
149   public void visit(StructDeclaratorList n) {
150      n.f0.accept(this);
151      n.f1.accept(this);
152   }
153
154   // f0 -> ( Declarator() | [ Declarator() ] ":" ConstantExpression() )
155   public void visit(StructDeclarator n) {
156      n.f0.accept(this);
157   }
158
159   // f0 -> <ENUM>
160   // f1 -> ( [ <IDENTIFIER> ] "{" EnumeratorList() "}" | <IDENTIFIER> )
161   public void visit(EnumSpecifier n) {
162      n.f0.accept(this);
163      n.f1.accept(this);
164   }
165
166   // f0 -> Enumerator()
167   // f1 -> ( "," Enumerator() )*
168   public void visit(EnumeratorList n) {
169      n.f0.accept(this);
170      n.f1.accept(this);
171   }
172
173   // f0 -> <IDENTIFIER>
174   // f1 -> [ "=" ConstantExpression() ]
175   public void visit(Enumerator n) {
176      n.f0.accept(this);
177      n.f1.accept(this);
178   }
179
180   // f0 -> [ Pointer() ]
181   // f1 -> DirectDeclarator()
182   public void visit(Declarator n) {
183      n.f0.accept(this);
184      n.f1.accept(this);
185   }
186
187   // f0 -> ( t=<IDENTIFIER> | "(" Declarator() ")" )
188   // f1 -> ( "[" [ ConstantExpression() ] "]" | "(" ParameterTypeList() ")" | "(" [ IdentifierList() ] ")" )*
189   public void visit(DirectDeclarator n) {
190      n.f0.accept(this);
191      n.f1.accept(this);
192   }
193
194   // f0 -> "*"
195   // f1 -> [ TypeQualifierList() ]
196   // f2 -> [ Pointer() ]
197   public void visit(Pointer n) {
198      n.f0.accept(this);
199      n.f1.accept(this);
200      n.f2.accept(this);
201   }
202
203   // f0 -> ( TypeQualifier() )+
204   public void visit(TypeQualifierList n) {
205      n.f0.accept(this);
206   }
207
208   // f0 -> ParameterList()
209   // f1 -> [ "," "..." ]
210   public void visit(ParameterTypeList n) {
211      n.f0.accept(this);
212      n.f1.accept(this);
213   }
214
215   // f0 -> ParameterDeclaration()
216   // f1 -> ( "," ParameterDeclaration() )*
217   public void visit(ParameterList n) {
218      n.f0.accept(this);
219      n.f1.accept(this);
220   }
221
222   // f0 -> DeclarationSpecifiers()
223   // f1 -> ( Declarator() | [ AbstractDeclarator() ] )
224   public void visit(ParameterDeclaration n) {
225      n.f0.accept(this);
226      n.f1.accept(this);
227   }
228
229   // f0 -> <IDENTIFIER>
230   // f1 -> ( "," <IDENTIFIER> )*
231   public void visit(IdentifierList n) {
232      n.f0.accept(this);
233      n.f1.accept(this);
234   }
235
236   // f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
237   public void visit(Initializer n) {
238      n.f0.accept(this);
239   }
240
241   // f0 -> Initializer()
242   // f1 -> ( "," Initializer() )*
243   public void visit(InitializerList n) {
244      n.f0.accept(this);
245      n.f1.accept(this);
246   }
247
248   // f0 -> SpecifierQualifierList()
249   // f1 -> [ AbstractDeclarator() ]
250   public void visit(TypeName n) {
251      n.f0.accept(this);
252      n.f1.accept(this);
253   }
254
255   // f0 -> ( Pointer() | [ Pointer() ] DirectAbstractDeclarator() )
256   public void visit(AbstractDeclarator n) {
257      n.f0.accept(this);
258   }
259
260   // f0 -> ( "(" AbstractDeclarator() ")" | "[" [ ConstantExpression() ] "]" | "(" [ ParameterTypeList() ] ")" )
261   // f1 -> ( "[" [ ConstantExpression() ] "]" | "(" [ ParameterTypeList() ] ")" )*
262   public void visit(DirectAbstractDeclarator n) {
263      n.f0.accept(this);
264      n.f1.accept(this);
265   }
266
267   // f0 -> <IDENTIFIER>
268   public void visit(TypedefName n) {
269      n.f0.accept(this);
270   }
271
272   // f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
273   public void visit(Statement n) {
274      n.f0.accept(this);
275   }
276
277   // f0 -> ( <IDENTIFIER> ":" Statement() | <CASE> ConstantExpression() ":" Statement() | <DFLT> ":" Statement() )
278   public void visit(LabeledStatement n) {
279      n.f0.accept(this);
280   }
281
282   // f0 -> [ Expression() ]
283   // f1 -> ";"
284   public void visit(ExpressionStatement n) {
285      n.f0.accept(this);
286      n.f1.accept(this);
287   }
288
289   // f0 -> "{"
290   // f1 -> [ DeclarationList() ]
291   // f2 -> [ StatementList() ]
292   // f3 -> "}"
293   public void visit(CompoundStatement n) {
294      n.f0.accept(this);
295      n.f1.accept(this);
296      n.f2.accept(this);
297      n.f3.accept(this);
298   }
299
300   // f0 -> ( Statement() )+
301   public void visit(StatementList n) {
302      n.f0.accept(this);
303   }
304
305   // f0 -> ( <IF> "(" Expression() ")" Statement() [ <ELSE> Statement() ] | <SWITCH> "(" Expression() ")" Statement() )
306   public void visit(SelectionStatement n) {
307      n.f0.accept(this);
308   }
309
310   // f0 -> ( <WHILE> "(" Expression() ")" Statement() | <DO> Statement() <WHILE> "(" Expression() ")" ";" | <FOR> "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
311   public void visit(IterationStatement n) {
312      n.f0.accept(this);
313   }
314
315   // f0 -> ( <GOTO> <IDENTIFIER> ";" | <CONTINUE> ";" | <BREAK> ";" | <RETURN> [ Expression() ] ";" )
316   public void visit(JumpStatement n) {
317      n.f0.accept(this);
318   }
319
320   // f0 -> AssignmentExpression()
321   // f1 -> ( "," AssignmentExpression() )*
322   public void visit(Expression n) {
323      n.f0.accept(this);
324      n.f1.accept(this);
325   }
326
327   // f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
328   //       | ConditionalExpression()
329   public void visit(AssignmentExpression n) {
330      n.f0.accept(this);
331   }
332
333   // f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" )
334   public void visit(AssignmentOperator n) {
335      n.f0.accept(this);
336   }
337
338   // f0 -> LogicalORExpression()
339   // f1 -> [ "?" Expression() ":" ConditionalExpression() ]
340   public void visit(ConditionalExpression n) {
341      n.f0.accept(this);
342      n.f1.accept(this);
343   }
344
345   // f0 -> ConditionalExpression()
346   public void visit(ConstantExpression n) {
347      n.f0.accept(this);
348   }
349
350   // f0 -> LogicalANDExpression()
351   // f1 -> [ "||" LogicalORExpression() ]
352   public void visit(LogicalORExpression n) {
353      n.f0.accept(this);
354      n.f1.accept(this);
355   }
356
357   // f0 -> InclusiveORExpression()
358   // f1 -> [ "&&" LogicalANDExpression() ]
359   public void visit(LogicalANDExpression n) {
360      n.f0.accept(this);
361      n.f1.accept(this);
362   }
363
364   // f0 -> ExclusiveORExpression()
365   // f1 -> [ "|" InclusiveORExpression() ]
366   public void visit(InclusiveORExpression n) {
367      n.f0.accept(this);
368      n.f1.accept(this);
369   }
370
371   // f0 -> ANDExpression()
372   // f1 -> [ "^" ExclusiveORExpression() ]
373   public void visit(ExclusiveORExpression n) {
374      n.f0.accept(this);
375      n.f1.accept(this);
376   }
377
378   // f0 -> EqualityExpression()
379   // f1 -> [ "&" ANDExpression() ]
380   public void visit(ANDExpression n) {
381      n.f0.accept(this);
382      n.f1.accept(this);
383   }
384
385   // f0 -> RelationalExpression()
386   // f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
387   public void visit(EqualityExpression n) {
388      n.f0.accept(this);
389      n.f1.accept(this);
390   }
391
392   // f0 -> ShiftExpression()
393   // f1 -> [ ( "<" | ">" | "<=" | ">=" ) RelationalExpression() ]
394   public void visit(RelationalExpression n) {
395      n.f0.accept(this);
396      n.f1.accept(this);
397   }
398
399   // f0 -> AdditiveExpression()
400   // f1 -> [ ( "<<" | ">>" ) ShiftExpression() ]
401   public void visit(ShiftExpression n) {
402      n.f0.accept(this);
403      n.f1.accept(this);
404   }
405
406   // f0 -> MultiplicativeExpression()
407   // f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
408   public void visit(AdditiveExpression n) {
409      n.f0.accept(this);
410      n.f1.accept(this);
411   }
412
413   // f0 -> CastExpression()
414   // f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
415   public void visit(MultiplicativeExpression n) {
416      n.f0.accept(this);
417      n.f1.accept(this);
418   }
419
420   // f0 -> ( "(" TypeName() ")" CastExpression() | UnaryExpression() )
421   public void visit(CastExpression n) {
422      n.f0.accept(this);
423   }
424
425   // f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | <SIZEOF> ( UnaryExpression() | "(" TypeName() ")" ) )
426   public void visit(UnaryExpression n) {
427      n.f0.accept(this);
428   }
429
430   // f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
431   public void visit(UnaryOperator n) {
432      n.f0.accept(this);
433   }
434
435   // f0 -> PrimaryExpression()
436   // f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." <IDENTIFIER> | "->" <IDENTIFIER> | "++" | "--" )*
437   public void visit(PostfixExpression n) {
438      n.f0.accept(this);
439      n.f1.accept(this);
440   }
441
442   // f0 -> ( <IDENTIFIER> | Constant() | "(" Expression() ")" )
443   public void visit(PrimaryExpression n) {
444      n.f0.accept(this);
445   }
446
447   // f0 -> AssignmentExpression()
448   // f1 -> ( "," AssignmentExpression() )*
449   public void visit(ArgumentExpressionList n) {
450      n.f0.accept(this);
451      n.f1.accept(this);
452   }
453
454   // f0 -> <INTEGER_LITERAL>
455   //       | <FLOATING_POINT_LITERAL>
456   //       | <CHARACTER_LITERAL>
457   //       | <STRING_LITERAL>
458   public void visit(Constant n) {
459      n.f0.accept(this);
460   }
461
462}