소스 코드 분해 방법 세트.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingPIP를 사용하려면 글로벌 네트워크에 액세스해야합니다. 해당 C 컴파일러가있는 Python 3.9가 필요합니다. Python 콘솔을 실행하여 C 컴파일러 버전을 확인하십시오.
이 프로젝트는 명령 줄 인터페이스를 통해 사용할 수 있거나 다른 Python 프로젝트에 하위 모듈로 포함될 수 있습니다.
일부분
완전한 계산 슬라이스 (Nikolaos Tsantalis 및 Alexander Chatzigeorgiou.
$ python cli.py slice [-h]
[-o OUTPUT]
source위치 논쟁 :
소스 - 소스 폴더, 파일 또는 URL
선택적 인수 :
-O , - 출력 -출력 파일 또는 디렉토리 : 출력으로 설정 한 내용에 따라 폴더가 슬라이스 분해 또는 단일 파일로 가득 찬 폴더를 가져옵니다. 지정되지 않은 경우 Stdout을 사용합니다
-h , -help- 이 도움말 메시지 메시지 및 종료
예 :
$ 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 StatementStateGype- 명령문 유형을 열거하는 구조.
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 를 줄임으로써 먼저 정렬 된 return 문 .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 )