Как стать автором
Обновить

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

Время на прочтение 1 мин
Количество просмотров 2.1K
В последнее время популярность эзотерического языка 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!
Теги:
Хабы:
+94
Комментарии 37
Комментарии Комментарии 37

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн