Пожарский Александр. Блог Пятница, 10.05.2024, 08:52
Вход/выход
Облако тегов
Поиск
Архив записей
Главная » 2011 » Июнь » 30 » Интерпретатор Brainfuck на python-е
17:33
Интерпретатор Brainfuck на python-е
Для начала о brainfuck.
Это эзотерический тьюринг-полный язык программирования, в котором имеется 8 инструкций :

  • >Переход к следующей ячейке памяти
  • <Переход к предыдущей ячейке памяти
  • + увеличение на 1 значения в текущей ячейке
  • -Уменьшение на 1 значения в текущей ячейки
  • . - вывод символа с кодом, соответсвующим знанчению в ячейке
  • ,[i] - ввод символа и помещение его значения в ячейку
  • [i] - если в текущей ячейке 0, то перейти по тексту проги вперёд к соответсвующей ] (с учётом вложенности)
  • [i]] Переход по тексту программы назад к [ если в ячейке не 0


Осилили? Тогда дальше

В принципе, для работы интерпретатора нам понадобятся :

  • Массив - те самые ячейки памяти
  • Анализ вложенности скобок


Т.е. идея такая - посимвольно обходим текст проги, если нам не хватает памяти - наращиваем массив, А далее в завсимости от символа :

  • >,< - меняем индекс элемента в массиве
  • +,- - инкремент/декремент элемента с текущим индексом
  • ,,. - ввод/вывод
  • [,] - переходы

Рассмотрим подробнее переходы.
Очевидно, нам понадобится анализ вложенности скобок.
Для этого обходим код справа налево и при нахождении открывающей скобки ищём ближающую расположенную правее закрывающую.
И будем хранить в структуре такого вида :
[ [N1,N2], [N3,N4] ... ] где N1,N3 - номера символов открывающих скобок, N2,N4 - закрывающих.

Вот код

Кстати, за счёт того, что разные левые сиволы не анализируются - можно оформлять код и комментировать, чего в нарытых интерпретаторах я не нашёл.

Вот так же код простой проги на brainfuck, демонстрирующей работу операторов :
Code

Ввод
,
Так как символ 0 имеет код 48 то чтобы сравнить с 0 проведём 48 декрементов
------------------------------------------------
Если 0 идём в конец проги иначе же :
[
  Переходим в слудующую ячейку
  >
  Код символа G
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Вывод
  .
  В пустую ячейку
  >
  Так как в пустой ячейке 0 то произойдёт выход
]


Вот ссылка на скачивание

Если что - имя файла с прогой на brainfuck передаётся как параметр командной строки
Просмотров: 1063 | Добавил: alexKniaz | Теги: brainfuck, python | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Июнь 2011  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Наш опрос
Оцените мой сайт
Всего ответов: 40
Друзья сайта
  • Хабрахабр
  • Python :-)
  • ithappens
  • Рейлганостроение :-)
  • Пушки гаусса и прочее
  • Copyright MyCorp © 2024
    Конструктор сайтов - uCoz