Интерпретатор языка BrainFuckA, написанный на языке Python.
BrainFuckA - это brainfuck-подобный язык программирования с дополнениями для удобства (см. список команд).
Код, написанный на оригинальном BrainFuck так же будет корректно работать.
Для запуска вам не нужны сторонние модули, что бы запустить .bf скрипт просто выполните в консоли следующую команду:
python interpreter.py main.bf
Для запуска уже собранного интерпретатора просто укажите имя файла интерпретатора, а после имя файла со скриптом BrainFuckA:
- В Windows:
./interpreter.exe main.bf
- В Linux/Unix:
./interpreter main.bf
Если вы видите ошибку
permission denied: ./interpreter
при запуске в Linux, то назначьте файл исполняемым командойsudo chmod +x interpreter
После названия скрипта интерпретатора идёт название файла со скриптом brainfuck. Поддерживаемые расширения файлов:
- .bf
- .b
После имени файла, в команде запуска скрипта, можно указать параметр format
, тогда исходный файл со скриптом будет перезаписан на отформатированный скрипт.
После первого запуска скрипта в папке с интерпретатором создастся файл params.json, открыв его Вы сможете найти в нём следующие параметры:
Параметр | Значение по умолчанию | Возможные значения | Описание |
---|---|---|---|
memorySize |
30.000 | Любое числовое значение. | Количество ячеек памяти, выделенных под программу |
memoryManagement |
OFF | OFF /AUTO /JUMP |
OFF — строгое выделение памяти, при вводе некорректного индекса ячейки вызывает ошибку.AUTO — 1 ячейка по умолчанию, при использовании оператора > при несуществующем индексе ячейки памяти добавляется новая со значением, равным 0.JUMP — При выборе ячейки памяти менее 0 или более выделенного размера происходит перенос выбора ячейки с нулевой на последнюю, с последней на нулевую. |
type |
CLASSIC | CLASSIC /ADVANCED |
CLASSIC — Классический интерпретатор, имеет размер ячеек 8 бит может быть переполнен.ADVANCED — Стандартный размер переменных Python, не может быть переполнен. |
В режиме управления памятью AUTO, параметр memorySize отвечает за ограничение размера выделяемой памяти, ограничение можно отключить, установив параметр в значение -1
Оператор | Описание |
---|---|
+ | Прибавление единицы к текущей ячейке на 1 |
- | Уменьшение значения текущей ячейки на 1 |
> | Сдвиг выбранной ячейки вправо |
< | Сдвиг выбранной ячейки влево |
. | Вывести значение текущей ячейки в кодировке ASCII(может быть применён декоратор * , см. ниже) |
, | Ввести числовое значение в текущую ячейку (может быть применён декоратор * , см. ниже) |
[ | Начать цикл, пока значение текущей ячейки не равно нулю |
] | Конец цикла (см. выше) |
GH | Создать портал с именем H (имена по аналогии) |
gH | Перейти к порталу с именем H и продолжить выполнение после него |
c | Копировать значение из текущей ячейки |
p | Вставить ранее скопированное значение в текущую ячейку |
' | Напечатать символ табуляции |
" | Напечатать символ переноса строки |
# | Комментарий, пример: #Это комментарий!# |
0 | Обнуление текущей ячейки |
Декоратор *
применяется к операторам .
и ,
для изменения типа ввода, ставиться перед нужным оператором, примеры: *. *,
.
При применении декоратора к оператору .
он начинает выводить сырые значения из ячейки (то-есть числовое значение), в ином случае выводит символ, соответствующий таблице ASCII.
При применении декоратора к оператору ,
будет происходить конвертация введённого символа в код ASCII, иначе происходит ввод сырого числового значения, без конвертации.