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 ,


Хвосты, опущенные в предложениях, заменены на пустые огражденные тропы следующим образом:

P => P ,


"Непрозрачные" фигурные скобки "{" заменены на прозрачные фигурные скобки "\{" в распутьях и выборах следующим образом:

{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; };