получить код двоичной операции с привязками clang python

Я использую привязки Clang Python для анализа моего кода C++. Когда я получаю курсор с типом BINARY_OPERATOR. Я не могу найти способ получить код оператора.

Я обнаружил, что есть способ решить эту проблему, изменив исходный код clang (https://reviews.llvm.org/D10833?id=39158#change-vBa6Es1Tcb5q). Но этот коммит не слился с лязгом. И я просто использую clang с скомпилированным двоичным файлом, так что есть ли другой способ получить код операции без изменения исходного кода clang?


person jeJee    schedule 28.06.2018    source источник


Ответы (1)


Мы можем сделать что-то особенное, чтобы получить операцию, вычислив размер левого сына.

Обратите внимание, что если вид курсора — BINARY_OPERATOR, у курсора будет два дочерних узла.

Длина cursor.get_tokens() равна сумме токенов левых дочерних элементов, правых дочерних элементов и операции.

Следовательно, мы можем получить строку операции следующим образом.

def parse_binary_op(cursor: Cursor):
    assert cursor.kind == CursorKind.BINARY_OPERATOR
    children_list = [i for i in cursor.get_children()]
    assert len(children_list) == 2
    left_offset = len([i for i in children_list[0].get_tokens()])
    op = [i for i in cursor.get_tokens()][left_offset].spelling
    print(op)
person wxzheng    schedule 17.11.2020