Всем привет. Написал just for fun еще один интерпретатор языка классического Brainfuck. Исходники на Free Pascal конечно прилагаются.
Особенности:
Транслятор имеет некий пре-процессор, который сперва избавляется от всех символов, которые не являются опкодами BrainFuck, затем выполняет оптимизацию:
<<<<< = заменяется на p# (prev)
>>>>> = заменяется на n# (next)+++++ = заменяется на i# (inc)
---- = заменяется на d# (dec)
[-],[+] = заменяется на z (zero)
[<] = заменяется на l (left)
[>] = заменяется на r (right)
В итоге код из 20Kb может сократится до 3-5Kb. Далее транслятор обрабатывает уже этот байт-код, повышая тем самым быстродействие.
Присутствуют ключи:
-c - создать на диске файл OUT.BC, содержащий в себе байт-код после пре-процессора.
-d - запретить препроцессор и выполнять обычным транслятором (если какие-то программы зависают).
Если используется ключ -d выполняется почти обычный интерпретатор, но все равно с предугадыванием вышеназванных комбинаций, но "на лету". Скорость выполнения немного теряется.
Ключ -c создает в том-же каталоге файл OUT.BC, просмотрев который в каком-нибудь HEX редакторе можно увидеть, как обработал исходный код пре-процессор.
PS: Есть бага - транслятор с препроцессором не выполняет программу hanoi.bf (входит в архив). Она виснет. Почему - хз, не смог отловить. Понял что виснет из-за преобразования символов <<<< в p#. С ключем -d работает нормально. Остальные 45 программ с препроцессором тоже работают нормально. Странный баг...
Забрать можно тут:
http://tronix286.pochta.ru/soft/brainfk.zip