Forráskód Böngészése

SVI Исправления. упрощения

SVI 2 éve
szülő
commit
d703de9354
1 módosított fájl, 49 hozzáadás és 26 törlés
  1. 49 26
      README.md

+ 49 - 26
README.md

@@ -23,6 +23,9 @@
     - [6.1 Встроенные линейные типы](#61-встроенные-линейные-типы)
     - [6.2 Встроенные векторные типы](#62-встроенные-векторные-типы)
     - [6.3 Структура](#63-структура)
+    - [6.4 Структуры и ссылки](#64-структуры-и-ссылки)
+    - [6.5 Тип функции](#65-тип-функции)
+  - [7. Объявление переменных](#7-объявление-переменных)
   - [Ссылки](#ссылки)
 
 ## 0. Введение
@@ -236,7 +239,6 @@ flowchart TD
 | ПОКА    | WHILE Условие проверки продолжения цикла на входе |
 | ПОКА    | UNTIL Условие продолжения цикла на выходе         |
 | ИЛИ     | OR Логическое ИЛИ                                 |
-| @       | Ссылка на объект                                  |
 | ФН      | FN Объявление функции                             |
 | СТРУКТ  | STRUCT Объявление структуры                       |
 | ПОВТОР  | REPEAT Повторить выполнение                       |
@@ -315,7 +317,7 @@ const имя = "Oberon";
 
 ```bash
 type Таблица = ARRAY[255]REAL;
-type Дерево = @Узел;
+type Дерево = Узел;
 type Узел {
     ключ: INT,
     Левый, Правый: Дерево,
@@ -335,9 +337,9 @@ type Функция = FN (x: INT): INT;
 Встроенные линейные типы:
 
 - `BOOL` -- принимает значения `TRUE` и `FALSE`
+- `BYTE` -- целые числа от 0 до 255, размер фиксированный в 8 бит
 - `INT` -- целые числа, размер зависит от реализации
 - `REAL` -- дробные числа, размер зависит от реализации
-- `BYTE` -- целые числа от 0 до 255, размер фиксированный в 8 бит
 
 Тип `BYTE` совместим с типом `INT`, но наоборот требуется прведение.
 Тип `INT` совместим с типом `REAL`, но наоборот требуется прведение.
@@ -376,36 +378,57 @@ var moments=ARRAY[10, 20]REAL;
 var strHello="Привет";
 ```
 
+Все встроенные векторные типы с точки зрения программиста *всегда* передаются по ссылке.
+
+С точки зрения реализации это может быть на усмотрение реализации.
+
 ### 6.3 Структура
 
-Сущность структура, состоящая из фиксированного количества элементов возможно разных типов. Объявление типа записи задаёт для каждого элемента, которое называется полем, его тип и имя, которое обозначает (ссылается на) это поле. Область действия этих имён полей - само определение записи, но они также видны как части экземпляра записи в форме "через точку" (см. 8.1), которая ссылается на элементы самого экземпляра записи.
-	ТипЗаписи = RECORD ["(" БазовыйТип")"] [СписокПолейТипа] END.
-	БазовыйТип = квалификатор.
-	СписокПолейТипа= СписокПолей{";" СписокПолей}.
-	СписокПолей = СписокИмён":" тип.
-	СписокИмён= ИмяОбъявление{"," ИмяОбъявление}.
+Сущность `структура`, состоящая из фиксированного количества элементов возможно разных типов. Объявление типа структуры задаёт для каждого элемента, которое называется полем, его тип и имя, которое првязывает это поле. Область действия этих имён полей - само определение структуры, но они также видны как неотъемлемые части экземпляра структуры в форме "через точку", которая ссылается на элементы самого экземпляра структуры.
 
-Если тип записи экспортируется, имена полей, которые должны быть видимыми вне модуля объявления, должны быть помечены. Они называются публичными полями; неотмеченные поля называются приватными полями. Типы записей являются расширяемыми, т. е. тип записи может быть определён как расширение другого типа записи. В приведенных выше примерах УзелСередина (непосредственно) расширяет Узел, который является (прямым) базовым типом УзелСередина. Точнее, УзелСередина расширяет Узел с полями имя и подузел.
-Определение. Тип T расширяет тип T0, если он является T0, или если он непосредственно расширяет расширение T0. И наоборот, тип T0 является базовым типом для типа T, если он является T, или если он является прямым базовым типом базового типа T. Примеры типов записей:
-	RECORD день, месяц, год: INTEGER
-	END
-	RECORD
-	 имя, фамилия: ARRAY 32 OF CHAR;
-	 возраст: INTEGER;
-	 зарплата: REAL
-	END
+```bash
+ТипЗаписи = STRUCT ["(" БазовыйТип")"] [СписокПолейТипа].
+БазовыйТип = квалификатор.
+СписокПолейТипа= СписокПолей{";" СписокПолей}.
+СписокПолей = СписокИмён":" тип.
+СписокИмён = ИмяОбъявление{"," ИмяОбъявление}.
+```
+
+Если тип структуры экспортируется, имена полей, которые должны быть видимыми вне модуля объявления, должны быть помечены. Они называются публичными полями; неотмеченные поля называются приватными полями. Типы записей являются расширяемыми, т. е. тип записи может быть определён как расширение другого типа записи. В приведенных выше примерах УзелСередина (непосредственно) расширяет Узел, который является (прямым) базовым типом УзелСередина. Точнее, УзелСередина расширяет Узел с полями имя и подузел.
+
+**Определение**. Тип T расширяет тип T0, если он является T0, или если он непосредственно расширяет расширение T0. И наоборот, тип T0 является базовым типом для типа T, если он является T, или если он является прямым базовым типом базового типа T. Примеры типов структур:
+
+```bash
+type Year struct{
+    день, месяц, год: INT,
+}
+type User struct{
+    имя, фамилия: ARRAY[32]BYTE,
+    возраст: INTEGER,
+    зарплата: REAL,
+}
+```
+
+### 6.4 Структуры и ссылки
+
+Типы структур с точки зрения программиста *всегда* связываются по ссылке. С точки зрения реализации это может быть не так.
+
+```bash
+type ТипСсылка = тип;
+```
+
+### 6.5 Тип функции
+
+Тип функции является объектом кода, поэтому функция является статической сущностью.
+
+Все переменные присваиваются ссылкой на функцию с точки зрения программиста.
 
-6.4 Тип ссылка
-Переменные ссылки типа P принимают в качестве значений ссылки на переменные некоторого типа T. Этот тип должен быть типом записи. Ссылка типа P называется связанным с T, а T - базовым типом для ссылки P. Типы ссылок наследуют отношение расширения их базовых типов (если они есть). Если тип T является расширением T0 и P является типом ссылки, связанным с T, то P также является расширением P0, тип ссылки, связанный с T0.
+С точки зрения реализации -- это может быть как угодно.
 
-	ТипСсылка = POINTER TO тип .
+> ТипФункция = FN [ФормальныеПараметры].
 
-Если тип P определён как POINTER TO T, тип T может быть текстуально объявлен после объявления P, но [если это так] он должен находиться в пределах одной области. Если p - переменная типа P = POINTER TO T, то вызов предопределённой процедуры NEW (p) имеет следующий эффект (см. 10.2): переменная типа T выделяется в свободном хранилище памяти, а ссылка на неё присваивается p. Эта ссылка p имеет тип P, а ссылочная переменная p^ имеет тип T. Отказ распределения памяти под структуру приводит к тому, что p получает значение NIL. Каждой переменной-ссылку может быть присвоено значение NIL, которое вообще не указывает на какую-либо переменную.
-6.5 Процедурный тип
-Переменные процедурного типа T принимают процедуру (или NIL) в качестве значения. Если процедуре P присвоена переменная процедурного типа T, формальные параметры (типа) P должны быть такими же, как те, что указаны в формальных параметрах T. То же самое справедливо для типа результата в случае (См. 10.1). P не должен быть объявлен локальным для другой процедуры, и не может быть стандартной процедурой.
-	ПроцедурныйТип = PROCEDURE [ФормальныеПараметры].
+## 7. Объявление переменных
 
-1. Объявление переменных
 Объявления переменных служат для введения переменных и связывания их с именами, которые не должны повторяться в пределах данной области. Они также служат для связывания фиксированных типов данных с переменными.
 
 ОбъявлениеПеременной = СписокИмён":" тип.