【问题标题】:get binary operation code with clang python bindings使用 clang python 绑定获取二进制操作代码
【发布时间】:2018-12-07 05:48:33
【问题描述】:

我使用 clang python 绑定来解析我的 C++ 代码。当我得到一个 BINARY_OPERATOR 类型的游标时。我找不到获取运营商代码的方法。

我发现有一种方法可以通过修改 clang 的源代码 (https://reviews.llvm.org/D10833?id=39158#change-vBa6Es1Tcb5q) 来解决它。但是那个提交并没有合并到clang。而且我只是用clang和编译好的二进制文件,有没有其他方法可以在不修改clang源代码的情况下获取操作码?

【问题讨论】:

    标签: python binding clang binary-operators


    【解决方案1】:

    我们可以通过计算左儿子的大小来做一些特殊的事情来获得op。

    请注意,如果游标类型为 BINARY_OPERATOR,则游标将有两个子节点。

    cursor.get_tokens()的长度等于左孩子、右孩子和op的token之和。

    因此,我们可以得到op字符串如下。

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2016-09-17
      • 2013-11-04
      • 2015-05-26
      • 1970-01-01
      • 2019-09-06
      • 2014-08-08
      • 2020-04-24
      • 2017-09-24
      相关资源
      最近更新 更多