Для начала или вводный курс в эзотерический язык Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд.
То что может выполнять этот язык:
BrainFuck Developer - с продвинутыми функциями, там внизу ссылка есть на файл
http://brainfuck.progopedia.ru/ - выполнение программ в вашем браузере
Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере.
Список всех команд языка
> перейти к следующей ячейке
< перейти к предыдущей ячейке
+ инкремент значения в текущей ячейке на 1
- декремент значение в текущей ячейке на 1
. напечатать значение из текущей ячейки
, ввести извне значение и сохранить в текущей ячейке
[ если значение текущей ячейки равно 0, перейти вперёд по тексту программы на ячейку, следующую за соответствующей закрывающей ] (с учётом вложенности)
] если значение текущей ячейки не равно 0, перейти назад по тексту программы на ячейку, следующую за соответствующей открывающей [ (с учётом вложенности)
Изначально задумывалось число ячеек в 30 тыс., каждая размером в байт. По умолчанию указатель находится в левой ячейке (ячейка 0); значения всех ячеек равны 0. Ввод/вывод значений происходит по таблице ASCII, точнее по числовому смещению в этой таблице. Например 32 знака "+" и точка — выведут на экран пробел в нулевой позиции, последующий знак ">" переведёт нас к следующей ячейке. Если теперь ввести 72 знака "+" и точку — выведется буква «H». Конструкция +++[.-] по сути цикл, вносим в ячейку значение 3, выводим на экран значение из ячейки и уменьшаем его, соответственно получится вывод символов с кодами 3, 2 и 1.
Параметры языка могут отличаться от разновидностей!
«Hello World!»
+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.---------------- ---
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++ ++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.
Собст венно 72 вывод «H», в этой же ячейке прибавляем ещё 29 вывод «e» и т.д., манипулируя прибавлением/убавлением значения в одной единственной ячейке. Значения не пишутся в ячейку, а выводятся на лету.
Прокачанный «Hello World!»
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
Так сказать хрестоматийный пример. Основан на предварительной подготовке 4 ячеек со значениями 70, 100, 30 и 10, чтобы проще было прибавлять или убавлять. Блок ++++++++++[>+++++++>++++++++++>+++>+<<<<-] 10 раз выполнит операции в цикле — прибавить 7 в первой ячейке, 10 во второй, 3 в третьей и 1 в четвёртой, после чего вернуться к ячейке 0 и уменьшить её. В последующих действиях можно уже разобраться и так.
Стырено с Хабра