python 可视化AST、CFG学习

1.python生成AST

官方文档:https://docs.python.org/3/library/ast.html
官方使用的是Cpython解释器的ast包
这样生成的AST不是可视化,如果要可视化的AST推荐ctree
参考链接:https://ucb-sejits.github.io/ctree-docs/ipythontips.html

  1. 安装ipython
    Ubuntu默认的python为2,所以如果要使用ipython3需要运行

sudo apt-get install ipython3

其实ipython就是jupyter notebook
2.安装ctree包

pip install ctree

  1. 测试代码
import ctree

def f(a):
    for x in range(10):
        a[x] += x

tree1 = ctree.get_ast(f)
ctree.ipython_show_ast(tree1)

输出就是AST可视化树,如下图所示
python 可视化AST、CFG学习_第1张图片
后来在jupyter notebook中执行这个代码,会一直没有结果。
尝试在ipython中执行,显示有输出是一张图片,但是无法显示。如下图最后一行所示。
python 可视化AST、CFG学习_第2张图片
后来在jupyter notebook中尝试解决:出现问题如下:
python 可视化AST、CFG学习_第3张图片
使用命令行pip install sphinx仍不能解决,因此查看ctree代码。

vim /home/zyn/anaconda3/envs/ast/lib/python3.7/site-packages/ctree/visual/dot_manager.py

把sphinx这一部分代码注释掉:
python 可视化AST、CFG学习_第4张图片
同时修改代码为:

import ctree
def f(a):
    for x in range(10):
        a[x] += x
tree1 = ctree.get_ast(f)
tree1
ctree
a=ctree.ipython_show_ast(tree1)
a

python 可视化AST、CFG学习_第5张图片
成功!

2.python生成CFG

使用github项目:
PythonStaticAnalysis
使用conda创建python=3.7环境

conda create -n pysa python=3.7
-n后面加的是环境的名字
安装依赖包和环境
pip install -r requirements.txt

运行代码

python runAnalysis.py -t ast -s "def gcd(a, b):
    if a<b:
        c: int = a
        a: int = b
        b: int = c

    while b != 0 :
        c: int = a
        a: int = b
        b: int = c % b
    return a"

或者脚本

./runSample.sh

结果在output文件夹里
python 可视化AST、CFG学习_第6张图片

你可能感兴趣的:(python,学习)