@@ -211,6 +211,33 @@ def get_example(code, tgt_word, substitute, lang):
211
211
212
212
return "\n " .join (code )
213
213
214
+
215
+ def get_example_batch (code , chromesome , lang ):
216
+ parser = parsers [lang ]
217
+ code = code .replace ("\\ n" , "\n " )
218
+ parser = parsers [lang ]
219
+ tree = parser [0 ].parse (bytes (code , 'utf8' ))
220
+ root_node = tree .root_node
221
+ tokens_index = tree_to_token_index (root_node )
222
+ code = code .split ('\n ' )
223
+ code_tokens = [index_to_code_token (x , code ) for x in tokens_index ]
224
+ replace_pos = {}
225
+ for tgt_word in chromesome .keys ():
226
+ diff = len (chromesome [tgt_word ]) - len (tgt_word )
227
+ for index , code_token in enumerate (code_tokens ):
228
+ if code_token == tgt_word :
229
+ try :
230
+ replace_pos [tokens_index [index ][0 ][0 ]].append ((tgt_word , chromesome [tgt_word ], diff , tokens_index [index ][0 ][1 ], tokens_index [index ][1 ][1 ]))
231
+ except :
232
+ replace_pos [tokens_index [index ][0 ][0 ]] = [(tgt_word , chromesome [tgt_word ], diff , tokens_index [index ][0 ][1 ], tokens_index [index ][1 ][1 ])]
233
+ for line in replace_pos .keys ():
234
+ diff = 0
235
+ for index , pos in enumerate (replace_pos [line ]):
236
+ code [line ] = code [line ][:pos [3 ]+ diff ] + pos [1 ] + code [line ][pos [4 ]+ diff :]
237
+ diff += pos [2 ]
238
+
239
+ return "\n " .join (code )
240
+
214
241
def unique (sequence ):
215
242
seen = set ()
216
243
return [x for x in sequence if not (x in seen or seen .add (x ))]
@@ -234,12 +261,8 @@ def main():
234
261
code = codes [args .lang ]
235
262
data , _ = get_identifiers (code , args .lang )
236
263
code_ = get_example (java_code , "inChannel" , "dwad" , "java" )
264
+ code_ = get_example_batch (java_code , {"inChannel" :"dwad" , "outChannel" :"geg" }, "java" )
237
265
print (code_ )
238
- print (java_code == code_ )
239
- code_ = get_example (code_ , "dwad" , "inChannel" , "java" )
240
-
241
- print (code_ )
242
- print (java_code == code_ )
243
266
244
267
245
268
if __name__ == '__main__' :
0 commit comments