CLang Python绑定:解析if语句节点

时间:2016-01-20 07:39:16

标签: c++ python-3.x llvm-clang

我想解析

if (email.find ("@")! = String :: npos) {cout << "Correct"; } 

hild节点如此

node.getchildren ()

但是CLang找不到if语句节点,因为在条件中

email.find ("@")! = String :: npos

现在这句话

if (a == b) {// do something } 

它没有发现问题。

它是如何工作的?请帮帮我。

我的代码

树遍历的递归方法

    def search_in_ast(self, node, look):
    """
    Поиск однотипных узлов в синтаксическом дереве
    Args:
        node: узел дерева, в котором будет осуществляться рекурсивный поиск
        look: массив искомых представлений узлов (VAR_DECL, FUNCTION_DECL и др) node.kind

    Returns: массив найденных узлов

    """
    nodes_decl = []
    # n = list(node.get_tokens())
    if node.kind in look:
        nodes_decl.append(node)

    # рекурсивный обход дочерних узлов
    for c in node.get_children():

        # обход дочерних узлов выполняется только в файле - main, чтобы не тратить время на стандартные инклюды
        file_name = c.location.file.name.decode("utf-8")
        if file_name == self.path_to_source_code:
            new_vars = self.search_in_ast(c, look)
            if new_vars:
                nodes_decl = nodes_decl + new_vars
    return nodes_decl

所以获得正确类型的节点

match_nodes = [clang.cindex.CursorKind.IF_STMT]
nodes = self.search_in_ast(node, match_nodes)

0 个答案:

没有答案