我想解析
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)