2

我正在开发 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;
} 

问题:如何遍历枚举数及其对应的找到枚举值?

4

1 回答 1

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;
}
于 2013-05-31T06:39:47.990 回答