Skip to content

Nikita-str/brainfuck-ext--cell-gen-and-devs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bf-ext

кратко о языке

bf-ext является расширением языка brainfuck

отличительные особености

  1. ориентированность на различные внешние устройства
  2. память обладает специальной структурой

Реализованные возможности

  • виртуальная машина (ВМ) для процессора и эмулятор устройств.
  • компилятор bf-ext для процессора и запуск полученного бинарного кода на ВМ.
  • дизасемблер из бинарного кода в комманды соотв.(в данный момент единственнного) процессора.

Подробно о языке

синтаксис

все пробельные символы игнорируются (в данный момент и в include секции)

комментарии

; - символ начало комментария, все символы в строке идущие после ; игнорируются

макросы

# macro-name # seq-cmd # - определение макроса.

%macro-name% - использование макроса, на его место ставится seq-cmd из соотв. макроса.
одно и тоже имя не может дважды использоваться дважды для определения макроса.
макрос не может использоваться перед своим определением.
макросы могут быть вложенными.

%%%[<whitespace-chars><macro-name>]*<whitespace-chars>%%%
использует макросы разделенные пробельными символами.
например

%%%A   
B C   D 
E
%%%

тоже самое что и %A% %B% %C% %D% %E%.
подобное можно использовать для удобства или для использования кода на другом bf-подобном языке

настройки

'setting-name' - подключение настройки. компилятор попытается выполнить соотв. действия.
общий вид: param-0[add-param-0-1|...|add-param-0-K]:...:param-N[add-param-N-1|...|add-param-N-M]

существующие настройки:

  • 'dis-all-dev' - отключает все подключенные устройства
  • 'port-name:name:value' - устанавливает порт name в значение value
    • особую роль при компиляции для виртуальной машины играют port-name:console:X и port-name:screen:X
      (сейчас возможна компиляция только для ВМ, в будущем возможно будет добавлен интерпретатор)
      • port-name:console:X - дополнительно к обычной функции говорит скомпилировать дополнительный код для установки портового регистра консоли.
        Это нужно для использования команд . ,.
        Иначе консоль можно будет использовать но только посредством команд s t r w
        (его установку можно написать на ассемблере ВМ, но не на bf-ext)
      • port-name:screen:X - тоже самое, но для экрана. Нужно для использования команд 4 8 6 2 5 @ 9.
  • подключение устройства:
    • 'dev:dev-name:dev-param-0=value-0:...:dev-param-N=value-N' - подключает устройство с именем dev-name в любой порт c параметрами 0-N с именами dev-param-X и соотв. значениями dev-param-X.
      Если параметр не указан явно то он устанавливается в значение по умолчанию.
    • 'dev[port]:dev-name: ..dev-params..' | - подключает устройство с именем dev-name в порт port (port может быть либо числом либо именем порта) и с параметрами как в пред. пунтке.
      • например dev[console]:utf8-console - подключает utf8-консоль.
      • а dev[screen]:std-win:w=500 - подключает экран и говорит что его ширина должна быть 500 пикселей.

include

## path-to-other-bf-ext-file # - подключает файл path-to-other-bf-ext-file только с возможностью определения макросов, если в файле есть настройки или код компилятор выдаст ошибку.

##'# settings-file # - подключает файл settings-file только с возможностью подключения настроек, если в файле определены макросы или присутствует код компилятор выдаст ошибку.

##!# settings-file # - подключает файл settings-file с возможностью подключения настроек и определения макросов, если в файле есть код компилятор выдаст ошибку.

Параметры запуска программы

USAGE:
    bf_cell_gen.exe [OPTIONS] <--example <X>|--file <X>>

OPTIONS:
    -e, --example <X>
            компилирует и запускает на ВМ примера с номером X из папки examples/examples/

    -f, --file <X>
            путь к файлу bf-ext для последующей компиляции и запуска на ВМ

        --hardware-port-amount <HARDWARE_PORT_AMOUNT>
            [HARDWARE INFO]: количество портов(максимально возможное кол-во подключенных устройств) [по умолчанию: 64]

        --hardware-cem-port <HARDWARE_CEM_PORT>
            [HARDWARE INFO]: CEM port [по умолчанию: 2]

        --hardware-com-port <HARDWARE_COM_PORT>
            [HARDWARE INFO]: COM port [по умолчанию: 1]

        --hardware-max-jump-size <HARDWARE_MAX_JUMP_SIZE>
            [HARDWARE INFO]: максимальная длина прыжка [по умолчанию: 1 << 20]

        --help
            выводит ~данное сообщение(на английском)

        --need-bin
            нужно ли генерировать бинарный код?

        --need-disasm
            нужно ли генерировать дизасемблер?

        --path-bin <PATH_BIN>
            путь к папке для сохранения бинарного кода [по умолчанию: "generated/"]

        --path-disasm <PATH_DISASM>
            путь к папке для сохранения дизасемблера [по умолчанию: "generated/"]

примеры

#1

компиляция и запуск на ВМ кода который выводит строку helwo demvice wowld?\n в консоль.

для запуска используйте одни из след. параметров:

  • -e 1 - примеры из папки можно запускать по номеру
  • -f examples/examples/01_helwo_demv_wowld.bf-ext - с указанием пути

alt-текст

#2

компиляция и запуск на ВМ кода который отображает на экране фразу HELLO SCREEN WORLD попеременно двумя цветами.

для запуска используйте, например, -e 2

alt-текст

доказательство "сахарности" умножения

для запуска используйте -f examples/proof_of_sugarity_some_cmds/proof_mul.bf-ext

alt-текст

первая строка на скрине - пользовательский ввод.
вторая - вывод программы.

другие

другие примеры весьма похожи, можете запустить их самостоятельно.

About

extension for brainfuck programming language

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages