栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

利用python和Tree-sitter 提取C++代码中的函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用python和Tree-sitter 提取C++代码中的函数

1. Tree-sitter

        tree_sitter是一个解析器生成器工具和增量解析库。它可以为源代码文件构建具体的语法树,并在编辑源文件时高效地更新语法树。它支持多种编程语言的解析,包括python, java, c等。同时支持多种编程语言的使用。

 tree_sitter的优点:

 1.足够通用,可以解析任何编程语言

 2.足够快,可以在文本编辑器中对每次击键进行解析

 3.足够健壮,即使在出现语法错误的情况下也能提供有用的结果

 4.无依赖性,因此运行库(用纯C编写)可以嵌入到任何应用程序中

 tree_sitter官网:https://tree-sitter.github.io/tree-sitter/

 python版本tree_sitter的github:https://github.com/tree-sitter/py-tree-sitter

二、使用
from tree_sitter import Language, Parser

# 中括号内的是clone下来的文件夹地址
Language.build_library(
    'build/my-languages.so',
    [
        '../tree-sitter-cpp'
    ]
)
CPP_LANGUAGE = Language('build/my-languages.so', 'cpp')

parser = Parser()
parser.set_language(CPP_LANGUAGE)


 code = self.read_cpp(filename)
 tree = parser.parse(bytes(code,"utf-8"))
 root_node = tree.root_node
 comments = []
 functions = []
 # 为了确定起始行
 code = code.split("n")
 for child_node in root_node.children:
     if child_node.type == "function_definition":
         function_start_line = child_node.start_point[0]
         function_end_line = child_node.end_point[0]
         # 不在同一行
         if function_start_line != function_end_line:
             function_code = code[function_start_line:function_end_line+1]
             function_code = "n".join(function_code)
         else:
             function_code = code[function_start_line]
             # 起始行列  终止行列 函数代码 仓库名 文件名(绝对路径)
    
    
   functions.append([child_node.start_point,child_node.end_point,function_code,filename])

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号