Conjunto de métodos para la descomposición del código fuente.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingDebe tener acceso a la red global para usar PIP. Se requiere Python 3.9 con el compilador C correspondiente. Ejecute la consola Python para verificar la versión del compilador C.
Este proyecto se puede utilizar a través de la interfaz de línea de comandos , o se puede incluir en cualquier otro proyecto de Python como un submódulo.
rebanada
Use este comando si desea descomponer los archivos de origen mediante un Slice de cálculo completo (Nikolaos tsantalis y Alexander Chatzigeorgiou. 2011. Identificación de las oportunidades de refactorización del método de extracto para la descomposición de los métodos).
$ python cli.py slice [-h]
[-o OUTPUT]
sourceArgumentos posicionales:
Fuente - Carpeta de origen, archivo o URL
Argumentos opcionales:
-O , -Output Salida -Archivo o directorio de salida: dependiendo de lo que establezca como salida, obtendrá una carpeta llena de descomposiciones de corte o un solo archivo con ella. Usa stdout si no se especifica
-h , --help -Muestra este mensaje de ayuda y salida
Ejemplos:
$ 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 MyResultPathGráfico de dependencia de control : estructura que representa el gráfico de dependencia de control (heredado de NetworkX.Digraph ) con los métodos correspondientes.
from program_slicing . graph . cdg import ControlDependenceGraphGráfico de flujo de control : estructura que representa el gráfico de flujo de control (heredado de NetworkX.Digraph ) con los métodos correspondientes.
from program_slicing . graph . cfg import ControlFlowGraphGráfico de dependencia de datos : estructura que representa el gráfico de dependencia de datos (heredado de NetworkX.Digraph ) con los métodos correspondientes.
from program_slicing . graph . ddg import DataDependenceGraphGráfico de dependencia del programa : estructura que representa el gráfico de dependencia del programa (heredado de NetworkX.Digraph ) con los métodos correspondientes.
from program_slicing . graph . pdg import ProgramDependenceGraphDeclaración : estructura que representa el gráfico de dependencia de control , el gráfico de dependencia de datos o los nodos del gráfico de dependencia del programa .
from program_slicing . graph . statement import StatementDeclaryType - Estructura que enumera los tipos de declaración .
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ , etc.).{} o cuerpo vacío en if (...) a = 0 ).if , try , catch , switch ).for y while ).break , continue , throw , return e incluso else ).Bloque básico : estructura que representa nodos de gráficos de flujo de control .
from program_slicing . graph . basic_block import BasicBlockManager de gráficos del programa : estructura que contiene diferentes tipos de gráficos de programa (como gráfico de flujo de control o gráfico de dependencia de control ) basado en el mismo código fuente y proporciona un conjunto de métodos para su análisis.
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 ))Propiedades:
start_point , luego disminuyendo su end_point .SCOPE , BRANCH , LOOP , FUNCTION o EXIT ).SCOPE , BRANCH , LOOP o declaraciones FUNCTION .Métodos públicos:
FUNCTION mínima en la que se coloca la declaración dada.SCOPE , LOOP , BRANCH ) que contiene una declaración dada.VARIABLE que representan variables cambiadas en el conjunto de declaraciones dados.VARIABLE que representan variables involucradas (incluido el uso) en el conjunto dado de declaraciones .Métodos de clase:
PARSE - Conjunto de funciones que permiten crear diferentes gráficos a partir de la cadena de código fuente especificado y la especificación del lenguaje de programación.
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 )Convertir : también hay una opción para convertir un tipo de gráfico a otro:
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 )