https://github.com/andcool-systems/brainfuck
Brainfuck language python interpreter
https://github.com/andcool-systems/brainfuck
brainfuck-interpreter interpreter python3
Last synced: 2 months ago
JSON representation
Brainfuck language python interpreter
- Host: GitHub
- URL: https://github.com/andcool-systems/brainfuck
- Owner: Andcool-Systems
- License: mit
- Created: 2023-08-14T15:38:08.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-05T10:19:02.000Z (5 months ago)
- Last Synced: 2025-01-25T05:43:53.372Z (4 months ago)
- Topics: brainfuck-interpreter, interpreter, python3
- Language: Python
- Homepage:
- Size: 51.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Python BrainFuckA interpreter
[](https://wakatime.com/badge/user/391a38bf-e366-4a08-8107-7e6a23ad440a/project/b974b541-44fa-4d2d-b985-85a73db7f627)
Интерпретатор языка BrainFuckA, написанный на языке Python.
BrainFuckA - это brainfuck-подобный язык программирования с дополнениями для удобства (см. список команд).
Код, написанный на оригинальном BrainFuck так же будет корректно работать.## Использование
Для запуска вам не нужны сторонние модули, что бы запустить .bf скрипт просто выполните в консоли следующую команду:
```bash
python interpreter.py main.bf
```Для запуска уже собранного интерпретатора просто укажите имя файла интерпретатора, а после имя файла со скриптом BrainFuckA:
- В Windows:
```bash
./interpreter.exe main.bf
```- В Linux/Unix:
```bash
./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, иначе происходит ввод сырого числового значения, без конвертации.