Спецификация языка ORL

Версия 1.0 alpha

В настоящем документе дается описание основ семантики, синтаксиса и лексики языка. Синтаксис полагается независимым от реализации языка системным ядром и конкретной объектной модели. То есть, с одной стороны, в рамках данного синтаксиса могут описываться любые обьекты любых классов, и, с другой стороны, данный синтаксис может поддерживаться системой, реализованной в любой объектной модели. Примером реализации языка является объектная модель объектно-реляционного ядра, описанная в соответствующем документе.

1. Минимальная объектная модель

1.1. Объекты и отношения

1.2. Объекты, значения, классы и атрибуты

1.3. Классы и методы

1.4. Объекты, методы и процессы

1.5. Атрибуты и параметры методов

1.6. Групповые операции

1.7. Пути доступа

1.8. Фундаментальные бинарные отношения

2.Структура языка

2.1. Команды

2.2. Выражения

2.2.1. GET

2.2.2. NEW

2.2.3. SET

2.2.4. RUN

2.2.5. DEL

2.3. Правила манипуляции объектами

2.3.1. Объявление и определение объектов

2.3.2. Поддержание логической целостности

2.4. Транзакции

3. Лексические элементы

3.1. Комментарии

3.2. Мягкие разделители

3.3. Жесткие разделители

3.4. Группирующие разделители

3.5. Операционные символы

3.6. Ключевые и умалчиваемые слова

3.7. Имена

3.8. Значения

3.9. Объекты

3.10. Операторы

3.11. Запросы

3.11.1. Условные запросы

3.11.2. Запросы на изменение

3.12. Директивы процессору языка

4. Типы значений и классы объектов

4.1. Типы значений

4.1.1. Строка

4.1.2. Дата

4.1.3. Цвет

4.1.4. Число

4.1.5. Ссылка

4.1.6. Множество

4.2. Классы объектов

4.2.1. Объект

4.2.2. Класс

4.2.3. Атрибут

4.2.4. Метод

5. Операции

5.1. Операции над числами

5.2. Операции над строками

5.3. Операции над ссылками

5.4. Операции над множествами

5.5. Операции над объектами

5.6. Преобразования типа

6. Формальная грамматика


1. Минимальная объектная модель

Язык не обусловлен какой-либо предопределенной объектной моделью. То есть, любая объектная модель может быть использована для реализации языка и любая объектная модель может быть с помощью его описана. Вместе с тем, требуется, чтобы объектная модель, используемая для реализации языка, не противоречила следующим принципам и удовлетворяла набору соответствующих требований.

Поскольку настоящая спецификация описывает язык в контексте конкретной его реализации конкретным объектно-реляционным ядром, описание языка содержит ссылки на предопределенные классы данного конкретного ядра.

1.1. Объекты и отношения

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

Объект - эквивалентен N-арному отношению, кортежу или сущности.

N-арное отношение - эквивалентно объекту, кортежу или сущности.

Бинарное отношение - эквивалентно связи между объектами или отношением между сущностями.

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

 

1.2. Объекты, значения, классы и атрибуты

Язык предполагает наличие объектов, значений, классов и атрибутов.

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

Значение - неделимое представление некоторых данных, в том числе - объекта, ссылки на объект или множества объектов, используемое для означивания у объектов атрибутов тех классов, экземплярами которых эти объекты являются.

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

Атрибут - объект особого рода, описывающий значение объекта определенного класса. Совокупность атрибутов, входящих во множество атрибутов некоторого класса, определяет класс данных. Значения атрибутов объекта определяются атрибутами его базовых классов.

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

 

1.3. Классы и методы

Язык допускает описание методов.

Метод - описание функции или подпрограммы применительно к определенному классу или без привязки к какому-либо классу.

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

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

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

Предусматривается наличие следующих методов, применительно к следующим классам.

Класс объект:

DEL - удалить данный объект.

SET - установить новые значения одного или нескольких атрибутов данного объекта.

EDIT - редактировать данный объект.

DUMP - выдать текстовое представление объекта.

Класс класс:

NEW - создать новый объект-экземпляр данного класса.

GET - получить один или несколько объектов-экземпляров данного класса.

