Pull to refresh

Интерпретатор языка программирования Brainfuck на JavaScript

Lumber room
Brainfuck (англ. brain+fuck) — один из известнейших эзотерических языков программирования, придуман Урбаном Мюллером (Urban Müller) для забавы. Состоит из восьми команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность символов языка без какого-либо синтаксиса. (Это из Википедии).

Вот, например, Hello World!:
<code>
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++
[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.
--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
</code>


К чему я это пишу? К тому, что сделал интерпретатор языка программирования Brainfuck на JavaScript. Работает довольно быстро. Код под GPL (хотя кому он нужен :-D ).

Может кому-нибудь будет интересно :-)
Total votes 30: ↑26 and ↓4 +22
Views 1.2K
Comments 28

Hello, Brainfuck!

Lumber room
Brainfuck — Тьюринг полный язык, то есть на нем можно написать любую программу, которую вообще можно написать :) А напишем мы «Hello World», вернее несколько ;)
Читать дальше →
Total votes 25: ↑20 and ↓5 +15
Views 4.9K
Comments 32

Для начала или вводный курс в эзотерический язык

Programming *
Это конечно же хобби, хотя...

Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд.

Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере.
Читать дальше →
Total votes 65: ↑50 and ↓15 +35
Views 2.3K
Comments 65

Brainfuck Quine

Abnormal programming *
После праздником мозги сильно отдохнули и теперь неплохо было бы их размять.
Есть достаточно популярная головоломка: написать программу, которая выводит свой собственный исходный код на произвольном языке программирования. Это развлечение называется куайном.
Что за язык такой этот brainfuck все знают, я думаю.

Предлагаю устроить конкурс куайнов на bf. Я нагуглил 3 варианта + написал свой собственный (чем выиграл бутылку самбуки).
В качестве интерпретатора я использовал http://brainfuck.progopedia.ru.
мой вариант куайна на bf'е под катом
Читать дальше →
Total votes 68: ↑59 and ↓9 +50
Views 5.9K
Comments 56

Brain Fuck Scheduler — ставим за 5 минут

Configuring Linux *
О новом планировщике задач для Linux на Хабре уже написали вот тут. Весьма эпатажный «трейлер» с xkcd к новому планировщику, и не менее веселый FAQ, пробудили интерес. Расспросил знакомых, кто ставил, чтобы поделились впечатлениями — никто не ставил, ибо «влом ядро новое ставить» или «я подожду, пока оно в мейнстриме появится». Поставил и попробовал сам, и для тех кто хочет сделать то же самое — краткое руководство для Ubuntu 9.04, с описанием потенциальных граблей.

В качестве тизера, скажу лишь, что полноэкранное видео на youtube действительно не тормозит и система стала отзывчивее и шустрее.

Итак, дабы не быть голословным, приступим. Предполагается, что у вас установлена Ubuntu 9.04 (Jaunty).

Читать дальше →
Total votes 64: ↑58 and ↓6 +52
Views 11K
Comments 120

История сумасшествия или свой морской бой на BrainFuck`e

Abnormal programming *

Доброго времени суток, хабралюди. Перед Вами самадиогностика безнадёжного BrainFuck больного.
Те, кто всё понял из названия и не хотят читать весь пост целиком могут скачать игру и BFDev и сразу перейти под кат в конец поста к разделу «Как играть». В посте рассказано как я заболел BrainFuck`ом, а также описан процесс создания игры «Морской бой» на этом замечательном языке.

Читать дальше →
Total votes 196: ↑179 and ↓17 +162
Views 13K
Comments 66

Интерпретатор Brainfuck размером 160 байт

Programming *
Прочитав про IP-стэк twIP, который помещается в размер твита и отвечает на пинги, корейский программист Канг Сеонгхун (Kang Seonghoon) решил создать нечто такое же миниатюрное и при этом работоспособное. И он создал самый маленький интерпретатор Brainfuck на C размером всего 160 байт.

s[99],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c&2,b=c%7?a&&(c&17?c&1?(*r+=b-1):(r+=b-1):syscall(4-!b,b,r,1),0):v;b&&c|a**r;v=d)main(!c,&a);d=v;}
Читать дальше →
Total votes 83: ↑79 and ↓4 +75
Views 3.9K
Comments 32

