Skip to content

Commit fab39fd

Browse files
committed
feat(): get example in batch
1 parent a40bf68 commit fab39fd

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

python_parser/run_parser.py

+28-5
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,33 @@ def get_example(code, tgt_word, substitute, lang):
211211

212212
return "\n".join(code)
213213

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+
214241
def unique(sequence):
215242
seen = set()
216243
return [x for x in sequence if not (x in seen or seen.add(x))]
@@ -234,12 +261,8 @@ def main():
234261
code = codes[args.lang]
235262
data, _ = get_identifiers(code, args.lang)
236263
code_ = get_example(java_code, "inChannel", "dwad", "java")
264+
code_ = get_example_batch(java_code, {"inChannel":"dwad", "outChannel":"geg"}, "java")
237265
print(code_)
238-
print(java_code==code_)
239-
code_ = get_example(code_, "dwad", "inChannel", "java")
240-
241-
print(code_)
242-
print(java_code==code_)
243266

244267

245268
if __name__ == '__main__':

utils.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import os
99
import numpy as np
1010
import csv
11-
from python_parser.run_parser import get_example
11+
from python_parser.run_parser import get_example, get_example_batch
1212

1313
python_keywords = ['import', '', '[', ']', ':', ',', '.', '(', ')', '{', '}', 'not', 'is', '=', "+=", '-=', "<", ">",
1414
'+', '-', '*', '/', 'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break',
@@ -115,8 +115,7 @@ def crossover(csome_1, csome_2, r=None):
115115

116116
def map_chromesome(chromesome: dict, code: str, lang: str) -> str:
117117

118-
for tgt_word in chromesome.keys():
119-
temp_replace = get_example(code, tgt_word, chromesome[tgt_word], lang)
118+
temp_replace = get_example_batch(code, chromesome, lang)
120119

121120
return temp_replace
122121

0 commit comments

Comments
 (0)