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