Почему Clang -ast dump и recursiveASTVisitor дают разные результаты? - PullRequest
0 голосов
/ 31 января 2020

Я работаю над синтаксическим анализом 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. Может кто-нибудь сказать мне причину того же или если что-то не так с сценарием?

...