<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Brainfuck</id>
	<title>Brainfuck - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Brainfuck"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Brainfuck&amp;action=history"/>
	<updated>2026-07-16T22:43:40Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=Brainfuck&amp;diff=41345&amp;oldid=prev</id>
		<title>imported&gt;Lê Lợi (bot): Автодевикификация Шаблон:Языки программирования.</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Brainfuck&amp;diff=41345&amp;oldid=prev"/>
		<updated>2025-12-03T11:40:03Z</updated>

		<summary type="html">&lt;p&gt;Автодевикификация &lt;a href=&quot;/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%AF%D0%B7%D1%8B%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Шаблон:Языки программирования (страница не существует)&quot;&gt;Шаблон:Языки программирования&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Также|BF}}&lt;br /&gt;
{{Карточка языка программирования&lt;br /&gt;
 | name = Brainfuck&lt;br /&gt;
 | logo =&lt;br /&gt;
 | semantics =&lt;br /&gt;
 | paradigm = [[Эзотерический язык программирования|Эзотерический]], [[Императивное программирование|Императивный]], [[Структурное программирование|Структурный]]&lt;br /&gt;
 | class=&lt;br /&gt;
 | year = 1993&lt;br /&gt;
 | designer = Урбан Мюллер&lt;br /&gt;
 | extension =&lt;br /&gt;
 | latest_release_version =&lt;br /&gt;
 | latest_release_date =&lt;br /&gt;
 | latest_preview_version =&lt;br /&gt;
 | latest_preview_date =&lt;br /&gt;
 | typing =&lt;br /&gt;
 | implementations =&lt;br /&gt;
 | dialects = Brains*b, Brainfork, Brainloller, COW, Ook, Pbrain, Smallfuck, [[Spoon]], [[LOLCODE]], [[Whitespace]], [[DoubleFuck]], [[Feckfeck]]&lt;br /&gt;
 | influenced_by = [[FALSE]]&lt;br /&gt;
 | influenced =&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Brainfuck&amp;#039;&amp;#039;&amp;#039; — один из [[Эзотерические языки программирования|эзотерических языков программирования]], придуман [[Мюллер, Урбан|Урбаном Мюллером]] ({{lang-de|Urban Müller}}) в [[1993 год]]у, известен своим минимализмом. Название языка можно перевести на русский как &amp;#039;&amp;#039;вынос мозга&amp;#039;&amp;#039; ({{lang-en|brainfuck}}). Язык имеет восемь команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность этих символов без какого-либо дополнительного синтаксиса.&lt;br /&gt;
&lt;br /&gt;
Одним из мотивов Урбана Мюллера было создание языка с как можно меньшим компилятором. Отчасти он был вдохновлён языком [[FALSE]], для которого существовал компилятор размером 2044 байта. Существуют компиляторы языка Brainfuck размером меньше 200 байт&amp;lt;ref&amp;gt;{{cite web|url=https://www.muppetlabs.com/~breadbox/software/tiny/bf.asm.txt|title=Исходник компилятора размером в 166 байт|accessdate=2023-11-27|archiveurl=https://web.archive.org/web/20231021113315/http://www.muppetlabs.com:80/~breadbox/software/tiny/bf.asm.txt|archivedate=2023-10-21|url-status=live}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Программы на языке писать сложно, часто приводится как один их ярких примеров «[[Тьюринговская трясина|тьюринговской трясины]]» — [[Полнота по Тьюрингу|тьюринг-полного]] языка, непрактичного в связи с примитивностью. Но при этом является вполне естественным, полным и простым языком и может использоваться при определении понятия [[Вычислимые функции|вычислимости]]. Почти не используется для практического программирования (за исключением работ отдельных энтузиастов), а используется преимущественно для головоломок и задач для соревнований. Существует ряд диалектов языка, среди них — [[Spoon]], [[LOLCODE]], [[Whitespace]], [[Feckfeck]].&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, напоминая ленту и головку [[машина Тьюринга|машины Тьюринга]]. Кроме того, подразумевается устройство общения с внешним миром (см. команды &amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;,&amp;#039;&amp;#039;&amp;#039;) через поток ввода и поток вывода.&lt;br /&gt;
&lt;br /&gt;
Язык Brainfuck можно описать с помощью эквивалентов [[Си (язык программирования)|языка Си]]:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Команда Brainfuck&lt;br /&gt;
! Эквивалент на Си&lt;br /&gt;
! Описание команды&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|Начало программы|| &amp;lt;code&amp;gt;char arr[30000];&amp;lt;br&amp;gt;memset(arr, 0, sizeof(arr));&amp;lt;/code&amp;gt; || выделяется память под 30 000 ячеек с нулевыми начальными значениями&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;i++;&amp;lt;/code&amp;gt; || перейти к следующей ячейке&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;i--;&amp;lt;/code&amp;gt; || перейти к предыдущей ячейке&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;arr[i]++;&amp;lt;/code&amp;gt; || увеличить значение в текущей ячейке на 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;arr[i]--;&amp;lt;/code&amp;gt; || уменьшить значение в текущей ячейке на 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;putchar(arr[i]);&amp;lt;/code&amp;gt; || напечатать значение из текущей ячейки&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;arr[i]&amp;amp;nbsp;=&amp;amp;nbsp;getchar();&amp;lt;/code&amp;gt; || ввести извне значение и сохранить в текущей ячейке&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;while(arr[i]){&amp;lt;/code&amp;gt; || если значение текущей ячейки ноль, перейти вперёд по тексту программы на символ, следующий за соответствующей &amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt; (с учётом вложенности)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt; || если значение текущей ячейки не ноль, перейти назад по тексту программы на символ &amp;lt;tt&amp;gt;[&amp;lt;/tt&amp;gt; (с учётом вложенности)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Несмотря на внешнюю примитивность, &amp;#039;&amp;#039;Brainfuck&amp;#039;&amp;#039; с бесконечным набором ячеек имеет [[Полнота по Тьюрингу|тьюринговскую полноту]], а, следовательно, по потенциальным возможностям не уступает «настоящим» языкам, подобным [[Си (язык программирования)|Си]], [[Паскаль (язык программирования)|Паскалю]] или [[Java]].&lt;br /&gt;
&lt;br /&gt;
Язык подходит для экспериментов по [[Генетическое программирование|генетическому программированию]] из-за простоты синтаксиса, и, соответственно, генерации исходного кода.&lt;br /&gt;
&lt;br /&gt;
В «классическом» Brainfuck, описанном Мюллером, размер ячейки — один байт, количество ячеек 30 000. В начальном состоянии указатель находится в крайней левой позиции, а все ячейки заполнены нулями. Увеличение или уменьшение значений ячеек происходит по модулю 256. Ввод-вывод также происходит побайтно, с учётом кодировки ASCII (то есть в результате операции ввода (&amp;#039;&amp;#039;&amp;#039;,&amp;#039;&amp;#039;&amp;#039;) символ &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; будет записан в текущую ячейку как число 0x31 (49), а операция вывода (&amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;), совершённая над ячейкой, содержащей 0x41 (65), напечатает латинскую &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;А&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;). В других вариантах языка размер и количество ячеек может быть другим (бо́льшим). Есть версии, где значение ячеек не целочисленно (с плавающей точкой).&lt;br /&gt;
&lt;br /&gt;
== Пример программы ==&lt;br /&gt;
Пошаговая программа на языке Brainfuck, печатающая &amp;#039;&amp;#039;«Hello World!»&amp;#039;&amp;#039; с переносом строки (в виде ASCII-кода — 72 101 108 108 111 32 87 111 114 108 100 33 10):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bf&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;+++++++++[&amp;lt;++++++++&amp;gt;-]&amp;lt;.&amp;gt;+++++++[&amp;lt;++++&amp;gt;-]&amp;lt;+.+++++++..+++.&amp;gt;&amp;gt;&amp;gt;++++++++[&amp;lt;++++&amp;gt;-]&lt;br /&gt;
&amp;lt;.&amp;gt;&amp;gt;&amp;gt;++++++++++[&amp;lt;+++++++++&amp;gt;-]&amp;lt;---.&amp;lt;&amp;lt;&amp;lt;&amp;lt;.+++.------.--------.&amp;gt;&amp;gt;+.&amp;gt;++++++++++.&amp;lt;/source&amp;gt;&lt;br /&gt;
Итого 389 операторов и использована 1 ячейка памяти. Оптимизированная программа заметно короче — всего 111 операторов, но 5 ячеек памяти. Первая ячейка используется как обратный счётчик цикла на 10 итераций, в последующих ячейках находятся числа &amp;#039;&amp;#039;7, 10, 3 и 1&amp;#039;&amp;#039;, наращиваемые этим циклом до &amp;#039;&amp;#039;70, 100, 30 и 10&amp;#039;&amp;#039;, досуммирование происходит перед печатанием, второе слово конструируется из остатков первого:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bf&amp;quot;&amp;gt;&lt;br /&gt;
 ++++++++++[&amp;gt;+++++++&amp;gt;++++++++++&amp;gt;+++&amp;gt;+&amp;lt;&amp;lt;&amp;lt;&amp;lt;-]&amp;gt;++&lt;br /&gt;
 .&amp;gt;+.+++++++..+++.&amp;gt;++.&amp;lt;&amp;lt;+++++++++++++++.&amp;gt;.+++.&lt;br /&gt;
 ------.--------.&amp;gt;+.&amp;gt;.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разбор программы:&lt;br /&gt;
{{-}}&lt;br /&gt;
{|frame style=&amp;quot;padding-left: 10px&amp;quot;&lt;br /&gt;
 | colspan = 2 style = &amp;quot;text-align: center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Цикл формирования основных чисел&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;++++++++++&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || присваивание &amp;#039;&amp;#039;ячейке 0&amp;#039;&amp;#039; значения 10&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || повторять описанные этой скобкой команды, пока значение текущей &amp;#039;&amp;#039;ячейки 0&amp;#039;&amp;#039; не равно нулю&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;+++++++&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || приращение &amp;#039;&amp;#039;ячейки 1&amp;#039;&amp;#039; на 7&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;++++++++++&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || приращение &amp;#039;&amp;#039;ячейки 2&amp;#039;&amp;#039; на 10&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;+++&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || приращение &amp;#039;&amp;#039;ячейки 3&amp;#039;&amp;#039; на 3&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;+&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || приращение &amp;#039;&amp;#039;ячейки 4&amp;#039;&amp;#039; на 1&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;-&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || декремент &amp;#039;&amp;#039;ячейки 0&amp;#039;&amp;#039; на 1&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || проверка, не равна ли &amp;#039;&amp;#039;ячейка 0&amp;#039;&amp;#039; нулю&lt;br /&gt;
 |-&lt;br /&gt;
 | colspan = 2 style = &amp;quot;text-align: center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Вывод первого слова&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;++.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 1&amp;#039;&amp;#039; добавление 2 к 70 и вывод на печать ASCII-кода 72, т.е. буквы «&amp;#039;&amp;#039;Н&amp;#039;&amp;#039;».&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;+.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 2&amp;#039;&amp;#039; добавление 1 к 100 = 101, печать буквы «&amp;#039;&amp;#039;e&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;+++++++..&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в этой же ячейке добавление 7 к 101 = 108, печать «&amp;#039;&amp;#039;l&amp;#039;&amp;#039;» дважды&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;+++.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в этой же ячейке добавление 3 к 108 = 111, печать «&amp;#039;&amp;#039;o&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;++.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 3&amp;#039;&amp;#039; добавление 2 к 30 = 32, печать пробела&lt;br /&gt;
 |-&lt;br /&gt;
 | colspan = 2 style = &amp;quot;text-align: center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Вывод второго слова с повторным использованием ячеек&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;lt;&amp;lt;+++++++++++++++.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 1&amp;#039;&amp;#039; добавление 15 к 72 = 87, печать «&amp;#039;&amp;#039;W&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 2&amp;#039;&amp;#039; уже есть 111, сразу печать «&amp;#039;&amp;#039;o&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;+++.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в этой же ячейке добавление 3 к 111 = 114, печать «&amp;#039;&amp;#039;r&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;------.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в этой же ячейке вычитание 6 из 114 = 108, печать «&amp;#039;&amp;#039;l&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;--------.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в этой же ячейке вычитание 8 из 108 = 100, печать «&amp;#039;&amp;#039;d&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;+.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 3&amp;#039;&amp;#039; добавление 1 к 32 = 33, печать «&amp;#039;&amp;#039;!&amp;#039;&amp;#039;»&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;.&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; || в &amp;#039;&amp;#039;ячейке 4&amp;#039;&amp;#039; уже есть 10, сразу печать перевода строки&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Интерпретаторы ==&lt;br /&gt;
Пример интерпретатора Brainfuck, написанный на языке [[Perl]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
open F, shift;&lt;br /&gt;
@code = grep {/[+-\.,\[\]&amp;gt;&amp;lt;]/} split &amp;#039;&amp;#039;, &amp;lt;F&amp;gt;;&lt;br /&gt;
for (my $_ = 0; $_ &amp;lt; @code; ++$_) {&lt;br /&gt;
  ++$cpu[$i] if $code[$_] eq &amp;#039;+&amp;#039;;&lt;br /&gt;
  --$cpu[$i] if $code[$_] eq &amp;#039;-&amp;#039;;&lt;br /&gt;
  --$i if $code[$_] eq &amp;#039;&amp;lt;&amp;#039;;&lt;br /&gt;
  ++$i if $code[$_] eq &amp;#039;&amp;gt;&amp;#039;;&lt;br /&gt;
  print chr $cpu[$i] if $code[$_] eq &amp;#039;.&amp;#039;;&lt;br /&gt;
  $cpu[$i] = ord &amp;lt;STDIN&amp;gt; if $code[$_] eq &amp;#039;,&amp;#039;;&lt;br /&gt;
  if ($code[$_] eq &amp;#039;[&amp;#039;) {&lt;br /&gt;
    if (!$cpu[$i]) {&lt;br /&gt;
      ++$brc;&lt;br /&gt;
      while ($brc) {&lt;br /&gt;
        ++$_;&lt;br /&gt;
        ++$brc if $code[$_] eq &amp;#039;[&amp;#039;;&lt;br /&gt;
        --$brc if $code[$_] eq &amp;#039;]&amp;#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      next;&lt;br /&gt;
    }&lt;br /&gt;
  } elsif ($code[$_] eq &amp;#039;]&amp;#039;) {&lt;br /&gt;
    if (!$cpu[$i]) {&lt;br /&gt;
      next;&lt;br /&gt;
    } else {&lt;br /&gt;
      ++$brc if $code[$_] eq &amp;#039;]&amp;#039;;&lt;br /&gt;
      while ($brc) {&lt;br /&gt;
        --$_;&lt;br /&gt;
        --$brc if $code[$_] eq &amp;#039;[&amp;#039;;&lt;br /&gt;
        ++$brc if $code[$_] eq &amp;#039;]&amp;#039;;&lt;br /&gt;
      }&lt;br /&gt;
    --$_;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример интерпретатора на [[C++]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;iterator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
	std::fstream file(argv[1], std::ios::in);&lt;br /&gt;
	std::istreambuf_iterator&amp;lt;char&amp;gt; fstart(file), fend;&lt;br /&gt;
	std::vector&amp;lt;unsigned char&amp;gt; itape(fstart, fend);&lt;br /&gt;
	file.close();&lt;br /&gt;
	&lt;br /&gt;
	std::vector&amp;lt;unsigned char&amp;gt; mtape(30000, 0);&lt;br /&gt;
	std::vector&amp;lt;unsigned char&amp;gt;::iterator m = mtape.begin();&lt;br /&gt;
	std::vector&amp;lt;unsigned char&amp;gt;::iterator i = itape.begin();&lt;br /&gt;
	&lt;br /&gt;
	int b = 0;&lt;br /&gt;
	for(; i != itape.end(); ++i) {&lt;br /&gt;
		switch(*i){&lt;br /&gt;
			case &amp;#039;&amp;gt;&amp;#039;:&lt;br /&gt;
				if(++m == mtape.end()) {&lt;br /&gt;
					mtape.push_back(0);&lt;br /&gt;
					m = --mtape.end();&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;#039;&amp;lt;&amp;#039;: --m; break;&lt;br /&gt;
			case &amp;#039;+&amp;#039;: ++*m; break;&lt;br /&gt;
			case &amp;#039;-&amp;#039;: --*m; break;&lt;br /&gt;
			case &amp;#039;.&amp;#039;: std::cout &amp;lt;&amp;lt; *m; break;&lt;br /&gt;
			case &amp;#039;,&amp;#039;: std::cin &amp;gt;&amp;gt; *m; break;&lt;br /&gt;
			case &amp;#039;[&amp;#039;:&lt;br /&gt;
				if (*m) continue;&lt;br /&gt;
				++b;&lt;br /&gt;
				while(b)&lt;br /&gt;
					switch(*++i){&lt;br /&gt;
						case &amp;#039;[&amp;#039;: ++b; break;&lt;br /&gt;
						case &amp;#039;]&amp;#039;: --b; break;&lt;br /&gt;
					}&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;#039;]&amp;#039;:&lt;br /&gt;
				if(!*m) continue;&lt;br /&gt;
				++b;&lt;br /&gt;
				while(b)&lt;br /&gt;
					switch(*--i){&lt;br /&gt;
						case &amp;#039;[&amp;#039;: --b; break;&lt;br /&gt;
						case &amp;#039;]&amp;#039;: ++b; break;&lt;br /&gt;
					}&lt;br /&gt;
				--i;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
{{Чистить ссылки|дата=2023-11-19}}&lt;br /&gt;
* [http://www.muppetlabs.com/~breadbox/bf Оригинальное описание на английском языке и ссылки на BF-ресурсы]&lt;br /&gt;
* [http://esolangs.org/wiki/Brainfuck Brainfuck] на «Esoteric Languages wiki»&lt;br /&gt;
* [http://rsdn.ru/article/philosophy/languages.xml Статья на rsdn.ru об эзотерических языках программирования]&lt;br /&gt;
* [https://web.archive.org/web/20031206060451/http://esoteric.sange.fi/brainfuck/ The Brainfuck Archive (утилиты)]&lt;br /&gt;
&lt;br /&gt;
{{нет источников|дата=2008-12-26}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Эзотерические языки программирования]]&lt;br /&gt;
[[Категория:Модели вычислений]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Lê Lợi (bot)</name></author>
	</entry>
</feed>