Числа Фибоначчи на Brainfuck

Abnormal programming *
Прочитав в начале года статью «Brainfuck и счастливые билеты», я решил, что пора уже изучить Brainfuck и написать на нём что-нибудь интересное. Долго думать не пришлось. Я решил написать свою «ненормальную» реализацию чисел Фибоначчи, в которой пользователь вводит однозначное число, определяющее количество выводимых элементов ряда Фибоначчи.

В создании программы мне также помогли сайт о Brainfuck'е и таблица ASCII символов
Узнать, цел ли мозг...
Total votes 35: ↑24 and ↓11 +13
Views 4.8K
Comments 30

Пишем интерпретатор Brainfuck на Lua

Abnormal programming *Lua *
Sandbox
Lua Logo
Каждый программист за свою жизнь успевает изучить множество языков, в нескольких из них специализируется и продолжает работать продолжительное время, а остальные проходят мимо. По разным причинам. Стоит ли тратить время на изучение новых языков, когда уже определился с областью в которой будешь работать? Лично я уверен что стоит, хотя, быть может, многие скажут что важны фундаментальные знания в computer science, а на каком языке писать код не критично. В сущности так и есть. И тем не менее изучать языки интересно и полезно.
Читать дальше →
Total votes 49: ↑39 and ↓10 +29
Views 7K
Comments 15

Интерпретатор Brainfuck на Bash

Abnormal programming *
В последнее время популярность эзотерического языка Brainfuck набирает обороты. Количество приложений, написанных на Brainfuck увеличивается не в арифметической, а даже в геометрической прогрессии. Очень похожая ситуация с Android.

Сегодня я решил запустить свой первый хелловорлд на этом языке. Я счастливый пользователь NetBSD на тостере, и у меня не получилось настроить интернет. Поэтому, я не смог воспользоваться уже готовыми решениями для запуска программ на Brainfuck'e.

Выход оставался один — написать интерпретатор самому. Из софта были только Bash и системные утилиты.

$ cat bf.sh
#!/bin/bash
C="s[0]=0; p=0;"
while read -n1 c; do case $c in
	\+) C="$C s[\$p]=\$((\${s[\$p]}+1));";;
	\-) C="$C s[\$p]=\$((\${s[\$p]}-1));";;
	\>) C="$C p=\$((\$p+1));";;
	\<) C="$C p=\$((\$p-1));";;
	\.) C="$C printf \\\\\$(printf '%03o' \${s[\$p]});";;
	\,) C="$C read -n1 c; s[\$p]=\`printf '%d' \"'\$c\"\`;";;
	\[) C="$C while [[ \${s[\$p]} > 0 ]]; do ";;
	\]) C="$C done;";;
esac; done < $1; 
eval $C

$ cat hello.b
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.

$ ./bf.sh hello.b
Hello World!
Total votes 108: ↑101 and ↓7 +94
Views 1.9K
Comments 37

Пишем интерпретатор Brainfuck на Mercury

Abnormal programming *
Продолжая неделю Brainfuck на хабре и свои эксперименты с Mercury, написал свою версию интерпретатора. Заранее прошу извинить, что еще не представил «вступительную» статью о Mercury. На самом деле, она в процессе написания.
Пока же приведу код решения, который проиллюстрирует заодно несколько возможностей языка Mercury.
Читать дальше →
Total votes 22: ↑15 and ↓7 +8
Views 2.2K
Comments 10

Параллелим Brainfuck

Abnormal programming *
Не будем терять темпа. Поскольку неделя еще не закончилась, еще есть время для очередного топика про Brainfuck. Идея меня захватила, но реализаций интерпретаторов было уже такое количество, что захотелось какой-то изюминки. Поэтому в качестве цели эксперимента я выбрал Brainfork — многопоточную версию Brainfuck-а. А в качестве средства — Erlang, который прекрасно подходит для реализации параллельных процессов. Тем, кому эта тема до сих пор не осточертела, предлагаю заглянуть под кат.
Читать дальше →
Total votes 51: ↑42 and ↓9 +33
Views 2.1K
Comments 7

Переводчик на язык программиста

Website development *
С добрым утром, хабражители!

Хочу немного дополнить неделю brainfuck до того, как она закончится.

