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 )