refal-5-lambda icon indicating copy to clipboard operation
refal-5-lambda copied to clipboard

Распознавание группового экранирования предложений

Open Mazdaywik opened this issue 4 years ago • 2 comments

Ранее в рамках этой задачи предлагалось ещё и удалять экранированные предложения на стадии оптимизации. Эта деятельность была перенесена в отдельную задачу #346, которая не связана с текущей. Постановка текущей задачи отредактирована.

Введение

В компиляторе уже присутствует механизм распознавания экранируемых предложений — компилятор выдаёт предупреждения (при включённой опции -Wscreening) на случаи, когда предложение экранируется одним из предшествующих.

Модуль был реализован Александром Барлукой aka @nexterot (#256, #297) под руководством Антонины Николаевны Непейвода aka @TonitaN (теоретический фундамент) и меня (архитектура компилятора).

Мотивация

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

F {
  t.1 t.2 e.3 = One;
  e.X t.Y = Two;
  /* пусто */ = Three;
  e.X = "Boom!";
}

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

Групповое экранирование в компиляторе уже возникает и возникает давно. Вот есть функция Map, которая является специализируемой:

https://github.com/bmstu-iu9/refal-5-lambda/blob/db0ccf9cb8ce6548e964381dda6977d3a6e79baf/src/lib/common/LibraryEx.refi#L21-L32

С аварийным предложением функция примет вид

Map {
  t.Fn t.Next e.Tail = <Apply t.Fn t.Next> <Map t.Fn e.Tail>;
  t.Fn /* пусто */ = /* пусто */;
  t.FUNC e.items = <Map@0 t.FUNC e.items>;
}

Аварийное предложение здесь избыточно, поскольку оно экранируется предшествующими предложениями.

Реализация

При реализации нужно решить ряд следующих задач:

  • [ ] Проконсультироваться с Антониной Николаевной @TonitaN относительно алгоритма группового экранирования. Она спец в этих алгоритмах (это тема её научной работы), я — полный ноль.
  • [ ] Реализовать групповое экранирование в распознавателе экранирования.

Mazdaywik avatar Dec 13 '20 21:12 Mazdaywik

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

Mazdaywik avatar Feb 24 '21 09:02 Mazdaywik

Задача не была выбрана в качестве ВКР.

Mazdaywik avatar Mar 11 '21 11:03 Mazdaywik