Говорят, что программисты общаются на своем, никому не понятном языке. Что ж, порой именно так и бывает. Поэтому однажды у меня родилась идея сделать сервис, который позволял бы наладить общение между программистами и остальным миром. Или же наоборот — усложнить его: все в ваших руках. В любом случае больше не нужно набирать сообщение в двоичном или brainfuck коде, чтобы признаться в любви девушке — достаточно зайти на сайт и он сделает это за вас! ;)

Читать дальше →
Total votes 76: ↑60 and ↓16 +44
Views 30K
Comments 54

Компилятор Brainfuck в .NET

Abnormal programming *
Sandbox
Здравствуйте.
Смотрю я, что у вас неделя BrainFuck-а и я решил написать компилятор, тем более, что в комментариях к этой статье просили рассказать поподробнее про динамические методы. В этой статье мы рассмотрим этот метод компиляции кода и попробуем сделать компилятор самого нормального простого языка
Читать дальше →
Total votes 72: ↑46 and ↓26 +20
Views 7.2K
Comments 35

Интерпретатор Brainfuck с помощью нормальных алгоритмов Маркова

Abnormal programming *
Под катом вы найдете самую ненормальную реализацию интерпетатора Brainfuck с помощью нормальных алгоритмов Маркова. В этой реализации все операторы Brainfuckа и сам интерпретатор являются нормальными алгоритмами Маркова. Целью этого поста было рассмотреть Brainfuck с точки зрения классической теории алгоритмов и привести его реализацию с помощью какого-либо классического уточнения понятия алгоритма. Кто не боится причинить своему мозгу вред столь ненормальным программированием добро пожаловать (под катом много текста, иногда сложного для понимания если не знаком с теорией алгоритмов, но в конце поста есть ссылка на реализацию этого интерперетатора, который можно попробовать в действии). Его быстродействие, по понятным причинам не очень высоко, но с точки зрения понимания алгоритмов работы он очень наглядный.
Читать дальше →
Total votes 91: ↑69 and ↓22 +47
Views 2.6K
Comments 13

Brainfuck — вывод в десятичном формате

Abnormal programming *
В качестве первой задачки для реализации на brainfuck я решил взять, казалось бы, простое упражнение — вывести в десятичном формате записанное на ленте 4-байтовое число. Задачка оказалась интересной, особенно, если учесть, что дублировать код (и использовать, что число именно 4-байтовое) мне хотелось как можно меньше, а больше пользоваться циклами.

Сразу было видно, что есть два разных подхода — либо пытатьтся делить исходное число с остатком на 10, и составлять цифры из полученных остатков, либо формировать десятичное число, умножая его на 2 и при необходимости прибавляя единицу. Поигравшись со вторым вариантом, и обнаружив, что биты поступают не в том порядке, в каком надо, вернулся к первому варианту.

Читать дальше →
Total votes 35: ↑17 and ↓18 -1
Views 2.8K
Comments 12

Немного о JIT-компиляции или пишем оптимизированный интерпретатор Brainfuck

Website development *
Суть языка Brainfuck в том, что мы всегда бегаем по ячейкам ленты, уменьшая или увеличивая значения в них. В циклах мы можем пробегать из одного конца в другой, что-то подсчитывая, зачастую используя много вложенных циклов. Не трудно догадаться, что интерпретация этого языка относительно медленна. Конечно, на современных компьютерах этого практически не заметно, но… Предлагаю небольшой тест: берите написанный вами интерпретатор, и запускайте вот этот не хитрый код:

>+>+>+>+>++<[>[<+++>-
 >>>>>
 >+>+>+>+>++<[>[<+++>-
   >>>>>
   >+>+>+>+>++<[>[<+++>-
     >>>>>
     >+>+>+>+>++<[>[<+++>-
       >>>>>
       +++[->+++++<]>[-]<
       <<<<<
     ]<<]>[-]
     <<<<<
   ]<<]>[-]
   <<<<<
 ]<<]>[-]
 <<<<<
]<<]>.


Дождались конца выполнения? Согласитесь, что это было не так быстро, как могло показаться сразу. Что ж, давайте посмотрим, как сделать интерпретатор, который будет выполнять данный код не больше чем за несколько секунд.
Опять brainfuck, ассемблер и паскаль
Total votes 90: ↑66 and ↓24 +42
Views 6.4K
Comments 37