Класс метод и исполнимые классы:

RUN - выполнить процесс.

ENTERINPUT - ввести входные параметры (аргументы) процесса.

VIEWOUTPUT - вывести выходные параметры процесса.

 

1.4. Объекты, методы и процессы

Поскольку класс метод является производным от класса класс, постольку при выполнении метода может создаваться объект, являющийся экземпляром класса метод. Такой объект называется процессом.

Процесс - объект особого рода, базовым классом которого является экземпляр класса метод.

Процесс отличается от объекта следующим:

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

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

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

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

 

1.5. Атрибуты и параметры методов

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

Передача входных и выходных параметров при исполнении метода происходит следующим образом.

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

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

 

1.6. Групповые операции

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

 

1.7. Пути доступа

Допускается обращение к некоторому объекту или значению его атрибута указанием пути доступа от некоторого другого объекта или значения другого атрибута другого объекта. При этом путь доступа определяетя последовательностью имен атрибутов и запросов на отбор по условию. Запрос на отбор по условию включается в путь доступа в двух следующих случаях:

 

1.8. Фундаментальные бинарные отношения

Предполагается реализация следующих пар комплементарных бинарных отношений.

Базовый-Производный

Базовый - отношение производного класса к базовому.

Производный - отношение базового класса к производному.

Реализуемый-Экземпляр

Реализуемый - отношение объекта-экземпляра к реализуемому классу.

Экземпляр - отношение реализуемого класса к объекту-экземпляру.

Владеемый-Владелец

Владеемый - отношение объекта-владельца к владеемому объекту.

Владелец - отношение владеемого объекта к объекту-владельцу.


2. Структура языка

Основными элементами языка являются команды и выражения. Команды служат для управления работы процессором языка. Выражения служат для управления объектами. Неявно, команды являются методами процессора языка или той рабочей области, в которой исполняется процессор языка. Язык определяется как последовательность команд и выражений.

 

2.1. Команды

Команды языка служат для управления работы процессором языка. Существуют следующие команды.

VERSION "дата"; - проверка соответствия версии процессора языка. Предназначена для контроля за совместимостью.

INCLUDE "имя файла"; - включение файла с текстом языка. Предназначена для рекурсивного включения исходных файлов при их обработке процессором языка.

FONT "имя фонта"; - установка умалчивоемого системного фонта для приложения рабочей области, в которой исполняется процессор.

PUT [последовательность выражений][.|;] - исполнение последовательности выражений в режиме отключенной поддержки логической целостности объектов системным ядром. Предназначена для изменения состояния объектов в тех условиях, когда обеспечение логической целостности поддерживается автором исходного текста (человеком или приложением).

LET [последовательность выражений][.|;] - исполнение последовательности выражений в режиме включенной поддержки логической целостности объектов системным ядром. Предназначена для изменения состояния объектов в тех условиях, когда обеспечение логической целостности автоматически поддерживается системным ядром.

Каждая команда оканчивается точкой или точкой с запятой. Точка с запятой завершает команду. Точка завершает команду и означает конец текущей транзакции и начало следующей транзакции.

Считается, что отсутствие команды PUT или LET предполагает обработку выражений в контексте одной из них по умолчанию, как это реализовано процессорм языка или системным ядром. То есть, все выражения в исходном тексте, следующие без предварения их командой PUT или SET, будут выполнены в таком режиме поддержки логической целостности, как это предусмотрено процессорм языка или системным ядром.

 

2.2. Выражения

Выражения служат для управления объектами. Существуют выражения следующих типов.

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

ACT - любые манипуляции из числа описанных ниже. Явно выражение ACT не используется.

NEW - создание новых объектов и изменение их значений и атрибутов.

SET - изменение значений атрибутов существующих объектов.

RUN - вызов метода применительно к существующим объектам.

DEL - удаление существующих объектов.

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

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

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

Одиночным называется полное негрупповое выражение.

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

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

Присоединенными называются выражения, следующие непосредственно за полным выражением, если полное выражение не завершено, или за другим присоединенным выражением, если оно не завершено. Завершение последнего присоединенного выражения в цепочке, начатой полным выражением, является завершением полного выражения.

Негрупповыми называются все выражения, кроме полных групповых.

