Skip to content

Демонстрационный интерпретатор Рефала

License

Notifications You must be signed in to change notification settings

bmstu-iu9/tiny-refal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Демонстрационный интерпретатор Рефала

Цель данного проекта — продемонстрировать основные идеи языка программирования Рефал на примере крайне минималистичного подмножества языка. Входной язык крайне ограничен в выразительных средствах, однако, в полной мере демонстрирует основные идеи Рефала.

Рефал — язык программирования, осуществляющий преобразования над строками путём сопоставления с образцом.

В основе Рефала лежат две основные операции: сопоставление с образцом и рекурсивный вызов. Программа в Tiny Refal представляет собой набор инструкций по преобразованию символов, идея которых напоминает работу нормальных алгоритмов Маркова.

Преобразуемые строки называются выражениями. Выражения могут содержать два типа скобок, которые всегда должны быть сбалансированы и правильно вложены:

  • структурные скобки — круглые скобки (...), служат для структурирования данных,
  • скобки конкретизации или скобки активации — угловые скобки <...>, служат для выделения участков выражения, подлежащих дальнейшим преобразованиям.

Скобки конкретизации можно считать скобками вызова функций (и в других, больших реализациях Рефала они для этого и используются), однако в этой реализации как таковых функций нет.

В строках, обрабатываемых данной реализацией, пробелов быть не может — все пробелы, записанные в программе, игнорируются. Также в строках не может быть знака = (используется в синтаксисе языка) и знака # (используется для записи комментариев). Но они могут быть экранированы символом \ для использования в качестве обычных символов.

Эта реализация демонстрирует следующие характерные черты языка:

  • выполнение программы по шагам, переписывание поля зрения на каждом шаге,
  • сопоставление с рефальскими образцами общего вида,
  • использование структурных скобок для представления структурированных данных и многоместных и многокоместных функций.

Данная реализация ограничена в возможностях, в частности, здесь нет многого из того, что есть в других, больших и серьёзных реализациях Рефала. В частности, здесь нет:

  • других типов символов, кроме печатных знаков, да и то их набор ограничен (нет пробельных символов и зарезервированных знаков (, ), <, >, =, #),
  • именованных функций — программа — это просто набор предложений,
  • каких-либо встроенных функций, соответственно, нет и ввода-вывода, копилки, арифметики и прочего,
  • скорости — реализация простая и медленная, её цель — продемонстрировать идеи Рефала, а не использоваться для реальных вычислений (медленным является алгоритм сопоставления с образцом).

About

Демонстрационный интерпретатор Рефала

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published