CDT:解析枚举,枚举器和相应的值

时间:2013-05-30 12:19:07

标签: eclipse-plugin eclipse-cdt

我正在开发eclipse CDT插件的扩展,它必须解析c ++代码并找到所有

  • 枚举(姓名)
  • 枚举者(姓名)
  • 枚举器值(数字)

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

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

插头应输出如下:

  • 枚举 - SomeEnum
  • 调查员 - 一,二,三,四,maxNum
  • 值 - 0,1,2,3,

ASTVisitor继承类的访问者方法以这种方式查找枚举

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 个答案:

答案 0 :(得分: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;
}