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.
Files changed (45) hide show
  1. lambda_graphs/__init__.py +18 -0
  2. lambda_graphs/__main__.py +7 -0
  3. lambda_graphs/cli.py +183 -0
  4. lambda_graphs/codeviews/AST/AST.py +120 -0
  5. lambda_graphs/codeviews/AST/AST_driver.py +37 -0
  6. lambda_graphs/codeviews/AST/__init__.py +0 -0
  7. lambda_graphs/codeviews/CFG/CFG.py +42 -0
  8. lambda_graphs/codeviews/CFG/CFG_c.py +1182 -0
  9. lambda_graphs/codeviews/CFG/CFG_cpp.py +5604 -0
  10. lambda_graphs/codeviews/CFG/CFG_driver.py +45 -0
  11. lambda_graphs/codeviews/CFG/CFG_java.py +1722 -0
  12. lambda_graphs/codeviews/CFG/__init__.py +0 -0
  13. lambda_graphs/codeviews/CST/CST_driver.py +70 -0
  14. lambda_graphs/codeviews/CST/__init__.py +0 -0
  15. lambda_graphs/codeviews/DFG/DFG_driver.py +42 -0
  16. lambda_graphs/codeviews/DFG/__init__.py +0 -0
  17. lambda_graphs/codeviews/SDFG/SDFG.py +135 -0
  18. lambda_graphs/codeviews/SDFG/SDFG_c.py +2041 -0
  19. lambda_graphs/codeviews/SDFG/SDFG_cpp.py +4030 -0
  20. lambda_graphs/codeviews/SDFG/SDFG_java.py +1618 -0
  21. lambda_graphs/codeviews/SDFG/__init__.py +0 -0
  22. lambda_graphs/codeviews/__init__.py +0 -0
  23. lambda_graphs/codeviews/combined_graph/__init__.py +0 -0
  24. lambda_graphs/codeviews/combined_graph/combined_driver.py +163 -0
  25. lambda_graphs/tree_parser/__init__.py +0 -0
  26. lambda_graphs/tree_parser/c_parser.py +565 -0
  27. lambda_graphs/tree_parser/cpp_parser.py +424 -0
  28. lambda_graphs/tree_parser/custom_parser.py +66 -0
  29. lambda_graphs/tree_parser/java_parser.py +254 -0
  30. lambda_graphs/tree_parser/parser_driver.py +54 -0
  31. lambda_graphs/utils/DFG_utils.py +44 -0
  32. lambda_graphs/utils/__init__.py +0 -0
  33. lambda_graphs/utils/c_nodes.py +431 -0
  34. lambda_graphs/utils/cpp_nodes.py +1331 -0
  35. lambda_graphs/utils/java_nodes.py +756 -0
  36. lambda_graphs/utils/multi_file_merger.py +444 -0
  37. lambda_graphs/utils/postprocessor.py +83 -0
  38. lambda_graphs/utils/preprocessor.py +68 -0
  39. lambda_graphs/utils/src_parser.py +23 -0
  40. lambda_graphs-0.1.4.dist-info/METADATA +380 -0
  41. lambda_graphs-0.1.4.dist-info/RECORD +45 -0
  42. lambda_graphs-0.1.4.dist-info/WHEEL +5 -0
  43. lambda_graphs-0.1.4.dist-info/entry_points.txt +2 -0
  44. lambda_graphs-0.1.4.dist-info/licenses/LICENSE +21 -0
  45. 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