Skip to content

Andcool-Systems/brainfuck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python BrainFuckA interpreter

wakatime
Интерпретатор языка 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

Cписок команд

Оператор Описание
+ Прибавление единицы к текущей ячейке на 1
- Уменьшение значения текущей ячейки на 1
> Сдвиг выбранной ячейки вправо
< Сдвиг выбранной ячейки влево
. Вывести значение текущей ячейки в кодировке ASCII(может быть применён декоратор *, см. ниже)
, Ввести числовое значение в текущую ячейку (может быть применён декоратор *, см. ниже)
[ Начать цикл, пока значение текущей ячейки не равно нулю
] Конец цикла (см. выше)
GH Создать портал с именем H (имена по аналогии)
gH Перейти к порталу с именем H и продолжить выполнение после него
c Копировать значение из текущей ячейки
p Вставить ранее скопированное значение в текущую ячейку
' Напечатать символ табуляции
" Напечатать символ переноса строки
# Комментарий, пример: #Это комментарий!#
0 Обнуление текущей ячейки


Декоратор * применяется к операторам . и , для изменения типа ввода, ставиться перед нужным оператором, примеры: *. *,.
При применении декоратора к оператору . он начинает выводить сырые значения из ячейки (то-есть числовое значение), в ином случае выводит символ, соответствующий таблице ASCII.
При применении декоратора к оператору , будет происходить конвертация введённого символа в код ASCII, иначе происходит ввод сырого числового значения, без конвертации.