Каждое негрупповое выражение однозначно транслируется в один запрос. Выражения, вложенные в другие выражения, транслируются в запросы, вложенные в другие запросы. Выражения, присоединенные к другим выражениям, транслируются в запросы, присоединенные к другим запросам.

Выражения NEW и GET являются умалчиваемым. Это означает, что нет необходимости указывать тип выражения в исходном тексте, если это очевидно из контекста.

 

2.2.1. GET

Выражение GET распознается по слову GET в начале выражения или, при отсутствии слова GET, по имени существующего класса со следующим за ним спецификатором Queriesусловного запроса.

[GET] <имя класса> [<одиночное выражение>|<групповое выражение>][;|.]

<имя класса>

Имя класса, объявленного в системе на момент обработки выражения.

<одиночное выражение> : =

<спецификатор условия> [<присоединенное выражение SET>]

<групповое выражение> :=

<одиночное выражение> [, <групповое выражение>]

<спецификатор условия >

Cпецификатор условия выбора экземпляров объектов класса с указанным именем, в соответствии с правилами написания условных запросов

Назначение выражения GET в том, чтобы применить к экземплярам класса с <именем класса> одно одиночное выражение или группу одиночных выражений. Каждое из одиночных выражений обрабатывается как выбор объектов, удовлетворяющих условию, указанному в <спецификаторе условия>, и применение к каждому из них присоединенного выражения типа SET.

 

2.2.2. NEW

Выражение NEW распознается по слову NEW в начале выражения или, при отсутствии слова NEW, по имени существующего класса без следующим за ним спецификатором условного запроса.

[NEW] [<спецификатор изменения>|<групповое выражение>][;|.]

<имя класса>

Имя класса, объявленного в системе на момент обработки выражения.

<групповое выражение> :=

<спецификатор изменения> [, <групповое выражение>]

<спецификатор изменения>

Спецификатор изменения объектов класса с указанным именем, в соответствии с правилами написания запросов на изменение.

Назначение выражения NEW в том, чтобы создать новый экземпляр класса и именем <имя класса> и применит к нему изменения в соответствии со <спецификатором изменения>.

 

2.2.3. SET

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

<спецификатор изменения>

Спецификатор изменения объектов класса с указанным именем, в соответствии с правилами написания запросов на изменения .

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

 

2.2.4. RUN

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

[RUN] <имя класса> <спецификатор изменения> [;|.]

<имя класса>

Имя исполняемого класса, объявленного в системе на момент обработки выражения.

<спецификатор изменения>

Спецификатор изменения объектов класса с указанным именем, в соответствии с правилами написания запросов на изменения .

Назначение выражения RUN в том, чтобы создать новый экземпляр исполняемого класса с именем <имя класса>, применить к нему изменения в соответствии со <спецификатором изменения>, исполнить метод RUN, определенный для данного класса и удалить объект.

 

2.2.5. DEL

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

[DEL] <имя класса> <спецификатор условия > [;|.]

<спецификатор условия >

Cпецификатор условия выбора экземпляров объектов класса с указанным именем, в соответствии с правилами написания условных запросов.

Назначение выражения DEL в том, чтобы выбрать объекты, удовлетворяющих условию указанному в <спецификаторе условия>, и удалить каждый из них.

 

2.3. Правила манипуляции объектами

Язык не гарантирует, что синтаксически верное выражение будет логически корректным и семантически допустимым в контексте конкретной объектной модели. Предусматривается определенный набор правил, которые обеспечивают возможность использования языка для описания произвольных структур данных и функциональных процессов, и гарантируют нормальное исполнение выражений.

2.3.1. Объявление и определение объектов.

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

Объявлением объекта является создание нового объекта с определением значений его ключевых атрибутов, то есть таких атрибутов, которые его более или менее надежно идентифицируют сам объект (посредством выражения NEW).

Определением объекта является выбор существующего объекта по значениям его ключевых атрибутов (то есть таких атрибутов, которые его более или менее надежно идентифицируют), и определение значений тех его атрибутов, которые не используются для идентификации или являются ссылками на другие объекты, объявленные позже данного (посредством выражения GET и присоединенного к нему SET).

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

 

2.3.2. Поддержание логической целостности

При работе процессора языка, системное ядро может поддерживать или не поддерживать логическую целостность объектов, в зависимости от того, включен режим контроля целостности в рабочей области, или нет. Это определяется тем, в контексте какой команды языка выполняются запросы - PUT или LET. В случае включенного режима контроля целостности, все операции, связанные с удалением объектов посредством выполнения выражений типа DEL, или методов объектов, связанных с удалением их или других объектов, подвергаются верификации на возможность их выполнения в соответствии со следующими ограничениями:

- владеемый объект, то есть объект, имеющий владельца, может быть удален только в контексте объекта-владельца или вместе с ним (под владением понимается как непосредственная ссылка владельца на данный владеемый объект, так и вхождение данного владеемого объекта во множество объектов, принадлежащее объекту-владельцу);

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

Также, в случае включенного режима контроля целостности и удовлетворения приведенным выше условиям, все операции, связанные с удалением объектов, выполняются в соответствии со следующими правилами:

- при удалении объекта, являющегося владельцем других объектов, все владеемые объекты удаляются вместе с ним (под владением понимается как непосредственная ссылка данного объекта-владельца на владеемый объект, так и вхождение владеемых объекта во множество объектов, принадлежащее данному объекту-владельцу);

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

Существует несколько условиий корректного поддержания логической целостности:

- один и тот же объект не должен ссылаться сам на себя и не должен являться владельцем и владеемым по отношению к самому себе;

- если два объекта ссылются друг на друга, то необходимо либо, чтобы один из них выступал владельцем по отношению к другому, либо, чтобы ссылки их друг на друга определялись комплементарными бинарными отношениями, то есть при разрушении одной ссылки, автоматически разрушалась комплементарная ей ссылка;

- не допустимо зацикливание цепочек ссылок, таким образом, чтобы удалению некоторого объекта косвенно препятствовали ссылки на него других объектов, на которые он косвенно ссылается, а также, таким образом, чтобы удаление объекта-владельца косвенно приводило к его удалению в качестве владеемого объекта .

 

2.4. Транзакции

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

 


3. Лексические элементы

Язык предусматривает следующие лексические элементы.

3.1. Комментарии

Комментарии могут быть двух типов.

Строчные комментарии начинаются с двух символов // и продолжаются до конца строки исходного текста.

Блочные комментарии начинаются с двух символов /* и заканчиваются двумя символами */. Блочные комментарии могут иметь неограниченную глубину вложенности.

 

3.2. Мягкие разделители

Мягкими разделителями, игнорируемыми процессором языка, являются символы концов строк, пробелы и символы табиляций.

 

3.3. Жесткие разделители

Жесткими разделителями, разграничивающими значения, операторы, выражения и команды, являются следующие.

. (точка) - конец выражения или команды с завершением транзакции.

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

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

 

3.4. Группирующие разделители

Группирующими разделителями, объединяющими символы и операторы, являются следующие.

' ' (одинарные кавычки) - открывают и закрывают строчные значения.

"" (двойные кавычки) - открывают и закрывают строчные значения.

() (круглые скобки) - открывают и закрывают спецификатор условного запроса типа AND (ALL)

{} (фигурные скобки) - открывают и закрывают спецификатор условного запроса типа OR (ANY)

[] (квадратные скобки) - зарезервировано для использования в операциях с массивами.

 

3.5. Операционные символы

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

< > ! = : + - / * ~ |

 

3.6. Ключевые и умалчиваемые слова

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

Любое имя класса, объявленного в системе на данный момент, стоящее в начале выражения, является ключевым словом.

Любое имя атрибута, определенного применительно к данному классу, является ключевым словом в контексте любого объекта данного класса.

Умалчиваевым словом называется имя атрибута некоторого класса, которое используется при обращении к значению объекта данного класса без явного указания атрибута.

 

3.7. Имена

Именем считается строчное значение атрибута некоторого класса, используемое для однозначной идентификации его объектов-экземпляров. Соответствующие атрибуты называются именующими атрибутами и могут быть умалчиваевыми.

 

3.8. Значения

