lambda-graphs 0.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lambda_graphs/__init__.py +18 -0
- lambda_graphs/__main__.py +7 -0
- lambda_graphs/cli.py +183 -0
- lambda_graphs/codeviews/AST/AST.py +120 -0
- lambda_graphs/codeviews/AST/AST_driver.py +37 -0
- lambda_graphs/codeviews/AST/__init__.py +0 -0
- lambda_graphs/codeviews/CFG/CFG.py +42 -0
- lambda_graphs/codeviews/CFG/CFG_c.py +1182 -0
- lambda_graphs/codeviews/CFG/CFG_cpp.py +5604 -0
- lambda_graphs/codeviews/CFG/CFG_driver.py +45 -0
- lambda_graphs/codeviews/CFG/CFG_java.py +1722 -0
- lambda_graphs/codeviews/CFG/__init__.py +0 -0
- lambda_graphs/codeviews/CST/CST_driver.py +70 -0
- lambda_graphs/codeviews/CST/__init__.py +0 -0
- lambda_graphs/codeviews/DFG/DFG_driver.py +42 -0
- lambda_graphs/codeviews/DFG/__init__.py +0 -0
- lambda_graphs/codeviews/SDFG/SDFG.py +135 -0
- lambda_graphs/codeviews/SDFG/SDFG_c.py +2041 -0
- lambda_graphs/codeviews/SDFG/SDFG_cpp.py +4030 -0
- lambda_graphs/codeviews/SDFG/SDFG_java.py +1618 -0
- lambda_graphs/codeviews/SDFG/__init__.py +0 -0
- lambda_graphs/codeviews/__init__.py +0 -0
- lambda_graphs/codeviews/combined_graph/__init__.py +0 -0
- lambda_graphs/codeviews/combined_graph/combined_driver.py +163 -0
- lambda_graphs/tree_parser/__init__.py +0 -0
- lambda_graphs/tree_parser/c_parser.py +565 -0
- lambda_graphs/tree_parser/cpp_parser.py +424 -0
- lambda_graphs/tree_parser/custom_parser.py +66 -0
- lambda_graphs/tree_parser/java_parser.py +254 -0
- lambda_graphs/tree_parser/parser_driver.py +54 -0
- lambda_graphs/utils/DFG_utils.py +44 -0
- lambda_graphs/utils/__init__.py +0 -0
- lambda_graphs/utils/c_nodes.py +431 -0
- lambda_graphs/utils/cpp_nodes.py +1331 -0
- lambda_graphs/utils/java_nodes.py +756 -0
- lambda_graphs/utils/multi_file_merger.py +444 -0
- lambda_graphs/utils/postprocessor.py +83 -0
- lambda_graphs/utils/preprocessor.py +68 -0
- lambda_graphs/utils/src_parser.py +23 -0
- lambda_graphs-0.1.4.dist-info/METADATA +380 -0
- lambda_graphs-0.1.4.dist-info/RECORD +45 -0
- lambda_graphs-0.1.4.dist-info/WHEEL +5 -0
- lambda_graphs-0.1.4.dist-info/entry_points.txt +2 -0
- lambda_graphs-0.1.4.dist-info/licenses/LICENSE +21 -0
- lambda_graphs-0.1.4.dist-info/top_level.txt +1 -0
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import networkx as nx
|
|
4
|
+
|
|
5
|
+
from ..AST.AST_driver import ASTDriver
|
|
6
|
+
from ..CFG.CFG_driver import CFGDriver
|
|
7
|
+
from ..DFG.DFG_driver import DFGDriver
|
|
8
|
+
from ...utils import postprocessor
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CombinedDriver:
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
src_language="c",
|
|
15
|
+
src_code="",
|
|
16
|
+
output_file=None,
|
|
17
|
+
graph_format="dot",
|
|
18
|
+
codeviews={},
|
|
19
|
+
):
|
|
20
|
+
self.src_language = src_language
|
|
21
|
+
self.src_code = src_code
|
|
22
|
+
self.codeviews = codeviews
|
|
23
|
+
self.graph = nx.MultiDiGraph()
|
|
24
|
+
self.results = {}
|
|
25
|
+
|
|
26
|
+
if self.codeviews["DFG"]["exists"] == True:
|
|
27
|
+
self.results["DFG"] = DFGDriver(
|
|
28
|
+
self.src_language, self.src_code, "", self.codeviews
|
|
29
|
+
)
|
|
30
|
+
self.DFG = self.results["DFG"].graph
|
|
31
|
+
|
|
32
|
+
if self.codeviews["AST"]["exists"] == True:
|
|
33
|
+
self.results["AST"] = ASTDriver(
|
|
34
|
+
self.src_language, self.src_code, "", self.codeviews["AST"]
|
|
35
|
+
)
|
|
36
|
+
self.AST = self.results["AST"].graph
|
|
37
|
+
|
|
38
|
+
if self.codeviews["CFG"]["exists"] == True:
|
|
39
|
+
self.results["CFG"] = CFGDriver(
|
|
40
|
+
self.src_language, self.src_code, "", self.codeviews["CFG"]
|
|
41
|
+
)
|
|
42
|
+
self.CFG = self.results["CFG"].graph
|
|
43
|
+
|
|
44
|
+
self.combine()
|
|
45
|
+
if output_file:
|
|
46
|
+
if graph_format == "all" or graph_format == "json":
|
|
47
|
+
self.json = postprocessor.write_networkx_to_json(
|
|
48
|
+
self.graph, output_file
|
|
49
|
+
)
|
|
50
|
+
if graph_format == "all" or graph_format == "dot":
|
|
51
|
+
postprocessor.write_to_dot(
|
|
52
|
+
self.graph,
|
|
53
|
+
output_file.split(".")[0] + ".dot",
|
|
54
|
+
output_png=True,
|
|
55
|
+
src_language=self.src_language,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
def get_graph(self):
|
|
59
|
+
return self.graph
|
|
60
|
+
|
|
61
|
+
def check_validity(self):
|
|
62
|
+
"""Write logic for valid combinations here"""
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
def AST_simple(self):
|
|
66
|
+
self.graph = self.AST
|
|
67
|
+
|
|
68
|
+
def DFG_simple(self):
|
|
69
|
+
self.graph = self.DFG
|
|
70
|
+
|
|
71
|
+
def CFG_simple(self):
|
|
72
|
+
self.graph = self.CFG
|
|
73
|
+
|
|
74
|
+
def DFG_collapsed(self):
|
|
75
|
+
self.graph = self.DFG
|
|
76
|
+
|
|
77
|
+
def AST_collapsed(self):
|
|
78
|
+
self.graph = self.AST
|
|
79
|
+
|
|
80
|
+
def combine_AST_DFG_simple(self):
|
|
81
|
+
self.graph.add_nodes_from(self.AST.nodes(data=True))
|
|
82
|
+
self.graph.add_nodes_from(self.DFG.nodes(data=True))
|
|
83
|
+
self.graph.add_edges_from(self.AST.edges(data=True))
|
|
84
|
+
self.graph.add_edges_from(self.DFG.edges(data=True))
|
|
85
|
+
|
|
86
|
+
def combine_CFG_DFG_simple(self):
|
|
87
|
+
self.graph.add_nodes_from(self.CFG.nodes(data=True))
|
|
88
|
+
self.graph.add_nodes_from(self.DFG.nodes(data=True))
|
|
89
|
+
self.graph.add_edges_from(self.CFG.edges(data=True))
|
|
90
|
+
self.graph.add_edges_from(self.DFG.edges(data=True))
|
|
91
|
+
|
|
92
|
+
def combine_AST_CFG_simple(self):
|
|
93
|
+
self.graph.add_nodes_from(self.AST.nodes(data=True))
|
|
94
|
+
self.graph.add_nodes_from(self.CFG.nodes(data=True))
|
|
95
|
+
self.graph.add_edges_from(self.AST.edges(data=True))
|
|
96
|
+
self.graph.add_edges_from(self.CFG.edges(data=True))
|
|
97
|
+
|
|
98
|
+
def combine_AST_CFG_DFG_simple(self):
|
|
99
|
+
self.graph.add_nodes_from(self.AST.nodes(data=True))
|
|
100
|
+
self.graph.add_nodes_from(self.CFG.nodes(data=True))
|
|
101
|
+
self.graph.add_nodes_from(self.DFG.nodes(data=True))
|
|
102
|
+
self.graph.add_edges_from(self.AST.edges(data=True))
|
|
103
|
+
self.graph.add_edges_from(self.CFG.edges(data=True))
|
|
104
|
+
self.graph.add_edges_from(self.DFG.edges(data=True))
|
|
105
|
+
|
|
106
|
+
def combine_AST_DFG_collapsed(self):
|
|
107
|
+
self.graph.add_nodes_from(self.AST.nodes(data=True))
|
|
108
|
+
self.graph.add_nodes_from(self.DFG.nodes(data=True))
|
|
109
|
+
self.graph.add_edges_from(self.AST.edges(data=True))
|
|
110
|
+
self.graph.add_edges_from(self.DFG.edges(data=True))
|
|
111
|
+
|
|
112
|
+
def combine(self):
|
|
113
|
+
"""Combine all combinations into a single graph"""
|
|
114
|
+
|
|
115
|
+
if (
|
|
116
|
+
self.codeviews["AST"]["exists"] == True
|
|
117
|
+
and self.codeviews["CFG"]["exists"] == True
|
|
118
|
+
and self.codeviews["DFG"]["exists"] == True
|
|
119
|
+
):
|
|
120
|
+
self.combine_AST_CFG_DFG_simple()
|
|
121
|
+
|
|
122
|
+
elif (
|
|
123
|
+
self.codeviews["AST"]["exists"] == True
|
|
124
|
+
and self.codeviews["DFG"]["exists"] == True
|
|
125
|
+
):
|
|
126
|
+
if (
|
|
127
|
+
self.codeviews["DFG"]["collapsed"] == False
|
|
128
|
+
and self.codeviews["AST"]["collapsed"] == False
|
|
129
|
+
):
|
|
130
|
+
self.combine_AST_DFG_simple()
|
|
131
|
+
|
|
132
|
+
elif (
|
|
133
|
+
self.codeviews["DFG"]["collapsed"] == True
|
|
134
|
+
and self.codeviews["AST"]["collapsed"] == True
|
|
135
|
+
):
|
|
136
|
+
self.combine_AST_DFG_collapsed()
|
|
137
|
+
|
|
138
|
+
elif (
|
|
139
|
+
self.codeviews["AST"]["exists"] == True
|
|
140
|
+
and self.codeviews["CFG"]["exists"] == True
|
|
141
|
+
):
|
|
142
|
+
self.combine_AST_CFG_simple()
|
|
143
|
+
|
|
144
|
+
elif (
|
|
145
|
+
self.codeviews["CFG"]["exists"] == True
|
|
146
|
+
and self.codeviews["DFG"]["exists"] == True
|
|
147
|
+
):
|
|
148
|
+
self.combine_CFG_DFG_simple()
|
|
149
|
+
|
|
150
|
+
elif self.codeviews["AST"]["exists"] == True:
|
|
151
|
+
if self.codeviews["AST"]["collapsed"] == True:
|
|
152
|
+
self.AST_collapsed()
|
|
153
|
+
else:
|
|
154
|
+
self.AST_simple()
|
|
155
|
+
|
|
156
|
+
elif self.codeviews["DFG"]["exists"] == True:
|
|
157
|
+
if self.codeviews["DFG"]["collapsed"] == True:
|
|
158
|
+
self.DFG_collapsed()
|
|
159
|
+
else:
|
|
160
|
+
self.DFG_simple()
|
|
161
|
+
elif self.codeviews["CFG"]["exists"] == True:
|
|
162
|
+
|
|
163
|
+
self.CFG_simple()
|
|
File without changes
|