BrainFork Interpreter with 16bit words
Пример запуска:
$brainfork_interpreter {script_path} {optimize}
Параметры запуска:
- {script_path} - путь к скрипту
- {optimize} - 1 для включения оптимизаций, 0 для выключения
- Операторы >/< объединены в одну операцию SHIFT с направлением("-1" - сдвиг влево, "+1" - сдвиг вправо). Цепочки данных операций сворачиваются в одну операцию путем "сложения направлений". Если в итоге получаем 0 - операция просто исключается из списка операций;
- Операторы +/- объединены в одну операцию INC с приращением("-1" - уменьшаем значение, "+1" - увеличиваем). Цепочки данных операций также сворачиваются в одну операцию путем сложения приращений. Если в итоге получаем 0 - операция просто исключается из списка операций;
- Выделена группа операций [+]/[-] под названием ZERO. В данном случае цепочку из данных операций просто превращаем в одну операцию ZERO;
- Алгоритм суммирования [- SHIFT(k) + SHIFT(-k)] выделен в операцию ADD;
- Алгоритм перемещения значения текущей ячейки [SHIFT(k) ZERO SHIFT(-k) ADD(k)] выделен в операцию MOVE;
- Алгоритм копирования значения текущей ячейки [SHIFT(k) ZERO SHIFT(t) ZERO SHIFT(-k-t) [ -SHIFT(k) + SHIFT(t) + SHIFT(-k-t) ] SHIFT(k+t) MOVE(-k-t)] выделен в операцию COPY;
- Алгоритм умножения [- SHIFT(k) INC(b) SHIFT(-k)] выделен в операцию MULT.
- Реализовать оператор "Y"
- Анализ синтаксиса
- ...