Дополнительные условия

2.

Текст программы рассматривается как последовательность лексем и разделителей.

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

Сканирование текста всегда осуществляется слева направо.

В состав каждой лексемы включается по возможности большее число графических символов.

Фрагмент текста ":-" не является лексемой, если он расположен между лексемами "{" и "}", составляющими пару "открывающая скобка - закрывающая скобка".

Фрагмент текста "<-" не является лексемой, если он расположен непосредственно перед числовым литералом или ограничителем "(".

2.1.2.

Если символ не заключён в апострофы, его значение не может совпадать с ключевыми словами языка.

2.1.3.

По умолчанию основание числового литерала равно 10.

Значение каждой (расширенной) цифры числового литерала с основанием должно быть меньше основания.

В определении числового литерала не допускается (считается синтаксической ошибкой) использование пробела и управляющих символов.

Порядок целых числовых литералов не может содержать знак минус.

2.1.4.

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

3.

Метапеременные разрешается использовать в качестве функторов только в составе предложений и только при условии, что такой же метафунктор является именем предиката в заголовке рассматриваемого предложения.

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

3.1.

В целых и вещественных числах с явно указанным основанием не разрешается использовать знак минус.

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

Значения целых чисел не могут выходить за пределы допустимого диапазона.

Значения вещественных чисел не могут выходить за пределы допустимого диапазона.

Значения числовых литералов с явно указанным основанием (выходящие за пределы допустимого диапазона) разрешается использовать в качестве битового представления отрицательных чисел.

Длина значений строковых литералов не может превышать максимальное допустимое значение.

3.2.3.

В качестве имён элементов недоопределённых множеств используются символы и неотрицательные целые числа.

Если в составе элемента недоопределённого множества не заданы терм или выражение после имени элемента, символ, используемый в качестве имени элемента, должен быть в апострофах.

Если недоопределённое множество используется в составе определения класса, то имена элементов множества, совпадающие с атрибутами этого класса, должны быть символами в апострофах.

Заголовок недоопределённого множества определяет элемент множества с именем 0 (ноль).

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

Недоопределённое множество не может содержать пары с одинаковыми именами элементов.

4.

Программа состоит из множества классов и целевого утверждения ("проекта").

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

4.1.

В иерархии наследования классов, используемых проектом, запрещены циклические зависимости.

4.1.1.

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

В определении атрибутов класса не допускается однократное использование переменных, отличных от "_".

Не допускается повторное определение атрибутов класса (в том числе переопределение атрибута self).

4.1.3.

Отсутствие инициализатора в определении некоторого атрибута конструктора с именем Name является допустимым только в том случае, если рассматриваемый конструктор находится в области действия слота с именем Name.

В конструкторе экземпляра класса не допускается определение нескольких атрибутов с одинаковыми именами.

Не допускается использование символа self в качестве имени аргумента конструктора.

В качестве простых атомов в конструкторе резидента не разрешается использовать переменные.

4.2.

В определении проекта не допускается однократное использование переменных, отличных от "_".

4.3.

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

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

Использование в пакете нескольких команд импорта, которые делают видимым один и тот же класс из одного и того же пакета, является синтаксической ошибкой.

4.4.

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

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

6.

В составе предложения не допускается однократное использование переменных, отличных от "_".

Предложения, не являющиеся метапредложениями, должны принадлежать одной группе ("процедуре"), если совпадают имена и арность предикатных символов заголовков этих предложений.

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

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

6.1.

Последний аргумент атомарной формулы может быть помечен "*" только в том случае, если он является переменной.

Переменная в составе атомарной формулы подцели предложения может быть помечена "*" лишь в том случае, если она таким же образом помечена в заголовке предложения и не является анонимной переменной "_".

Для обозначения списка аргументов предиката переменной арности не разрешается использовать метафункторы.

6.1.3.

В качестве простых атомов в составе объявлений функций не разрешается использовать метапеременные.

6.2.

Если инфикс подцели равен "<<" или "<-", в качестве простого атома этой подцели не разрешается использовать метапеременные.

6.2.1.

В качестве простых атомов в составе вызовов функций не разрешается использовать метапеременные.

8.

Встроенными предикатами языка являются goal(), alarm(E), ''(Set) и element(Value,I1,...,Ik), определяемые в тексте программы, а также предопределённые предикаты '=='(V1,...,Vk), ':='(V1,...,Vk), true[(...)], fail.

Встроенными управляющими операторами языка являются операторы copy(V1,...,Vk), '!', break[(E)], spypoint(...).

В программе не допускается определение предикатов, имена которых совпадают с именами предопределённых предикатов и встроенных управляющих операторов.

Не разрешается использование имён предопределённых предикатов и встроенных управляющих операторов в качестве предикатных символов в акторных и дальних вызовах.

Неверное число аргументов в предопределённых предикатах и встроенных управляющих операторах является синтаксической ошибкой.


ПРИЛОЖЕНИЕ 1. СВОДКА СИНТАКСИСА
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)