В последнее время заинтересовал принцип написания компиляторов/интерпретаторов. Начал с простого и весьма, судя по форуму, боянистого - интерпритатора языка brainfuck.
Писал на Virtual Pascal, но так же компилится и на Free Pascal (только у exe-шника уж совсем размер какой-то не приличный получается). Возможно будет и на дельфях как консольное приложение, но у меня их не стоит, проверить не могу. Исходный код, пара забавных программ на brainfuck прилагаются.
В самом интерпритаторе применяется некоторая оптимизация, например сочитание операторов [-], [+] расценивается как установка текущей ячейки в ноль; операторов [<],[>] - как поиск первой левой или правой ячейки содержащей ноль; и длинные наборы операторов ++++++, --------, <<<<<<, >>>>>> выполняются как одна инструкция, а не по одиночке.
Запуск: brainfk <имяфайла.bf>
UPD: Добавил поддержку ANSI-последовательностей, например для hanoi.b Новые версии и подробности тут:
http://tronix286.pochta.ru/brainfk/index.htm