我正在开发eclipse CDT插件的扩展,它必须解析c ++代码并找到所有
假设.cpp文件包含以下文本
enum SomeEnum
{
One = 0,
Two = 1,
Three = 2,
Four = 3,
maxNum
};
插头应输出如下:
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;
}
问题:如何迭代枚举器及其找到的枚举的相应值?
答案 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;
}