Я работаю над синтаксическим анализом cpp кодов с python и имею следующий код python для обхода AST:
def traverse(n):
print (n.kind)
for child in n.get_children():
traverse(child)
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
traverse(tu.cursor)
Я анализирую следующий фрагмент с помощью приведенного выше сценария:
class A {
public:
int num ;
A()
{
num =3;
}
};
Ниже приводится вывод, который я получаю:
CursorKind.CLASS_DECL
CursorKind.CXX_ACCESS_SPEC_DECL
CursorKind.FIELD_DECL
CursorKind.CONSTRUCTOR
CursorKind.COMPOUND_STMT
CursorKind.BINARY_OPERATOR
CursorKind.MEMBER_REF_EXPR
CursorKind.INTEGER_LITERAL
Однако, когда я анализирую его, используя "clang -Xclang -ast-dump -fsyntax-only sample. cpp", тогда для часть ctor, я получаю:
-CXXConstructorDecl 0x27df22fbb10 <line:14:3, line:17:3> line:14:3 used A 'void ()'
| | `-CompoundStmt 0x27df22fbc58 <line:15:3, line:17:3>
| | `-BinaryOperator 0x27df22fbc38 <line:16:4, col:9> 'int' lvalue '='
| | |-MemberExpr 0x27df22fbbe0 <col:4> 'int' lvalue ->num 0x27df22fba50
| | | `-CXXThisExpr 0x27df22fbbd0 <col:4> 'A *' implicit this
| | `-IntegerLiteral 0x27df22fbc10 <col:9> 'int' 3
CXXThisExpr отсутствует в выводе сценария python. Может кто-нибудь сказать мне причину того же или если что-то не так с сценарием?