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










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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



Содержание