forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Интерпритатор языка brainfuck (http://forum.boolean.name/showthread.php?t=9380)

Tronix 08.10.2009 17:36

Интерпретатор языка brainfuck
 
Вложений: 1
В последнее время заинтересовал принцип написания компиляторов/интерпретаторов. Начал с простого и весьма, судя по форуму, боянистого - интерпритатора языка brainfuck.

Писал на Virtual Pascal, но так же компилится и на Free Pascal (только у exe-шника уж совсем размер какой-то не приличный получается). Возможно будет и на дельфях как консольное приложение, но у меня их не стоит, проверить не могу. Исходный код, пара забавных программ на brainfuck прилагаются.
В самом интерпритаторе применяется некоторая оптимизация, например сочитание операторов [-], [+] расценивается как установка текущей ячейки в ноль; операторов [<],[>] - как поиск первой левой или правой ячейки содержащей ноль; и длинные наборы операторов ++++++, --------, <<<<<<, >>>>>> выполняются как одна инструкция, а не по одиночке.

Запуск: brainfk <имяфайла.bf>

UPD: Добавил поддержку ANSI-последовательностей, например для hanoi.b Новые версии и подробности тут: http://tronix286.pochta.ru/brainfk/index.htm

WaReZ_MEN 08.10.2009 20:10

Ответ: Интерпритатор языка brainfuck
 
А зачем?

Tronix 09.10.2009 15:19

Ответ: Интерпритатор языка brainfuck
 
just for fun.

Почти переписал с нуля. Теперь транслятор имеет некий пре-процессор, который сперва избавляется от всех символов, которые не являются опкодами BrainFuck, затем выполняет оптимизацию:
<<<<< = заменяется на p# (prev)
>>>>> = заменяется на n# (next)
+++++ = заменяется на i# (inc)
----- = заменяется на d# (dec)
[-],[=] = заменяется на z (zero)
[<] = заменяется на l (left)
[>] = заменяется на r (right)
В итоге код из 20Kb может сократится до 3-5Kb. Далее транслятор обрабатывает уже этот байт-код, повышая тем самым быстродействие.
Присутствуют ключи:
-c - создать на диске файл OUT.BC, содержащий в себе байт-код после пре-процессора.
-d - запретить препроцессор и выполнять обычным транслятором (если какие-то программы зависают).

Исходники и новый EXE с новыми программами для BrainFuck прилагаются в первом сообщении.

WaReZ_MEN 09.10.2009 21:27

Ответ: Интерпритатор языка brainfuck
 
Повторюсь
Цитата:

Сообщение от WaReZ_MEN (Сообщение 121042)
А зачем?


Tronix 09.10.2009 21:29

Ответ: Интерпритатор языка brainfuck
 
Цитата:

Сообщение от WaReZ_MEN (Сообщение 121128)
Повторюсь

Повторюсь - just for fun

WaReZ_MEN 10.10.2009 09:37

Ответ: Интерпритатор языка brainfuck
 
Цитата:

Сообщение от Tronix (Сообщение 121129)
Повторюсь - just for fun

Твое дело куда сливать свое время...


Часовой пояс GMT +4, время: 14:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot