Текст программы рассматривается как последовательность лексем и разделителей.
Разделителями являются комментарии, а также пробелы и управляющие символы, не входящие в состав лексем и комментариев.
Сканирование текста всегда осуществляется слева направо.
В состав каждой лексемы включается по возможности большее число графических символов.
Фрагмент текста ":-" не является лексемой, если он расположен между лексемами "{" и "}", составляющими пару "открывающая скобка - закрывающая скобка".
Фрагмент текста "<-" не является лексемой, если он расположен непосредственно перед числовым литералом или ограничителем "(".
Если символ не заключён в апострофы, его значение не может совпадать с ключевыми словами языка.
По умолчанию основание числового литерала равно 10.
Значение каждой (расширенной) цифры числового литерала с основанием должно быть меньше основания.
В определении числового литерала не допускается (считается синтаксической ошибкой) использование пробела и управляющих символов.
Порядок целых числовых литералов не может содержать знак минус.
В качестве кода в сегменте строки не допускается (считается синтаксической ошибкой) использование вещественных числовых литералов, а также числовых литералов, значения которых лежат за пределами некоторого интервала, определяемого конкретной реализацией языка.
Метапеременные разрешается использовать в качестве функторов только в составе предложений и только при условии, что такой же метафунктор является именем предиката в заголовке рассматриваемого предложения.
Функтор, используемый в составе определения класса и совпадающий с некоторым атрибутом этого класса, должен быть символом в апострофах.
В целых и вещественных числах с явно указанным основанием не разрешается использовать знак минус.
Метапеременные разрешается использовать в качестве простых термов только в составе предложений и только при условии, что такая же метапеременная является именем предиката или атомарной формулой в заголовке рассматриваемого предложения.
Значения целых чисел не могут выходить за пределы допустимого диапазона.
Значения вещественных чисел не могут выходить за пределы допустимого диапазона.
Значения числовых литералов с явно указанным основанием (выходящие за пределы допустимого диапазона) разрешается использовать в качестве битового представления отрицательных чисел.
Длина значений строковых литералов не может превышать максимальное допустимое значение.
В качестве имён элементов недоопределённых множеств используются символы и неотрицательные целые числа.
Если в составе элемента недоопределённого множества не заданы терм или выражение после имени элемента, символ, используемый в качестве имени элемента, должен быть в апострофах.
Если недоопределённое множество используется в составе определения класса, то имена элементов множества, совпадающие с атрибутами этого класса, должны быть символами в апострофах.
Заголовок недоопределённого множества определяет элемент множества с именем 0 (ноль).
Если недоопределённое множество используется в составе определения атрибутов класса, в качестве хвоста этого множества разрешается использовать только переменные.
Недоопределённое множество не может содержать пары с одинаковыми именами элементов.
Программа состоит из множества классов и целевого утверждения ("проекта").
В программе должны быть определены все классы, используемые проектом.
В иерархии наследования классов, используемых проектом, запрещены циклические зависимости.
Каждый атрибут должен быть объявлен во всех классах, связанных отношением наследования, в которых используется соответствующий слот.
В определении атрибутов класса не допускается однократное использование переменных, отличных от "_".
Не допускается повторное определение атрибутов класса (в том числе переопределение атрибута self).
Отсутствие инициализатора в определении некоторого атрибута конструктора с именем Name является допустимым только в том случае, если рассматриваемый конструктор находится в области действия слота с именем Name.
В конструкторе экземпляра класса не допускается определение нескольких атрибутов с одинаковыми именами.
Не допускается использование символа self в качестве имени аргумента конструктора.
В качестве простых атомов в конструкторе резидента не разрешается использовать переменные.
В определении проекта не допускается однократное использование переменных, отличных от "_".
Несоответствие имени транслируемого пакета, не позволяющее однозначно сопоставить его с именем исходного файла, является синтаксической ошибкой.
Последовательность команд импорта, которая делает видимыми некоторые импортируемые классы под одним и тем же именем, является синтаксической ошибкой.
Использование в пакете нескольких команд импорта, которые делают видимым один и тот же класс из одного и того же пакета, является синтаксической ошибкой.
Повторное определение класса в пакете, а также повторное определение класса в наборе совместно транслируемых пакетов являются синтаксической ошибкой.
Повторное определение проекта в пакете, а также повторное определение проекта в наборе совместно транслируемых пакетов являются синтаксической ошибкой.
В составе предложения не допускается однократное использование переменных, отличных от "_".
Предложения, не являющиеся метапредложениями, должны принадлежать одной группе ("процедуре"), если совпадают имена и арность предикатных символов заголовков этих предложений.
В определении класса следует группировать процедуры с одинаковыми именами предикатных символов заголовков входящих в них предложений.
Метапредложения, в заголовке которых присутствует предикатный символ, и в качестве этого предикатного символа задан символ, должны быть сгруппированы с предложениями с таким же именем предикатного символа заголовков.
Последний аргумент атомарной формулы может быть помечен "*" только в том случае, если он является переменной.
Переменная в составе атомарной формулы подцели предложения может быть помечена "*" лишь в том случае, если она таким же образом помечена в заголовке предложения и не является анонимной переменной "_".
Для обозначения списка аргументов предиката переменной арности не разрешается использовать метафункторы.
В качестве простых атомов в составе объявлений функций не разрешается использовать метапеременные.
Если инфикс подцели равен "<<" или "<-", в качестве простого атома этой подцели не разрешается использовать метапеременные.
В качестве простых атомов в составе вызовов функций не разрешается использовать метапеременные.
Встроенными предикатами языка являются goal(), alarm(E), ''(Set) и element(Value,I1,...,Ik), определяемые в тексте программы, а также предопределённые предикаты '=='(V1,...,Vk), ':='(V1,...,Vk), true[(...)], fail.
Встроенными управляющими операторами языка являются операторы copy(V1,...,Vk), '!', break[(E)], spypoint(...).
В программе не допускается определение предикатов, имена которых совпадают с именами предопределённых предикатов и встроенных управляющих операторов.
Не разрешается использование имён предопределённых предикатов и встроенных управляющих операторов в качестве предикатных символов в акторных и дальних вызовах.
Неверное число аргументов в предопределённых предикатах и встроенных управляющих операторах является синтаксической ошибкой.
ПРИЛОЖЕНИЕ 1. СВОДКА СИНТАКСИСА
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)