Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2013 21:30:45

Arsegg
Зарегистрирован: 2013-05-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Brainfuck интерпретатор и транслятор

Написал для широко известного эзотерического языка программирования Brainfuck транслятор (в C++) и интерпретатор +компилятор (используется g++ для компиляции результата работы транслятора).

Писал чисто для фана. Код получился простейший (думаю, каждый разберется, ведь оставил поясняющие комментарии) и в то же время производительный (ну, хотя бы старался ). Например, функция, очищающая код от “мусора”, получилась, в результате “махинаций” с timeit, такой:

cleanup = lambda code: filter("><+-,.[]".__contains__, code)
У меня она выполняется за 5мс, в 2 раза быстрее моего первичного результата с генераторами.

http://code.google.com/p/pybrainfuck/

P.S. Жду критику конструктивную и не очень

Отредактировано Arsegg (Май 8, 2013 21:33:54)

Офлайн

#2 Май 9, 2013 10:02:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Brainfuck интерпретатор и транслятор

Вместо

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)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Май 9, 2013 19:00:32

Arsegg
Зарегистрирован: 2013-05-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Brainfuck интерпретатор и транслятор

PooH,
Большое спасибо! Производительность кода увеличилась в 10 раз. Не знал, что можно было для этих целей использовать dict.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version