|
|
@@ -21,24 +21,25 @@
|
|
|
- [6.1 Встроенные линейные типы](#61-встроенные-линейные-типы)
|
|
|
- [6.2 Встроенные векторные типы](#62-встроенные-векторные-типы)
|
|
|
- [6.3 Структура](#63-структура)
|
|
|
- - [6.4 Тип функции](#64-тип-функции)
|
|
|
- - [7. Объявление объектов](#7-объявление-объектов)
|
|
|
- - [8. Выражения](#8-выражения)
|
|
|
+ - [6.4 Абстрактные т=структуры](#64-абстрактные-тструктуры)
|
|
|
+ - [7 Тип функции](#7-тип-функции)
|
|
|
+ - [8. Объявление объектов](#8-объявление-объектов)
|
|
|
+ - [9. Выражения](#9-выражения)
|
|
|
- [8.1 Операнды](#81-операнды)
|
|
|
- [8.2 Операторы](#82-операторы)
|
|
|
- [8.2.1 Логические операции](#821-логические-операции)
|
|
|
- [8.2.2 Арифметические операторы](#822-арифметические-операторы)
|
|
|
- [8.2.3 Отношения](#823-отношения)
|
|
|
- - [9. Предписания](#9-предписания)
|
|
|
+ - [10. Предписания](#10-предписания)
|
|
|
- [9.1 Предписание ПРИСВОЕНИЕ](#91-предписание-присвоение)
|
|
|
- [9.3 Последовательность предписаний](#93-последовательность-предписаний)
|
|
|
- [9.4 Предписание\_ЕСЛИ](#94-предписание_если)
|
|
|
- [9.5 Предписание\_ВЫБОР](#95-предписание_выбор)
|
|
|
- [9.7 Предписание цикл](#97-предписание-цикл)
|
|
|
- - [10. Объявление функций](#10--объявление-функций)
|
|
|
+ - [11. Объявление функций](#11--объявление-функций)
|
|
|
- [10.1 Формальные параметры](#101-формальные-параметры)
|
|
|
- [10.2. Встроенные функции](#102-встроенные-функции)
|
|
|
- - [11. Модули](#11--модули)
|
|
|
+ - [12. Модули](#12--модули)
|
|
|
- [11.1 Модуль СИСТЕМА](#111-модуль-система)
|
|
|
- [Приложение 1: Синтаксис Оберона](#приложение-1-синтаксис-оберона)
|
|
|
- [Приложение 2: Участники](#приложение-2-участники)
|
|
|
@@ -216,60 +217,61 @@ flowchart TD
|
|
|
|
|
|
Ниже перечислен полный список `ключевых символов`
|
|
|
|
|
|
-| Символ | Комментарий |
|
|
|
-| ------- | ---------------------------------------------------- |
|
|
|
-| + | Сложение |
|
|
|
-| - | Минус |
|
|
|
-| * | Умножение |
|
|
|
-| / | Деление |
|
|
|
-| = | Присвоение |
|
|
|
-| < | Меньше |
|
|
|
-| <= | Меньше или равно |
|
|
|
-| > | Больше |
|
|
|
-| >= | Больше или равно |
|
|
|
-| // | Линейный комментарий |
|
|
|
-| /* | Начало многострочного комментария |
|
|
|
-| */ | Конец многострочного комментария |
|
|
|
-| . | Точка |
|
|
|
-| , | Запятая |
|
|
|
-| ; | Разделитель выражений |
|
|
|
-| .. | Конструктор диапазона |
|
|
|
-| : | Определить тип переменной |
|
|
|
-| ( | Открывающая круглая скобка (выражение) |
|
|
|
-| ) | Закрывающая круглая скобка (выражение) |
|
|
|
-| [ | Открывающая квадратная скобка (массив) |
|
|
|
-| ] | Закрывающая квадратная скобка (массив) |
|
|
|
-| { | Фигурная открывающая скобка (область видимости) |
|
|
|
-| } | Закрывающая фигурная скобка (область видимости) |
|
|
|
-| модуль | MODULE Объявление начала модуля |
|
|
|
-| импорт | IMPORT Импорт модуля |
|
|
|
-| конст | CONST Объявление константы |
|
|
|
-| тип | TYPE Объявление типа |
|
|
|
-| бул | BOOL Белвый тип |
|
|
|
-| да | TRUE Булево значение |
|
|
|
-| нет | FALSE Отрицание логического значения |
|
|
|
-| байт | BYTE Тип байт |
|
|
|
-| целое | INT Дробное число |
|
|
|
-| вещ | REAL Дробное число |
|
|
|
-| массив | ARRAY Массив элементов |
|
|
|
-| структ | STRUCT Объявление структуры |
|
|
|
-| симв | VAR Объявление переменной |
|
|
|
-| мут | MUT Признак изменяемости |
|
|
|
-| пуб | PUB Признак экспорта |
|
|
|
-| фн | FN Объявление функции |
|
|
|
-| & | & Создание объекта |
|
|
|
-| есть | IS Проверка типа |
|
|
|
-| если | IF Проверка условия |
|
|
|
-| провер | SWITCH Проверка на выбор |
|
|
|
-| ветка | CASE ветка выбора |
|
|
|
-| вернуть | RETURN Возврат из функции |
|
|
|
-| нич | NIL Пустое состояние объекта |
|
|
|
-| цикл | LOOP Безусловный цикл |
|
|
|
-| дальше | NEXT Продолжить цикл с пропуском следующих выражений |
|
|
|
-| стоп | BREAK Прервать цикл с пропуском следующих выражений |
|
|
|
-| или | OR Логическое или |
|
|
|
-| и | AND Логическое и |
|
|
|
-| не | NOT Логическая инверсия |
|
|
|
+| Символ | Комментарий |
|
|
|
+| -------- | ---------------------------------------------------- |
|
|
|
+| + | Сложение |
|
|
|
+| - | Минус |
|
|
|
+| * | Умножение |
|
|
|
+| / | Деление |
|
|
|
+| = | Присвоение |
|
|
|
+| < | Меньше |
|
|
|
+| <= | Меньше или равно |
|
|
|
+| > | Больше |
|
|
|
+| >= | Больше или равно |
|
|
|
+| // | Линейный комментарий |
|
|
|
+| /* | Начало многострочного комментария |
|
|
|
+| */ | Конец многострочного комментария |
|
|
|
+| . | Точка |
|
|
|
+| , | Запятая |
|
|
|
+| ; | Разделитель выражений |
|
|
|
+| .. | Конструктор диапазона |
|
|
|
+| : | Определить тип переменной |
|
|
|
+| ( | Открывающая круглая скобка (выражение) |
|
|
|
+| ) | Закрывающая круглая скобка (выражение) |
|
|
|
+| [ | Открывающая квадратная скобка (массив) |
|
|
|
+| ] | Закрывающая квадратная скобка (массив) |
|
|
|
+| { | Фигурная открывающая скобка (область видимости) |
|
|
|
+| } | Закрывающая фигурная скобка (область видимости) |
|
|
|
+| модуль | MODULE Объявление начала модуля |
|
|
|
+| импорт | IMPORT Импорт модуля |
|
|
|
+| конст | CONST Объявление константы |
|
|
|
+| тип | TYPE Объявление типа |
|
|
|
+| бул | BOOL Белвый тип |
|
|
|
+| да | TRUE Булево значение |
|
|
|
+| нет | FALSE Отрицание логического значения |
|
|
|
+| байт | BYTE Тип байт |
|
|
|
+| целое | INT Дробное число |
|
|
|
+| вещ | REAL Дробное число |
|
|
|
+| массив | ARRAY Массив элементов |
|
|
|
+| структ | STRUCT Объявление структуры |
|
|
|
+| абстракт | ABSTRACT Объявление абстрактной структуры |
|
|
|
+| симв | VAR Объявление переменной |
|
|
|
+| мут | MUT Признак изменяемости |
|
|
|
+| пуб | PUB Признак экспорта |
|
|
|
+| фн | FN Объявление функции |
|
|
|
+| & | & Создание объекта |
|
|
|
+| есть | IS Проверка типа |
|
|
|
+| если | IF Проверка условия |
|
|
|
+| провер | SWITCH Проверка на выбор |
|
|
|
+| ветка | CASE ветка выбора |
|
|
|
+| вернуть | RETURN Возврат из функции |
|
|
|
+| нич | NIL Пустое состояние объекта |
|
|
|
+| цикл | LOOP Безусловный цикл |
|
|
|
+| дальше | NEXT Продолжить цикл с пропуском следующих выражений |
|
|
|
+| стоп | BREAK Прервать цикл с пропуском следующих выражений |
|
|
|
+| или | OR Логическое или |
|
|
|
+| и | AND Логическое и |
|
|
|
+| не | NOT Логическая инверсия |
|
|
|
|
|
|
## 4. Объявления имён и область видимости
|
|
|
|
|
|
@@ -455,7 +457,43 @@ UNPK
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 6.4 Тип функции
|
|
|
+### 6.4 Абстрактные т=структуры
|
|
|
+
|
|
|
+Структуры могут быть объявлены с квалификатором `абстракт`. Подобные структуры могут обладать сигнатурами методов, но не полями или самими методами.
|
|
|
+
|
|
|
+Абстрактные структуры можно встраивать в структуры. Поскольку полей в них нет, производная структура также не содержит полей (но можно добавить), а методы абстрактной структуры в производной должны быть обязательно описаны. Если этого не сделать, то будет ошибка во время компиляции.
|
|
|
+
|
|
|
+Абстрактные структуры могут встраивать абстрактные структуры. Если есть две абстрактные структуры с одинаковым набором методов, но разным именем -- это разные структуры.
|
|
|
+
|
|
|
+Создать объект абстрактной структуры нельзя. Абстрактную структуру можно только реализовать.
|
|
|
+
|
|
|
+```bash
|
|
|
+СтруктураАбстракт = Имя + "=" СТРУКТ АБСТРАКТ {
|
|
|
+ СписокМетодов..?;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Пример:
|
|
|
+
|
|
|
+```bash
|
|
|
+тип {
|
|
|
+ База = структ абстракт {
|
|
|
+ Открыть([]байт):ошибка;
|
|
|
+ Закрыть():ошибка;
|
|
|
+ }
|
|
|
+ БазаРасшир = структ абстракт (База) {
|
|
|
+ Строить():ошибка;
|
|
|
+ Шахта():уголь;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+сущ {
|
|
|
+ базаА, базаБ = База;
|
|
|
+ базаВ = БазаРасшир;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+## 7 Тип функции
|
|
|
|
|
|
Тип функции является объектом кода, поэтому функция является статической сущностью. Можно удалить объект ссылающийся на функцию, но нельзя удалить саму функцию.
|
|
|
|
|
|
@@ -463,7 +501,7 @@ UNPK
|
|
|
|
|
|
> ТипФункция = ФН (ФормальныеПараметры?)Результат?;
|
|
|
|
|
|
-## 7. Объявление объектов
|
|
|
+## 8. Объявление объектов
|
|
|
|
|
|
Объявления объектов служат для введения объектов и связывания их с именами, которые не должны повторяться в пределах данной области видимости. Они также служат для связывания встроенных линейных и векторных типов данных с имена объектов.
|
|
|
|
|
|
@@ -492,7 +530,7 @@ UNPK
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 8. Выражения
|
|
|
+## 9. Выражения
|
|
|
|
|
|
`Выражения` - это конструкции, содержащие правила вычисления, в которых константы и текущие значения объектов объединяются для получения других значений посредством применения операторов и функций возвращающих результат.
|
|
|
|
|
|
@@ -619,7 +657,7 @@ K == i (`бул`)
|
|
|
T есть УзелСредний (`бул`)
|
|
|
```
|
|
|
|
|
|
-## 9. Предписания
|
|
|
+## 10. Предписания
|
|
|
|
|
|
Предписания обозначают *языковые действия*. Простые предписания есть операторы. Простые предписания не состоят из каких-либо частей, которые сами являлись бы предписаниями.
|
|
|
|
|
|
@@ -751,7 +789,7 @@ w[i+1].ch = "A"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 10. Объявление функций
|
|
|
+## 11. Объявление функций
|
|
|
|
|
|
Объявление функций состоит из заголовка функции и её тела. Заголовок определяет имя функции, формальные параметры и тип результата (если таковой есть). Тело содержит объявления и предписания.
|
|
|
|
|
|
@@ -874,7 +912,7 @@ w[i+1].ch = "A"
|
|
|
Округ(-1.5) = -2
|
|
|
```
|
|
|
|
|
|
-## 11. Модули
|
|
|
+## 12. Модули
|
|
|
|
|
|
Модуль представляет собой набор объявлений констант, типов, переменных и функций, списков предписаний с целью присвоения начальных значений переменным. Модуль обычно представляет собой текст, который можно скомпилировать как единое целое.
|
|
|
|