Значением называется любое значение атрибута объекта некоторого класса. Язык предусматривает такие типы значений, как строка, число, дата (включая дату и время), цвет, ссылка на объект, множество объектов. Допускется использование других типов значений.

 

3.9. Объекты

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

 

3.10. Операторы

Операторы бывают условные и исполняемые. Операторы образуют множества операторов.

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

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

Оператор состоит из левой части, операционной части и правой части.

Левая часть оператора определяет цель оператора - объект, к которому должна быть применена операция, или атрибут объекта, значение которого должно быть изменено.

Операционная часть оператора определяет операцию - метод класса объекта-цели или элементарную операцию над объектом или значением его атрибута.

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

Любая часть оператора может отсутствовать. Оператор, в котором отсутствуют все три части, считается пустым. В правой части исполнимого оператора может стоять выражение. В правой части условного оператора может стоять запрос.

 

3.11. Запросы

Запросы присутствуют в языке только в составе выражений. Запросы состоят из последовательности операторов. Различаются условные запросы и запросы на изменение.

 

3.11.1. Условные запросы

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

Запрос типа ALL предусматривает, что все операторы множества операторов, образующих данный запрос, соединены друг с другом условием логического И - AND. Такой запрос возвращает истину только в том случае, если истинным является результат выполнения каждого из операторов. Запрос типа ALL - AND определяется как включенный в круглые скобки ().

Запрос типа ANY предусматривает, что все операторы множества операторов, образующих данный запрос, соединены друг с другом условием логического ИЛИ - OR. Такой запрос возвращает истину в том случае, если истинным является результат выполнения хотя бы одного из операторов. Запрос типа ANY - OR определяется как включенный в фигурные скобки {}.

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

 

3.11.2. Запросы на изменение

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

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

 

3.12. Директивы процессору языка

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

Конкретные значения директив определяются реализацией процессора.

Предусмотрено использование следующих директив.

#STOP

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

 


4. Типы значений и классы объектов

Язык предусматривает наличие следующих типов и базовых классов.

 

4.1. Типы значений

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

 

4.1.1. Строка

Строчными значениями считаются следующие.

Последовательности символов, не начинающиеся с комментариев, разделителей, группирующих или операционных символов, символов +,-,0,1,2,3,4,5,6,7,8,9 и не содержащая внутри себя мягких или жестких разделителей.

Любая последовательности символов, заключенная в двойные или одинарные кавычки, включая символы концов строк.

Допускается использование двойных кавычек внутри строки, заключенной в одинарные кавычки. Допускается, но не рекомендуется использовать одинарные кавычки внутри строки, заключенной в двойные кавычки. Если строка заключена в одинарные либо двойные кавычки, то использование таких кавычек внутри самой строки не допускается.

 

4.1.2. Дата

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

Допустимы следующие форматы поля даты.

dd.mm.yy

dd/mm/yy

dd - дни.

mm - месяцы, причем если количество символов m больше двух, месяц выводится словами.

yy - годы, причем количество символов может y быть два или четыре.

Допустимы следующие форматы поля времени.

hh:mi:ss:ms[AM|PM]

hh - часы.

mi - минуты.

ss - секунды.

ms - миллисекунды.

 

4.1.3. Цвет

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

 

4.1.4. Число

Численное значение указывается последовательностью, состоящей начинающейся с одного из следующих символов:

0 1 2 3 4 5 6 7 8 9 . + -

 

4.1.5. Ссылка

Значение ссылки на объект определяется неявно через выражение типа GET или NEW. То есть, в том месте, где нужно указать значение ссылки на некоторый объект, должно фигурировать выражение, в соответствии со следующими правилами.

Указание ссылки через выражение типа GET означает, что ссылка означивается уже существующим объектом, идентифицируемым условным запросом выражения.

Указание ссылки через выражение типа NEW означает, что ссылка означивается новым объектом указанного в запросе класса, или класса, очевидного из контекста.

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

 

4.1.6. Множество

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

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

Указание элемента через выражение типа NEW означает, что новый объект указанного в запросе класса, или класса, очевидного из контекста, будет включен во множество объектов.

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

 

4.2. Классы объектов

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

 

4.2.1. Объект

Объект класса объект должен иметь значения следующих атрибутов:

