1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import pprint
20 import parser
21 import symbol
22 import token
23 import tokenize
24 import sys
25
26
27
28
29
30 name_sequence = [292, 293, 294, 295, 297, 298, 299, 300, 301, 302,
31 303, 304, 305]
32
33
35 name_sequence.reverse()
36 sublist = []
37 if assign_val_type == 2:
38 sublist = [2, '%(assign_val)d' % vars()]
39 elif assign_val_type == 1:
40 sublist = [2, '%(assign_val)f' % vars()]
41 elif assign_val_type == 3:
42 sublist = [3, '"%(assign_val)s"' % vars()]
43 for val in name_sequence[0:len(name_sequence) - 1]:
44 sublist = [val, sublist]
45 name_sequence.reverse()
46 return sublist
47
48
51
52
53
54
55 self.checking_assign_name = 0
56
57
58
59 self.setting_assign_val = 0
60
61
62
63 self.name_seq_index = 0
64
65
66
67 self.expecting_equals = 0
68
69
70
71 self.extracting_assign_val = 0
72
73
74 self.extracted_val = "not found"
75
76
77
78 self.modifying_AST = modifying_AST
79
80 - def traverse(self, AST_sublist, assign_name, assign_val_subtree):
81
82
83 if type(AST_sublist) != list:
84 return AST_sublist
85
86
87 elif len(AST_sublist) == 2:
88
89
90
91
92
93 if self.name_seq_index > 0:
94
95 if self.name_seq_index == len(name_sequence) - 1 and AST_sublist[0] == name_sequence[self.name_seq_index]:
96 if len(AST_sublist[1]) == 3:
97 if self.extracting_assign_val == 1:
98 extracted_val = AST_sublist[1][1]
99 self.extracted_val = extracted_val
100 self.extracting_assign_val = 0
101 else:
102
103
104
105
106 self.checking_assign_name = 1
107 self.name_seq_index = 0
108
109 else:
110 expected_val = name_sequence[self.name_seq_index]
111 if AST_sublist[0] == expected_val:
112
113 self.name_seq_index = self.name_seq_index + 1
114 else:
115 self.name_seq_index = 0
116 return AST_sublist[0:1] + [self.traverse(AST_sublist[1], assign_name, assign_val_subtree)]
117
118
119
120 else:
121
122 if AST_sublist[0] == 292:
123 if self.setting_assign_val == 1:
124 AST_sublist[1] = assign_val_subtree
125 self.setting_assign_val = 0
126 else:
127
128
129
130 self.name_seq_index = 1
131 return AST_sublist[0:1] + [self.traverse(AST_sublist[1], assign_name, assign_val_subtree)]
132 else:
133 return AST_sublist[0:1] + [self.traverse(AST_sublist[1], assign_name, assign_val_subtree)]
134
135
136 elif len(AST_sublist) == 3:
137
138
139
140 if type(AST_sublist[1]) != list:
141
142
143
144 if self.checking_assign_name == 1:
145
146 if AST_sublist[1] == assign_name:
147
148
149
150 self.expecting_equals = 1
151 self.checking_assign_name = 0
152
153
154
155
156 elif self.expecting_equals == 1:
157
158
159 if AST_sublist[1] == '=':
160 if self.modifying_AST == 1:
161
162
163
164 self.setting_assign_val = 1
165 elif self.modifying_AST == 0:
166
167
168 self.extracting_assign_val = 1
169 self.expecting_equals = 0
170
171 return AST_sublist[0:2]
172
173
174 if self.name_seq_index > 0 or self.name_seq_index < len(name_sequence) - 1:
175
176 if self.extracting_assign_val == 1:
177 self.extracted_val = "compound"
178 self.extracting_assign_val = 0
179
180
181
182
183 sub_list = []
184 for x in AST_sublist:
185 sub_list = sub_list + [self.traverse(x, assign_name, assign_val_subtree)]
186 return sub_list
187
189 myAST_Visitor = AST_Visitor(1)
190 old_AST_list = myAST.tolist(1)
191 assign_val_type = 0
192 if isinstance(assign_val, int):
193 assign_val_type = 2
194 elif isinstance(assign_val, float):
195 assign_val_type = 1
196 elif type(assign_val) == str:
197 assign_val_type = 3
198 new_AST_list = myAST_Visitor.traverse(old_AST_list, assign_name, gen_assign_val_subtree(assign_val, assign_val_type))
199 myNewAST = parser.sequence2ast(new_AST_list)
200 return myNewAST
201
202
204 myAST_Visitor = AST_Visitor(0)
205 old_AST_list = myAST.tolist(1)
206 new_AST_list = myAST_Visitor.traverse(old_AST_list, assign_name, 0)
207 return myAST_Visitor.extracted_val
208