Форум сайта python.su
Написал для широко известного эзотерического языка программирования Brainfuck транслятор (в C++) и интерпретатор +компилятор (используется g++ для компиляции результата работы транслятора).
Писал чисто для фана. Код получился простейший (думаю, каждый разберется, ведь оставил поясняющие комментарии) и в то же время производительный (ну, хотя бы старался ). Например, функция, очищающая код от “мусора”, получилась, в результате “махинаций” с timeit, такой:
cleanup = lambda code: filter("><+-,.[]".__contains__, code)
Отредактировано Arsegg (Май 8, 2013 21:33:54)
Офлайн
Вместо
if cmd == ">": output.write("++p;\n") elif cmd == "<": output.write("--p;\n") elif cmd == "+": output.write("++*p;\n") elif cmd == "-": output.write("--*p;\n") elif cmd == ",": output.write("cin.get(*p);\n") elif cmd == ".": output.write("cout.put(*p);\n") elif cmd == "[": output.write("while(*p){\n") space += 1 elif cmd == "]": output.write("};\n") space -= 1
COMMANDS = { ">": "++p;", "<": "--p;", "+": "++*p;", "-": "--*p;", ",": "cin.get(*p);", ".": "cout.put(*p);", "[": "while(*p){", "]": "};" } COMMAND_SPACE = { "[": 1, "]": -1 } output.write("%s\n" % COMMANDS[cmd]) space += COMMAND_SPACE.get(cmd, 0)
Офлайн
PooH,
Большое спасибо! Производительность кода увеличилась в 10 раз. Не знал, что можно было для этих целей использовать dict.
Офлайн