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 -> ( < AUTO > | <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}