index , prev , next

1. Описание языка рефал

Преподавание программирования - дело почти безнадежное, а его изучение - непосильный труд. Ч.Уэзерелл "Этюды для программистов",1982.

Имеется несколько способов изложения теоретических основ языка рефал. В настоящих указаниях определения пунктов 1, 3, 4, 6, 7 соответствуют работе [3]. Часть задач и примеров взяты из работ [2] , [3] , другая часть относится к рефальскому фольклору, и установить авторство многих задач или их элегантных решений не представляется возможным. Поэтому мы приводим все задачи без каких-либо ссылок и не претендуем на оригинальность в тех случаях, когда нам кажется, что задача сформулирована впервые.

Знаки, символы, переменные

Язык рефал ориентирован на работу с символьными данными. Основными объектами, с которыми работает рефал, являются символы.

Символы бывают простые и составные.

Простой символ - это обычный символ. При записи программы простой символ обрамляется апострофами, за исключением самого апострофа - он просто удваивается.

Составной символ - это либо составной символ-метка (детерминатив, имя функции), либо составной символ-число - макроцифра.

Составной символ-метка - это последовательность букв, цифр и знаков '-' , '_' , которая начинается с большой буквы. Длина составного символа-метки не ограничивается.

Составной символ-число (макроцифра) - это последовательность цифр, число. Число записывается в обычной десятичной системе счисления. Максимальное значение числа равно 2^32 - 1.

Заметим, что хотя для записи составного символа End требуется три знака, для записи макроцифры 1999 - четыре знака, а для записи простого символа 'A' - три знака, но с точки зрения языка рефал во всех случаях мы имеем дело лишь с одним символом. Другими словами, конструкции End , 1999 , 'A' составляют одно целое и не могут быть расчленены.

Последовательности символов

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

'А' 'В' 'С' - последовательность из трех символов - "А", "В", "С",

1 0 - последовательность из двух макроцифр I, 0 .

Ясно, что такой способ записи последовательности простых символов является неэкономным.

Последовательность простых символов - строка символов - может быть записана короче:

'А+В' - строка из трех символов - "А", "+", "В".

'А''В' - строка из трех символов -"А", апостроф, "В".

'''' - строка из двух символов - апостроф, апостроф.

Итак, в последовательности знаков, изображающей строку символов, знак апостроф встречается четное количество раз. Каждая пара рядом стоящих знаков апостроф, при просмотре слева направо, изображает один символ апостроф.

Объектное выражение

Объектное выражение - это выражение, состоящее из символов, а также из левых и правых структурных скобок "(" и ")". Скобки должны образовывать правильную скобочную структуру (в обычном "школьном" понимании). Выражение может быть, в частности, и пустым. Знаки "пробел", не входящие в последовательность простых символов, служат для внешнего оформления программы.

Переменные символа, выражения, терма

Переменные символа, выражения, терма служат для описания различных множеств объектных выражений.

Переменная символа записывается так: знак "s" и сразу за ним индекс переменной - буква, цифра, или символ "точка", за которым следует любая последовательность... ???

Переменная выражения записывается так: знак "e" и сразу за ним - индекс переменной.

Переменная терма записывается так: знак "t" и сразу за ним - индекс переменной.

Например, sa , e1 , e.1 . e.String , s.N1 .

Правила использования индексов будут описаны ниже в п.3.

Опишем теперь, какие значения могут принимать переменные. Переменная символа может принимать значение одного символа (любого).

Переменная выражения может принимать значение любого объектного выражения.

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

index , prev , next