1.13.1. УСТРАНЕНИЕ ИЗБЫТОЧНЫХ КОНСТРУКЦИЙ В этом разделе мы описываем различные контекстные синтаксические ограничения, которым должна удовлетворять любая программа на Рефале Плюс.
Для того, чтобы не загромождать изложение, мы будем предполагать, что предварительно была выполнена нормализация программы, в результате которой все конструкции, являющиеся сокращениями для других конструкций заменены на эквивалентные им полные конструкции следующим образом.
Хвосты и жесткие образцы, опущенные в присваиваниях, поисках и перестройках, заменены на пустые образцы и пустые огражденные тропы следующим образом:
S :: He => S :: He ,
S' $iter S" => S' $iter S" :: ,
S' $iter S" :: He => S' $iter S" :: He ,
S' $iter S" R => S' $iter S" :: R
S : P => S : P ,
# S => # S ,
{Snt1; ... Sntn;} =>
\{Snt1; ... Sntn;
$error(Fname "Unexpected fail");}
S : {Snt1; ... Sntn;} =>
S : \{Snt1; ... Sntn;
e $error(Fname "Unexpected fail");}
где Fname - имя функции, в которой находится конструкция.Fname {Snt1; ... Sntn;} =>
Fname \{Snt1; ... Sntn;
Farg $error(Fname "Unexpected fail");}
где Farg - входной формат функции из объявления функции Fname (в котором опущены индексы переменных).Fname Snt; => Fname \{ Snt; };