2013-05-30 72 views
2

我开发的Eclipse CDT的扩展插件,它具有解析C++代码,发现所有CDT:解析枚举,枚举和相应的值

  • 枚举(名称)
  • 统计员(名)
  • 枚举值(数字)

假设.cpp文件包含以下文本

enum SomeEnum 
{ 
    One   = 0, 
    Two   = 1, 
    Three   = 2, 
    Four   = 3, 
    maxNum 
}; 

的pluging应输出以下:

  • 枚举 - SomeEnum
  • 枚举 - 一,二,三,四,MAXNUM
  • 值 - 0,1,2,3 ,

ASTVisitor继承类的visitor方法查找enumeratio NS这样

public int visit(IASTDeclaration declaration) { 
    if (declaration instanceof IASTSimpleDeclaration) { 

     IASTDeclSpecifier specifier = ((IASTSimpleDeclaration)declaration).getDeclSpecifier(); 

     if (specifier instanceof IASTEnumerationSpecifier) { 

      IASTEnumerationSpecifier enumSpecifier = (IASTEnumerationSpecifier)specifier; 
      IBinding binding = enumSpecifier.getName().resolveBinding(); 
      System.out.println(enumSpecifier.getName()); 
     } 
    } 
    return PROCESS_CONTINUE; 
} 

问:我如何可以遍历枚举,发现枚举其相应的价值?

回答

1

好想通了我自己

public int visit(IASTDeclaration declaration) { 
    if (declaration instanceof IASTSimpleDeclaration) { 
     IASTDeclSpecifier specifier = ((IASTSimpleDeclaration)declaration).getDeclSpecifier(); 
     if (specifier instanceof IASTEnumerationSpecifier) { 
      IASTEnumerationSpecifier enumSpecifier = (IASTEnumerationSpecifier)specifier; 
      // Get the current enumeration name 
      String enumerationName = enumSpecifier.getName().toString(); 
      IASTEnumerator[] enumerators = enumSpecifier.getEnumerators(); 
      for (IASTEnumerator enumerator : enumerators) 
      { 
       System.out.println(enumerator.getName()); 
       if (enumerator.getValue() instanceof IASTLiteralExpression ) { 
        System.out.println(enumerator.getValue()); 
       } 
      } 
     } 
    } 
    return PROCESS_CONTINUE; 
}