مجموعة من طرق تحلل رمز المصدر.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingيجب أن تتمكن من الوصول إلى الشبكة العالمية لاستخدام PIP. مطلوب Python 3.9 مع برنامج التحويل البرمجي C المقابل. قم بتشغيل وحدة التحكم في Python للتحقق من إصدار برنامج التحويل البرمجي C.
يمكن استخدام هذا المشروع عبر واجهة سطر الأوامر ، أو يمكن تضمينه في أي مشروع Python آخر كوحدة فرعية.
شريحة
استخدم هذا الأمر إذا كنت ترغب في تحلل الملفات المصدر عن طريق شريحة حساب كاملة (Nikolaos Tsantalis و Alexander Chatzigeorgiou. 2011.
$ 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 Statementstitletytype - الهيكل الذي يعدد أنواع البيان .
from program_slicing . graph . statement import StatementTypei = 0 ، i += 1 ، i++ ، إلخ).{} أو الجسم الفارغ في if (...) a = 0 ).if ، try ، catch ، switch ).while مثل for ).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 التي تمثل المتغيرات المعنية (بما في ذلك الاستخدام) في مجموعة العبارات المحددة.طرق الفصل:
PARSE - مجموعة من الوظائف التي تسمح ببناء الرسوم البيانية المختلفة من سلسلة شفرة المصدر المحددة ومواصفات لغة البرمجة.
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 )