Простота языка Brainfuck порождает множество реализаций его исполнения http://rosettacode.org/wiki/Execute_Brain****. Есть вариант на Bash и даже на самом Brainfuck. Мне показалось, что несправедливо обойти еще один командный процессор. А именно командные файлы семейства WindowsNT, они же батники. При написании данного интерпретатора была поставлена цель реализовать всё только на встроенном «языке» консоли.
Спецификация диалекта Brainfuck
Командный процессор Windows имеет множество ограничений. Вот только некоторые из них:- Из-за того, что символы "<" и ">" используются для перенаправления ввода/вывода использовать их не представляется возможным. Поэтому замененим их на схожие по написанию "(" и ")".
- Ограничены возможности по выводу текста и вводу данных с клавиатуры.
- Память представляет кольцевой буфер.
- Вывод ограничен первыми 127 символами кодовой страницы с исключением непечатных символов и некоторых символов, которые вызывали ошибку при работе батника. Последние были заменены на символ ".". Пробел заменен на знак "_".
- «Ключевые слова» языка:
- «)» – перейти на следующую ячейку памяти
- «(» – перейти на предыдущую ячейку памяти
- «+» – увеличить значение ячейки на единицу
- «-» – уменьшить значение ячейки на единицу
- «,» – прочесть значение в ячейку со стандартного устройства ввода. В данный момент не реализовано
- «.» – напечатать значение ячейки на стандартном устройстве вывода
- «[» – начать цикл. если значение текущей ячейки не равно 0 и перейти к следующей команде. Иначе перейти к ] учитывая вложенность
- «]» – конец цикла. Продолжить цикл, если значение текущей ячейки не равно 0
Полный текст интерпретатора находится тут: http://pastebin.com/MDbVJXsE
Код тестировался на Windows 2000, Windows XP, Windows Vista, Windows 7.
Ссылки
- Форум где было подсмотрено несколько идей: http://forum.script-coding.com/viewforum.php?id=12
- Здесь разъяснены особенности примененных в батнике решений: http://rsdn.ru/article/winshell/NTCommandProcessor.xml
Комментариев нет:
Отправить комментарий