program_slicing
1.0.0
源代码分解的一组方法。
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicing您应该可以访问全球网络以使用PIP。需要带有相应C编译器的Python 3.9。运行Python控制台检查C编译器的版本。
该项目可以通过命令行接口使用,也可以将其包含在任何其他Python项目中,作为subsodule。
片
如果您想通过完整的计算切片分解源文件(Nikolaos tsantalis和AlexanderChatzigeorgiou。2011。识别提取方法重构机会以使方法分解的机会)。
$ python cli.py slice [-h]
[-o OUTPUT]
source位置论点:
源- 源文件夹,文件或URL
可选参数:
-o , - 输出输出 - 输出文件或目录:根据您设置为输出的内容,您将获得装满切片分解的文件夹或带有单个文件的文件夹。如果未指定,它使用Stdout
-h , - 螺旋- 显示此帮助消息并退出
示例:
$ python cli.py slice MyProjectPath$ python cli.py slice MyFile.java$ python cli.py slice MyProjectPath --output MyResultPath$ python cli.py slice MyFile.java --output MyResultPath控制依赖图- 结构,该结构用相应的方法表示控制依赖图(从NetworkX.Digraph继承)。
from program_slicing . graph . cdg import ControlDependenceGraph控制流程图- 用相应方法代表控制流程图(从networkx.digraph继承)的结构。
from program_slicing . graph . cfg import ControlFlowGraph用相应方法代表数据依赖图(从NetworkX.Digraph继承)的数据依赖图- 结构。
from program_slicing . graph . ddg import DataDependenceGraph使用相应方法代表程序依赖图(从NetworkX.Digraph继承)的程序依赖图- 结构。
from program_slicing . graph . pdg import ProgramDependenceGraph语句- 表示控制依赖图,数据依赖图或程序依赖图节点的结构。
from program_slicing . graph . statement import StatementstatementType-列举语句类型的结构。
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++等)。{}或在if (...) a = 0中的空白)。if , try , catch , switch )。for while )。break , continue , throw , return甚至else )。基本块- 代表控制流程节点的结构。
from program_slicing . graph . basic_block import BasicBlock程序图管理器- 基于相同源代码的包含不同类型的程序图(例如控制流程图或控制依赖图)的结构,并提供了一组用于其分析的方法。
from program_slicing . graph . parse import Lang
from program_slicing . graph . parse import control_dependence_graph
from program_slicing . graph . parse import control_flow_graph
from program_slicing . graph . manager import ProgramGraphsManager
manager_by_source = ProgramGraphsManager ( source_code , Lang . JAVA )
manager_by_cdg = ProgramGraphsManager . from_control_dependence_graph ( control_dependence_graph ( source_code , Lang . JAVA ))
manager_by_cfg = ProgramGraphsManager . from_control_flow_graph ( control_flow_graph ( source_code , Lang . JAVA ))特性:
start_point首先排序,然后通过减少end_point来排序。SCOPE , BRANCH , LOOP , FUNCTION或EXIT语句中的内容)。SCOPE , BRANCH , LOOP或FUNCTION语句。公共方法:
FUNCTION语句。SCOPE , LOOP , BRANCH )语句。VARIABLE语句。VARIABLE语句。类方法:
解析- 允许从指定的源代码字符串和编程语言规范构建不同图形的功能集。
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . parse import control_dependence_graph , Lang
cdg : ControlDependenceGraph = control_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . cfg import ControlFlowGraph
from program_slicing . graph . parse import control_flow_graph , Lang
cfg : ControlFlowGraph = control_flow_graph ( source_code , Lang . JAVA ) from program_slicing . graph . ddg import DataDependenceGraph
from program_slicing . graph . parse import data_dependence_graph , Lang
ddg : DataDependenceGraph = data_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . pdg import ProgramDependenceGraph
from program_slicing . graph . parse import program_dependence_graph , Lang
pdg : ProgramDependenceGraph = program_dependence_graph ( source_code , Lang . JAVA ) from tree_sitter import Tree
from program_slicing . graph . parse import tree_sitter_ast , Lang
ast : Tree = tree_sitter_ast ( source_code , Lang . JAVA )转换- 还有一个选项将一种类型的图形转换为另一种图形:
from program_slicing . graph import convert
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . cfg import ControlFlowGraph
cdg : ControlDependenceGraph = ControlDependenceGraph ()
cfg : ControlFlowGraph = convert . cdg . to_cfg ( cdg )
new_cdg : ControlDependenceGraph = convert . cfg . to_cdg ( cfg )