Python接⼝clang解析C语⾔AST抽象语法树1 python上使⽤clang,进⾏程序解析成AST,抽象语法树
1 win10上安装LLVM 作⽤:能够安装各种lib
2 pip install clang 作⽤:作为调⽤clangAPI的接⼝,注意这个clang只是⼀个接⼝
3 ⽬录AST树中调⽤的函数都在 D:\ProgramFiles\python3.6.8\Lib\site-packages\clang\cindex.py
1 from clang.cindex import Index
类Index索引类型,clang.cindex库的主接⼝,通过提供⼀个接⼝来读写来解析翻译
index = ate() 创建⼀个索引
index.parse(filepath, 解析⽂件的路径
args=None, 额外参数通过命令⾏参数添加
Unsaveed_file=None, 列表,⼀项是映射⽂件名字 ⼀项是替换内容
options=0) 其他参数
2 引⽤
import clang.cindex
from clang.cindex import Index  #主要API
from clang.cindex import Config  #配置
from clang.cindex import CursorKind  #索引结点的类别
from clang.cindex import TypeKind    #节点的语义类别
3 clang.cindex需要⽤到libclang.so共享库,所以先配置共享库libclangPath = r'D:/Program Files/LLVM/bin/libclang.dll'
#这个路径需要⾃⼰先在笔记本上安装
if Config.loaded ==True:
print("Config.loaded == True:")
#pass
else:
Config.set_library_file(libclangPath)
print("install path")
4 创建AST索引
file_path = r"test.c"
index = ate()
tu = index.parse(file_path)
AST_root_node= tu.cursor  #cursor根节点
print(AST_root_node)
编程先学c语言还是python5 前序遍历AST
'''
前序遍历严格来说是⼀个⼆叉树才有的概念。这⾥指的是对于每个节点,先遍历本节点,再遍历⼦节点的过程。
'''
node_list =[]
def preorder_travers_AST(cursor):
for cur _children():
#do something
print(cur.spelling)
preorder_travers_AST(cur)
preorder_travers_AST(AST_root_node)
输出
main
printf
printf
printf
"hello world\n"
6提取每个分词的⽅法。
cursor_content=""
for token in AST__tokens(): #针对⼀个节点,调⽤get_tokens的⽅法。print(token.spelling)
输出:
#
include
<
stdio
.
h
>
#
include
<
stdlib
.
h
>
int
main
(
)
{
printf
(
"hello world\n"
)
;
//df=open("test.c","r");
return
;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。