Цель данного проекта — продемонстрировать основные идеи языка программирования Рефал на примере крайне минималистичного подмножества языка. Входной язык крайне ограничен в выразительных средствах, однако, в полной мере демонстрирует основные идеи Рефала.
Рефал — язык программирования, осуществляющий преобразования над строками путём сопоставления с образцом.
В основе Рефала лежат две основные операции: сопоставление с образцом и рекурсивный вызов. Программа в Tiny Refal представляет собой набор инструкций по преобразованию символов, идея которых напоминает работу нормальных алгоритмов Маркова.
Преобразуемые строки называются выражениями. Выражения могут содержать два типа скобок, которые всегда должны быть сбалансированы и правильно вложены:
- структурные скобки — круглые скобки
(...)
, служат для структурирования данных, - скобки конкретизации или скобки активации — угловые скобки
<...>
, служат для выделения участков выражения, подлежащих дальнейшим преобразованиям.
Скобки конкретизации можно считать скобками вызова функций (и в других, больших реализациях Рефала они для этого и используются), однако в этой реализации как таковых функций нет.
В строках, обрабатываемых данной реализацией, пробелов быть не может —
все пробелы, записанные в программе, игнорируются. Также в строках не может
быть знака =
(используется в синтаксисе языка) и знака #
(используется
для записи комментариев). Но они могут быть экранированы символом \
для
использования в качестве обычных символов.
Эта реализация демонстрирует следующие характерные черты языка:
- выполнение программы по шагам, переписывание поля зрения на каждом шаге,
- сопоставление с рефальскими образцами общего вида,
- использование структурных скобок для представления структурированных данных и многоместных и многокоместных функций.
Данная реализация ограничена в возможностях, в частности, здесь нет многого из того, что есть в других, больших и серьёзных реализациях Рефала. В частности, здесь нет:
- других типов символов, кроме печатных знаков, да и то их набор ограничен
(нет пробельных символов и зарезервированных знаков
(
,)
,<
,>
,=
,#
), - именованных функций — программа — это просто набор предложений,
- каких-либо встроенных функций, соответственно, нет и ввода-вывода, копилки, арифметики и прочего,
- скорости — реализация простая и медленная, её цель — продемонстрировать идеи Рефала, а не использоваться для реальных вычислений (медленным является алгоритм сопоставления с образцом).