множество объектов класса класс, являющихся реализуемыми для данного объекта;

ссылку на объект-владелец, которая может быть неозначенной.

 

4.2.2. Класс

Объект класса класс должен происходить от класса объект и иметь значения следующих атрибутов:

множество объектов класса объект, являющихся экземплярами для данного класса (может быть пустым);

множество объектов класса класс, являющихся базовыми для данного класса (может быть пустым);

множество объектов класса класс, являющихся производными для данного класса (может быть пустым);

множество объектов класса метод, являющихся методами для данного класса (может быть пустым);

множество объектов класса атрибут, определяющих значения для объектов данного класса (может быть пустым);

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

 

4.2.3. Атрибут

Объект класса атрибут должен происходить от класса объект и иметь значения следующих атрибутов:

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

 

4.2.4. Метод

Объект класса метод должен происходить от класса класс и иметь значения следующих атрибутов:

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

 


5. Операции

Язык предопределяет элементарные операции, которые должны выполняться применительно к различным типам значений или объектам. По своей сути, операции являются предопределенными методами классов значений и объектов.

Существует понятие умалчиваемой операции, что означает, что данная операция выполняется, если символьное указание операции не специфировано в операционной части оператора явно. Умалчиваемые операции определяются раздельно для условных операторов и исполняемых операторов. Операции условных операторов называются логическими. Операции исполняемых операторов называются исполнимыми.

Операции специфицируются, как правило, комбинациями из операционных символов, за исключениме операций NEW, GET, SUT, DEL и RUN.

 

5.1. Операции над числами

Над численными значениями возможны следующие операции.

Исполнимые:

= или := (умалчиваемая) присвоение численному значению другого значения;

+= добавление к численному значению другого значения;

-= вычитание из численного значения другого значения;

*= умножение численного значения на другое значение;

/= деление численного значения на другое значение.

Логические:

= или == (умалчиваемая) проверка равенства численного значения другому значению;

!= или <> проверка неравенства численного значения другому значению;

> проверка того, что численное значение больше другого значения;

>= проверка того, что численное значение больше или равно другому значению;

< проверка того, что численное значение меньше другого значения;

<= проверка того, что численное значение меньше или равно другому значению.

 

5.2. Операции над строками

Над численными значениями возможны следующие операции.

Исполнимые:

= или := (умалчиваемая) присвоение строчному значению другого значения;

+= добавление к строке другой строки конкатенацией;

-= удаление из строки всех подстрок, эквивалентных подстроке.

Логические:

= или == (умалчиваемая) проверка равенства строчного значения другому значению;

!= или <> проверка неравенства численного значения другому значению;

> проверка того, что строка включает другую строку;

< проверка того, что строка включается другой строкой;

 

5.3. Операции над ссылками

Над ссылками возможны следующие операции.

Исполнимые:

= или := (умалчиваемая) означить ссылку объектом;

Логические:

= или == (умалчиваемая) проверить ссылку на равенство другой ссылке или доступного по ссылке объекта во множество.

 

5.4. Операции над множествами

Над множествами возможны следующие операции.

Исполнимые:

+ (умалчиваемая) добавить объект в множество;

- удалить объект из множества.

Логические:

= или == (умалчиваемая) проверить множество на вхождение в него объекта или множество на равенство другому множеству;

!= или <> проверить множество на неравенство другому множеству;

> проверить множество на вхождение в другое множеству;

< проверить множество на включение другого множества.

 

5.5. Операции над объектами

Над объектами возможны следующие операции.

Логические:

= или == (умалчиваемая) проверить объект на вхождение во множество или проверить объект на тождественность другому объекту.

GET проверить объект на условие выполнения запроса

Исполнимые

NEW создать новый экземпляр для объектов, реализующих класс класс;

RUN исполнить объект исполняемого класса или применить метод к существующему объекту;

DEL удалить объект;

SET изменить значения атрибутов обектов.

 

5.6. Преобразования типа

Язык предусматривает автоматические преобразования типа между значениями типа строка и число.

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

 


6. Формальная грамматика

Формальная грамматика языка может быть описана в стандартной форме Бэкуса-Науэра.

 


 Объектно-реляционный язык ORL и системное ядро