|
|
@@ -12,26 +12,26 @@
|
|
|
## Оглавление
|
|
|
|
|
|
- [Oberon-Deft](#oberon-deft)
|
|
|
- - [Оглавление](#оглавление)
|
|
|
- - [0. Введение](#0-введение)
|
|
|
- - [1. Синтаксис](#1-синтаксис)
|
|
|
- - [2. Синтез сущностей](#2-синтез-сущностей)
|
|
|
- - [3. Ключевые символы](#3-ключевые-символы)
|
|
|
- - [4. Объявления имён и область видимости](#4-объявления-имён-и-область-видимости)
|
|
|
- - [5. Объявление констант](#5-объявление-констант)
|
|
|
- - [6. Объявление типов](#6-объявление-типов)
|
|
|
- - [6.1 Встроенные линейные типы](#61-встроенные-линейные-типы)
|
|
|
- - [6.2 Встроенные векторные типы](#62-встроенные-векторные-типы)
|
|
|
- - [6.3 Структура](#63-структура)
|
|
|
- - [6.4 Структуры и ссылки](#64-структуры-и-ссылки)
|
|
|
- - [6.5 Тип функции](#65-тип-функции)
|
|
|
- - [7. Объявление переменных](#7-объявление-переменных)
|
|
|
- - [8. Выражения](#8-выражения)
|
|
|
- - [8.1 Операнды](#81-операнды)
|
|
|
- - [8.2 Операторы](#82-операторы)
|
|
|
- - [8.2.1 Логические операции](#821-логические-операции)
|
|
|
- - [8.2.2 Арифметические операции](#822-арифметические-операции)
|
|
|
- - [Ссылки](#ссылки)
|
|
|
+ - [Оглавление](#оглавление)
|
|
|
+ - [0. Введение](#0-введение)
|
|
|
+ - [1. Синтаксис](#1-синтаксис)
|
|
|
+ - [2. Синтез сущностей](#2-синтез-сущностей)
|
|
|
+ - [3. Ключевые символы](#3-ключевые-символы)
|
|
|
+ - [4. Объявления имён и область видимости](#4-объявления-имён-и-область-видимости)
|
|
|
+ - [5. Объявление констант](#5-объявление-констант)
|
|
|
+ - [6. Объявление типов](#6-объявление-типов)
|
|
|
+ - [6.1 Встроенные линейные типы](#61-встроенные-линейные-типы)
|
|
|
+ - [6.2 Встроенные векторные типы](#62-встроенные-векторные-типы)
|
|
|
+ - [6.3 Структура](#63-структура)
|
|
|
+ - [6.4 Структуры и ссылки](#64-структуры-и-ссылки)
|
|
|
+ - [6.5 Тип функции](#65-тип-функции)
|
|
|
+ - [7. Объявление переменных](#7-объявление-переменных)
|
|
|
+ - [8. Выражения](#8-выражения)
|
|
|
+ - [8.1 Операнды](#81-операнды)
|
|
|
+ - [8.2 Операторы](#82-операторы)
|
|
|
+ - [8.2.1 Логические операции](#821-логические-операции)
|
|
|
+ - [8.2.2 Арифметические операции](#822-арифметические-операции)
|
|
|
+ - [Ссылки](#ссылки)
|
|
|
|
|
|
## 0. Введение
|
|
|
|
|
|
@@ -225,31 +225,35 @@ flowchart TD
|
|
|
| { | Фигурная открывающая скобка (область видимости) |
|
|
|
| } | Закрывающая фигурная скобка (область видимости) |
|
|
|
| ВНУТРИ | IN Определение вхождения |
|
|
|
+| МАССИВ | ARRAY Массив элементов |
|
|
|
| ЕСТЬ | IS Проверка типа |
|
|
|
+| БАЙТ | BYTE Тип байт |
|
|
|
| ДА | TRUE Булево значение |
|
|
|
| НЕТ | FALSE Отрицание логического значения |
|
|
|
+| ЦЕЛОЕ | INT Дробное число |
|
|
|
+| ВЕЩ | REAL Дробное число |
|
|
|
| ПРОВЕР | SWITCH Проверка на выбор |
|
|
|
| ТИП | TYPE Объявление типа |
|
|
|
-| МАССИВ | ARRAY Массив элементов |
|
|
|
+| МОДУЛЬ | MODULE Объявление начала модуля |
|
|
|
| ИМПОРТ | IMPORT Импорт модуля |
|
|
|
+| КОНСТ | CONST Объявление константы |
|
|
|
+| ТИП | TYPE Определение типа |
|
|
|
+| СТРУКТ | STRUCT Объявление структуры |
|
|
|
+| ЗНАЧ | VAR Объявление переменной |
|
|
|
+| МУТ | MUT Признак изменяемости |
|
|
|
+| ФН | FN Объявление функции |
|
|
|
+| ВЕРНУТЬ | RETURN Возврат из функции |
|
|
|
| ЕСЛИ | IF Начало условия |
|
|
|
| ТОГДА | THEN Действие после условия |
|
|
|
| ИНАЧЕ | Альтернативная ветка ЕСЛИ |
|
|
|
| МОД | MOD Модуль от целочисленного деления |
|
|
|
-| МОДУЛЬ | MODULE Объявление начала модуля |
|
|
|
-| КОНСТ | CONST Объявление константы |
|
|
|
| ДИВ | DIV Остаток от целочисленного деления |
|
|
|
| НИЧ | NIL Пустое состояние объекта |
|
|
|
-| ЗНАЧ | VAR Объявление переменной |
|
|
|
| ПОКА | WHILE Условие проверки продолжения цикла на входе |
|
|
|
| ПОКА | UNTIL Условие продолжения цикла на выходе |
|
|
|
| ИЛИ | OR Логическое ИЛИ |
|
|
|
-| ФН | FN Объявление функции |
|
|
|
-| СТРУКТ | STRUCT Объявление структуры |
|
|
|
| ПОВТОР | REPEAT Повторить выполнение |
|
|
|
| ДЛЯ | FOR Объявление цикла |
|
|
|
-| ВЕРНУТЬ | RETURN Возврат из функции |
|
|
|
-| МУТ | MUT Признак изменяемости |
|
|
|
|
|
|
## 4. Объявления имён и область видимости
|
|
|
|
|
|
@@ -268,7 +272,7 @@ flowchart TD
|
|
|
> ASR
|
|
|
> ASSERT
|
|
|
> BOOL
|
|
|
-> BYTE
|
|
|
+> БАЙТ
|
|
|
> CHAR
|
|
|
> EXCL
|
|
|
> FLT
|
|
|
@@ -293,10 +297,10 @@ flowchart TD
|
|
|
Константное выражение может быть вычислено по его тексту без фактического выполнения программы. Его операнды — константы. Примеры объявлений констант:
|
|
|
|
|
|
```bash
|
|
|
-const число = 100;
|
|
|
-const лимит = 2*число - 1;
|
|
|
-const словаВсе = [0 .. словаРазмер -1];
|
|
|
-const имя = "Oberon";
|
|
|
+КОНСТ число = 100;
|
|
|
+КОНСТ лимит = 2*число - 1;
|
|
|
+КОНСТ словаВсе = [0 .. словаРазмер -1];
|
|
|
+КОНСТ имя = "Oberon";
|
|
|
```
|
|
|
|
|
|
## 6. Объявление типов
|
|
|
@@ -329,7 +333,7 @@ type Узел {
|
|
|
}
|
|
|
type ДеревоСередина = @УзелСередина;
|
|
|
type УзелСередина (Узел){
|
|
|
- Имя: ARRAY[32]BYTE,
|
|
|
+ Имя: ARRAY[32]БАЙТ,
|
|
|
Подузел: Дерево,
|
|
|
}
|
|
|
type Функция = FN (x: INT): INT;
|
|
|
@@ -342,11 +346,11 @@ type Функция = FN (x: INT): INT;
|
|
|
Встроенные линейные типы:
|
|
|
|
|
|
- `BOOL` -- принимает значения `TRUE` и `FALSE`
|
|
|
-- `BYTE` -- целые числа от 0 до 255, размер фиксированный в 8 бит
|
|
|
+- `БАЙТ` -- целые числа от 0 до 255, размер фиксированный в 8 бит
|
|
|
- `INT` -- целые числа, размер зависит от реализации
|
|
|
- `REAL` -- дробные числа, размер зависит от реализации
|
|
|
|
|
|
-Тип `BYTE` совместим с типом `INT`, но наоборот требуется прведение.
|
|
|
+Тип `БАЙТ` совместим с типом `INT`, но наоборот требуется прведение.
|
|
|
Тип `INT` совместим с типом `REAL`, но наоборот требуется прведение.
|
|
|
В любом случае приведение *всегда* выполняется явно.
|
|
|
|
|
|
@@ -406,7 +410,7 @@ type Year struct{
|
|
|
день, месяц, год: INT,
|
|
|
}
|
|
|
type User struct{
|
|
|
- имя, фамилия: ARRAY[32]BYTE,
|
|
|
+ имя, фамилия: ARRAY[32]БАЙТ,
|
|
|
возраст: INTEGER,
|
|
|
зарплата: REAL,
|
|
|
}
|
|
|
@@ -443,7 +447,7 @@ var p, q: BOOL;
|
|
|
var f: fn();
|
|
|
var a: ARRAY[100]REAL;
|
|
|
type text struct{
|
|
|
- лит: BYTE,
|
|
|
+ лит: БАЙТ,
|
|
|
счётчик: INT,
|
|
|
}
|
|
|
var w: ARRAY[16]text;
|
|
|
@@ -479,7 +483,7 @@ var t: Дерево;
|
|
|
```bash
|
|
|
i (INT)
|
|
|
а[I] (REAL)
|
|
|
-w[3].ch (BYTE)
|
|
|
+w[3].ch (БАЙТ)
|
|
|
t.ключ (INT)
|
|
|
t.левый.правый (Дерево)
|
|
|
t(УзелСредний).подузел(Дерево)
|
|
|
@@ -752,7 +756,7 @@ END
|
|
|
ЗаголовокПроцедуры = PROCEDURE ИмяПроцедуры[ФормальныеПараметры].
|
|
|
ТелоПроцедуры = ПоследОбъявлений[BEGIN ПоследПредписаний]
|
|
|
[RETURN Выражение] END.
|
|
|
-ПоследОбъявлений = [CONST {ОбъявлениеКонстант ";"}]
|
|
|
+ПоследОбъявлений = [КОНСТ {ОбъявлениеКонстант ";"}]
|
|
|
[TYPE {ОбъявлениеТипов ";"}] [VAR {ОбъявлениеПеременных ";"}]
|
|
|
{ОбъявлениеПроцедуры ";"}.
|
|
|
|
|
|
@@ -1120,7 +1124,7 @@ DO ПоследПредписаний END.
|
|
|
ТелоПроцедуры = ПоследОпределений[BEGIN ПоследПредписаний ]
|
|
|
[RETURN выражение ] END.
|
|
|
|
|
|
-ПоследОпределений = [CONST {ОпрКонстант ";"}]
|
|
|
+ПоследОпределений = [КОНСТ {ОпрКонстант ";"}]
|
|
|
[TYPE {ОпрТипа ";"}]
|
|
|
[VAR {ОпрПеременной ";"}]
|
|
|
{ОпрПроцедуры ";"}.
|