Conjunto de métodos para decomposição do código -fonte.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingVocê deve ter acesso à rede global para usar o PIP. Python 3.9 com o compilador C correspondente é necessário. Execute o console do Python para verificar a versão do compilador C.
Este projeto pode ser usado via interface da linha de comando ou pode ser incluída em qualquer outro projeto Python como submódulo.
fatiar
Use este comando se desejar decompor arquivos de origem por fatia completa de computação (Nikolaos Tsantalis e Alexander Chatzigeorgiou. 2011. Identificação do método de extrato Refatoração de oportunidades para a decomposição dos métodos).
$ python cli.py slice [-h]
[-o OUTPUT]
sourceArgumentos posicionais:
fonte - pasta de origem, arquivo ou URL
Argumentos opcionais:
-O , -O -saída Saída -Arquivo de saída ou diretório: Dependendo do que você definir como saída, você fará com que a pasta cheia de decomposições de fatia ou de um único arquivo com ele. Ele usa stdout se não for especificado
-h , --help -mostre esta mensagem de ajuda e saída
Exemplos:
$ 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 dependência de controle - estrutura que representa o gráfico de dependência de controle (herdado de networkx.digraph ) com métodos correspondentes.
from program_slicing . graph . cdg import ControlDependenceGraphGráfico de fluxo de controle - estrutura que representa o gráfico de fluxo de controle (herdado de networkx.digraph ) com métodos correspondentes.
from program_slicing . graph . cfg import ControlFlowGraphGráfico de dependência de dados - estrutura que representa o gráfico de dependência de dados (herdado de networkx.digraph ) com métodos correspondentes.
from program_slicing . graph . ddg import DataDependenceGraphGráfico de dependência do programa - estrutura que representa o gráfico de dependência do programa (herdado de networkx.digraph ) com métodos correspondentes.
from program_slicing . graph . pdg import ProgramDependenceGraphDeclaração - Estrutura que representa o gráfico de dependência de controle , o gráfico de dependência de dados ou os nós do gráfico de dependência de programas .
from program_slicing . graph . statement import StatementDeclaraçãoType - estrutura que enumera os tipos de declaração .
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ , etc).{} ou corpo vazio em if (...) a = 0 ).if , try , catch , switch ).for e while ).break , continue , throw , return e até else ).Bloco básico - estrutura que representa nós de gráfico de fluxo de controle .
from program_slicing . graph . basic_block import BasicBlockPrograma Gráfico Gerenciador - Estrutura que contém diferentes tipos de gráficos de programas (como gráfico de fluxo de controle ou gráfico de dependência de controle ) com base no mesmo código -fonte e fornece um conjunto de métodos para sua análise.
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 ))Propriedades:
start_point e depois diminuindo o end_point .SCOPE , BRANCH , LOOP , FUNCTION ou EXIT ).SCOPE , BRANCH , LOOP ou declarações FUNCTION .Métodos públicos:
FUNCTION mínima na qual a instrução fornecida é colocada.SCOPE , LOOP , BRANCH ) que contém uma determinada instrução .VARIABLE que representam variáveis alteradas no conjunto de instruções fornecidas.VARIABLE que representam variáveis envolvidas (incluindo uso) no conjunto de instruções fornecidas.Métodos de classe:
Parse - Conjunto de funções que permitem criar gráficos diferentes a partir da sequência de código -fonte especificada e especificação da linguagem de programação.
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 )Converter - Há também uma opção para converter um tipo de gráfico para outro:
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 )