Про brainfuck я слышал давно. Вчера наконец-то познакомился с этим замечательным представителем эзотерических языков программирования.
Принцип brainfuck прост.
Для работы используется регистр из некоторого количества байт, каждый из которых в начале исполнения программы имеет нулевое значение. Для доступа к каждой ячейке массива исользуется byte pointer - указатель, при старте установленный в левейшую ячейку регистра.
Должен отметить, что размер регистра, а также максимальное значение каждой ячейки, ровно как и поведение при выходе указателя за пределы массива, при выходе значение ячейки за допустимые рамки и некоторые другие условия в целом зависят от реализации интерпретатора brainfuck, но классика - 30000-байтный регистр (то есть значение каждой ячейки - от 0 до 2^8-1, то есть 0-255)
Весь синтаксис brainfuck состоит из 8 команд:
> переместиться на байт вправо< переместиться на байт влево+ увеличить значение текущего байта на единицу- уменьшить значение текущего байта на единицу. вывести значение текущего байта на stdout, запомнить в текущей ячейке следующий байт со stdin[ переходит к соответствующему ], если текущий байт равен нулю] переходит к соответствующему [, если текущий байт не равен нулюbrainfuck является языком, совместимым с универсальной вычислительной машиной Тьюринга, то есть теоретически на нём можно реализовать вычислительную операцию любой сложности.
Интерпретаторы для всяких платформ здесь: The Brainfuck Programming Language, в принципе зная принцип brainfuck можно написать его интерпретатор на любом языке. На том же PHP.
Другое дело, написать интерпретатор PHP на brainfuck - шутка такая... :)
Нашёл себе The Brainfuck Studio для КПК - теперь развлекаюсь с brainfuck в любом удобном месте :)
На brainfuck базируется не один другой язык программирования, почитать можно здесь