Просмотр исходного кода

SVI Исправление ошибок, исправления

SVI 3 лет назад
Родитель
Сommit
f3ca576c1b
2 измененных файлов с 74 добавлено и 82 удалено
  1. 73 81
      README.md
  2. 1 1
      doc/concept_media.md

+ 73 - 81
README.md

@@ -13,7 +13,7 @@
   - [Оглавление](#оглавление)
   - [Оглавление](#оглавление)
   - [0. Введение](#0-введение)
   - [0. Введение](#0-введение)
   - [1. Синтаксис](#1-синтаксис)
   - [1. Синтаксис](#1-синтаксис)
-  - [2. Синтез сущностей](#2-синтез-сущностей)
+  - [2. Синтез символов](#2-синтез-символов)
   - [3. Ключевые символы](#3-ключевые-символы)
   - [3. Ключевые символы](#3-ключевые-символы)
   - [4. Объявления имён и область видимости](#4-объявления-имён-и-область-видимости)
   - [4. Объявления имён и область видимости](#4-объявления-имён-и-область-видимости)
   - [5. Объявление констант](#5-объявление-констант)
   - [5. Объявление констант](#5-объявление-констант)
@@ -45,7 +45,7 @@
 
 
 ## 0. Введение
 ## 0. Введение
 
 
-Идея создания языка **Оберон-У** (далее просто **Оберон**) родилась после переосмысления идей несоответствия современного ИТ и средств разработки. [Никлаус Вирт](https://ru.wikipedia.org/wiki/Вирт,_Никлаус) продвинулся в этом отношении дальше всех. и львиная доля идей в концепции **Оберон** является либо трансляцией этих идей, либо творческой компиляции их.
+Идея создания языка **Оберон-У** (далее просто **Оберон**) родилась после переосмысления идей несоответствия современного ИТ и средств разработки. [Никлаус Вирт](https://ru.wikipedia.org/wiki/Вирт,_Никлаус) продвинулся в этом отношении дальше всех и львиная доля идей в концепции **Оберон** является либо трансляцией этих идей, либо творческой компиляции их.
 
 
 **Оберон-У** — язык программирования общего назначения, который является развитием **Модулы-2** и модификацией **Оберон-7**.
 **Оберон-У** — язык программирования общего назначения, который является развитием **Модулы-2** и модификацией **Оберон-7**.
 
 
@@ -53,17 +53,17 @@
 
 
 Назначение этого документа в том, чтобы служить эталоном для программистов, разработчиков и авторов руководств. Если о чём-то не сказано, то обычно это ошибка.
 Назначение этого документа в том, чтобы служить эталоном для программистов, разработчиков и авторов руководств. Если о чём-то не сказано, то обычно это ошибка.
 
 
-Этот документ описывает язык как достаточный для реализации различного рода ПО: начиная от загрузчиков ОС, сами ОС системное и прикладное ПО.
+Этот документ описывает язык как достаточный для реализации различного рода ПО: начиная от загрузчиков ОС, сами ОС, системное и прикладное ПО.
 
 
 Чтобы лучше понимать идею создания языка рекомендуется ознакомиться с некоторыми [концепциями](./doc/concept_media.md) построения бесшовной системной среды.
 Чтобы лучше понимать идею создания языка рекомендуется ознакомиться с некоторыми [концепциями](./doc/concept_media.md) построения бесшовной системной среды.
 
 
 ## 1. Синтаксис
 ## 1. Синтаксис
 
 
-Для описания синтаксиса используется диалект расширенной формы Бэкуса—Наура (`РБНФ`) -- НШ [краткая справка](./doc/notation.md). Литера вопроса  `?`  означают необязательность записанного внутри них выражения, а двоеточие  `..` означают его повторение (возможно 0 раз).
+Для описания синтаксиса используется диалект расширенной формы Бэкуса—Наура (`РБНФ`) -- **НШ** (здесь [краткая справка](./doc/notation.md)). Литера вопроса  `?`  означают необязательность записанного внутри них выражения, а двоеточие  `..` означают его повторение (минимум 1 раз).
 
 
 Законченный текст на языке программирования **Оберон** называется *программа*.
 Законченный текст на языке программирования **Оберон** называется *программа*.
 
 
-`Программа` включает как минимум один *модуль*. В `программе` как правило `модулей` как правило больше одного, количество модулей в программе не ограничено. Каждый модуль должен обладать правильной структурой:
+`Программа` включает как минимум один *модуль*. В `программе` как правило `модулей` больше одного, количество модулей в программе не ограничено. Каждый модуль должен обладать правильной структурой:
 
 
 `Модуль` имеет строго заданную структуру:
 `Модуль` имеет строго заданную структуру:
 
 
@@ -86,20 +86,22 @@
 
 
 Все эти `символы` входят в группу `словарь программы`; все символы состоят из `литер`. (Обратите внимание на разницу между `символами` и `литерами`). `Словарь символов` кроме самих `символов` содержит связи `символов` и все их необходимые `атрибуты`.
 Все эти `символы` входят в группу `словарь программы`; все символы состоят из `литер`. (Обратите внимание на разницу между `символами` и `литерами`). `Словарь символов` кроме самих `символов` содержит связи `символов` и все их необходимые `атрибуты`.
 
 
-`Символы` проритетно обозначаются русскими словами выражающими их функциональное назначение. Здесь представлены английские эквиваленты. `Символы` могут быть на любом языке, ограничений нет. `Символы` словаря языка программирования обозначаются литеральными строками в одиночных кавычках.
+`Символы` проритетно обозначаются русскими словами выражающими их функциональное назначение. Здесь также представлены английские эквиваленты. `Символы` могут быть на любом языке, ограничений нет.
 
 
-## 2. Синтез сущностей
+## 2. Синтез символов
 
 
-В группу `литеры` входят несколько классов:
+Для составоения символов используются литеры. В группу `литеры` входят несколько подгрупп:
 
 
 - `Буква`;
 - `Буква`;
 - `Цифра`;
 - `Цифра`;
+- `Разделитель`;
+- `СлужебнаяЛитера`;
 
 
-Для конструирования `пользовательских символов` предусматривает использование следующих правил. Литеры `Пробел`, `табуляция`,`переносы строк` не должны встречаться внутри `пользовательских символов` (кроме `комментариев`). Они игнорируются только в `литеральных строках`. Заглавные и строчные буквы считаются различными.
+Для конструирования `пользовательских символов` предусматривается использование следующих правил. Литеры `Пробел`, `Табуляция`,`ПереносСтроки` не должны встречаться внутри `пользовательских символов` (кроме `комментариев`). Они игнорируются только в `литеральных строках`. Заглавные и строчные буквы считаются различными.
 
 
 `Имя` — тип `символов` в виде последовательности `букв` и `цифр`. Первая `литера` *должна* быть `буквой`.
 `Имя` — тип `символов` в виде последовательности `букв` и `цифр`. Первая `литера` *должна* быть `буквой`.
 
 
-> Имя = Буква + (Буква.. | Цифра..)?;
+> Имя = Буква + (Буква..? | Цифра..?);
 
 
 Примеры:
 Примеры:
 
 
@@ -110,12 +112,12 @@
 - `ЧислоЦелое`;
 - `ЧислоЦелое`;
 - `ЧислоДробное`.
 - `ЧислоДробное`.
 
 
-`ЧислоЦелое` являются последовательностью `Цифра` и могут быть продолжены `литерой` суффикса `H` слитно за числом.
+`ЧислоЦелое` являются последовательностью `Цифра` и могут быть продолжены `литерой` суффикса `H` слитно в конце числа.
 
 
 - Без суффикса -- представление десятичное;
 - Без суффикса -- представление десятичное;
-- Суффикс `H` обозначает шестнадцатеричное представление.
+- Суффикс `H` -- представление шестнадцатеричное.
 
 
-`ЧислоДробное` всегда содержит десятичную точку. Допускается чтобы оно было представлено целым десятичным числом. Литера `E` означает «умножить на десять в степени».
+`ЧислоДробное` всегда содержит десятичную точку. Допускается чтобы оно было представлено целым десятичным числом. Литера `E` означает «умножить на десять в степени», после чего следует сама степень.
 
 
 ```bash
 ```bash
 Цифра   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
 Цифра   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
@@ -123,7 +125,7 @@
 
 
 ЧислоЗнак = "+"? | "-"?;
 ЧислоЗнак = "+"? | "-"?;
 ЧислоЦелое   = ЧислоЗнак? Цифра | Цифра..? ЦифраШестн? + "H"?;
 ЧислоЦелое   = ЧислоЗнак? Цифра | Цифра..? ЦифраШестн? + "H"?;
-ЧислоДробное = ЧислоЗнак? + Цифра | Цифра..? + "." + Цифра..Порядок?;
+ЧислоДробное = ЧислоЗнак? Цифра | Цифра..? + "." + Цифра..Порядок?;
 Порядок = "E" ЧислоЗнак? Цифра | Цифра..?;
 Порядок = "E" ЧислоЗнак? Цифра | Цифра..?;
 
 
 Число   = ЧислоЦелое | ЧислоДробное.
 Число   = ЧислоЦелое | ЧислоДробное.
@@ -135,7 +137,8 @@
 
 
 `Строковые литералы` — последовательность `литер`, заключенных в одиночные кавычки  `'`. Ограничивающая кавычка не должна встречаться внутри  литерала, но допускается:
 `Строковые литералы` — последовательность `литер`, заключенных в одиночные кавычки  `'`. Ограничивающая кавычка не должна встречаться внутри  литерала, но допускается:
 
 
-- внутри литерала может быть кавычка с экраном, также непечатаемые символы должны быть экранированы даун-слэшем.
+- внутри литерала может быть кавычка с экраном;
+- также непечатаемые символы должны быть экранированы даун-слэшем.
 
 
 Число литер в литерале называется длиной строкового литерала.
 Число литер в литерале называется длиной строкового литерала.
 
 
@@ -162,7 +165,7 @@
 
 
 `Ключевые символы` являются специальной группой и они *не могут* использоваться в качестве `пользовательских символов` ни в какой части программы.
 `Ключевые символы` являются специальной группой и они *не могут* использоваться в качестве `пользовательских символов` ни в какой части программы.
 
 
-Группа символов `комментарии` могут быть вставлены между любыми двумя `символами` в `программе`. Они являются произвольными последовательностями литер, которые открываются `/*`, `(*` и закрываются с помощью `*/`, `*)`. Однострочные `комментарии` начинаются на `//` и действуют до конца строки. Комментарии *не влияют* на смысл программы, но если это опции компилятора -- могут направлять компилятор на выбор нужных модулей. Комментарии могут быть вложенными.
+Группа символов `комментарии` могут быть вставлены между любыми двумя `символами` в `программе`. Они являются произвольными последовательностями литер, которые открываются `/*` и закрываются с помощью `*/`. Однострочные `комментарии` начинаются на `//` и действуют до конца строки. Комментарии *не влияют* на смысл программы, но если это опции компилятора -- могут направлять компилятор на выбор нужных модулей. Комментарии могут быть вложенными.
 
 
 `Разделитель` включает в себя:
 `Разделитель` включает в себя:
 
 
@@ -215,33 +218,21 @@ flowchart TD
 | Символ  | Комментарий                                          |
 | Символ  | Комментарий                                          |
 | ------- | ---------------------------------------------------- |
 | ------- | ---------------------------------------------------- |
 | +       | Сложение                                             |
 | +       | Сложение                                             |
-| ++      | Инкремент операнда                                   |
-| +=      | Сложение операндов с присвоением операнду слева      |
-| =       | Присвоение                                           |
 | -       | Минус                                                |
 | -       | Минус                                                |
-| --      | Декремент                                            |
-| -=      | Вычитание операндов, с присвоением операнду слева    |
-| ^       | Исключающее или                                      |
-| ^=      | Исключающее или с присвоением операнды слева         |
 | *       | Умножение                                            |
 | *       | Умножение                                            |
-| **      | Возведение в степень                                 |
-| **=     | Возведение в степень с присвоением операнда слева    |
 | /       | Деление                                              |
 | /       | Деление                                              |
-| /=      | Деление с присвоением операнду слева                 |
+| =       | Присвоение                                           |
 | <       | Меньше                                               |
 | <       | Меньше                                               |
+| <=      | Меньше или равно                                     |
 | >       | Больше                                               |
 | >       | Больше                                               |
-| =       | Присвоить                                            |
+| >=      | Больше или равно                                     |
 | //      | Линейный комментарий                                 |
 | //      | Линейный комментарий                                 |
 | /*      | Начало многострочного комментария                    |
 | /*      | Начало многострочного комментария                    |
 | */      | Конец многострочного комментария                     |
 | */      | Конец многострочного комментария                     |
-| (*      | Начало многострочного комментария                    |
-| *)      | Конец многострочного комментария                     |
 | .       | Точка                                                |
 | .       | Точка                                                |
-| <=      | Меньше или равно                                     |
 | ,       | Запятая                                              |
 | ,       | Запятая                                              |
-| >=      | Больше или равно                                     |
 | ;       | Разделитель выражений                                |
 | ;       | Разделитель выражений                                |
-| ..      | Перечисление                                         |
+| ..      | Конструктор диапазона                                |
 | :       | Определить тип переменной                            |
 | :       | Определить тип переменной                            |
 | (       | Открывающая круглая скобка (выражение)               |
 | (       | Открывающая круглая скобка (выражение)               |
 | )       | Закрывающая круглая скобка (выражение)               |
 | )       | Закрывающая круглая скобка (выражение)               |
@@ -253,11 +244,6 @@ flowchart TD
 | импорт  | IMPORT Импорт модуля                                 |
 | импорт  | IMPORT Импорт модуля                                 |
 | конст   | CONST Объявление константы                           |
 | конст   | CONST Объявление константы                           |
 | тип     | TYPE Объявление типа                                 |
 | тип     | TYPE Объявление типа                                 |
-| структ  | STRUCT Объявление структуры                          |
-| сущ     | VAR Объявление переменной                            |
-| фн      | FN Объявление функции                                |
-| &       | & Создание объекта                                   |
-| есть    | IS Проверка типа                                     |
 | бул     | BOOL Белвый тип                                      |
 | бул     | BOOL Белвый тип                                      |
 | да      | TRUE Булево значение                                 |
 | да      | TRUE Булево значение                                 |
 | нет     | FALSE Отрицание логического значения                 |
 | нет     | FALSE Отрицание логического значения                 |
@@ -265,16 +251,18 @@ flowchart TD
 | целое   | INT Дробное число                                    |
 | целое   | INT Дробное число                                    |
 | вещ     | REAL Дробное число                                   |
 | вещ     | REAL Дробное число                                   |
 | массив  | ARRAY Массив элементов                               |
 | массив  | ARRAY Массив элементов                               |
-| провер  | SWITCH Проверка на выбор                             |
+| структ  | STRUCT Объявление структуры                          |
+| симв    | VAR Объявление переменной                            |
 | мут     | MUT Признак изменяемости                             |
 | мут     | MUT Признак изменяемости                             |
 | пуб     | PUB Признак экспорта                                 |
 | пуб     | PUB Признак экспорта                                 |
+| фн      | FN Объявление функции                                |
+| &       | & Создание объекта                                   |
+| есть    | IS Проверка типа                                     |
+| провер  | SWITCH Проверка на выбор                             |
+| ветка   | CASE ветка выбора                                    |
 | вернуть | RETURN Возврат из функции                            |
 | вернуть | RETURN Возврат из функции                            |
-| если    | IF Начало условия                                    |
-| аесли   | IF Альтернативноее, если предыдущее не сработало     |
-| мод     | MOD Модуль от целочисленного деления                 |
-| див     | DIV Остаток от целочисленного деления                |
 | нич     | NIL Пустое состояние объекта                         |
 | нич     | NIL Пустое состояние объекта                         |
-| пока    | WHILE Условие проверки продолжения цикла на входе    |
+| петля   | LOOP Безусловный цикл                                |
 | дальше  | NEXT Продолжить цикл с пропуском следующих выражений |
 | дальше  | NEXT Продолжить цикл с пропуском следующих выражений |
 | стоп    | BREAK Прервать цикл с пропуском следующих выражений  |
 | стоп    | BREAK Прервать цикл с пропуском следующих выражений  |
 | или     | OR Логическое или                                    |
 | или     | OR Логическое или                                    |
@@ -283,16 +271,18 @@ flowchart TD
 
 
 ## 4. Объявления имён и область видимости
 ## 4. Объявления имён и область видимости
 
 
-Каждое встречающееся в программе `имя` должно быть объявлено заранее, если это `ключевой символ` (например, `тип` или `сущ`). `Имя` также служит для задания опредёленных постоянных свойств сущности, например, является ли оно константой, определением типа, переменной или функцией.
+Каждое встречающееся в программе `имя` должно быть объявлено заранее, за исключением `ключевых символов` (например, `тип` или `симв`). `Имя` также служит для задания опредёленных постоянных свойств сущности, например, является ли оно константой, структурой, переменной, или функцией. Также `имена` присваиваются типам.
 
 
-`Имя` используется для ссылки на соответствующую `сущность`. Это возможно в тех частях программы, которые находятся в пределах `области видимости`. `Имя` не может обозначать больше чем *одну* `сущность` внутри одной области видимости. `Область видимости` распространяется текстуально от точки объявления до конца блока (модуля, функции или области видимости), к которому принадлежит `имя` и, следовательно -- по отношению к которому, объект является локальным.
+`Имя` используется для ссылки на соответствующий `символ`. Это возможно в тех частях программы, которые находятся в пределах `области видимости`. `Имя` не может обозначать больше чем *одну* `сущность` внутри одной области видимости. `Область видимости` распространяется текстуально от точки объявления до конца блока (модуля, функции или области видимости), к которому принадлежит `имя` и, следовательно -- по отношению к которому, объект является локальным. `Область видимости` обозначается двумя фигурными скобками `{..}`.
 
 
-`Имя`, объявленное в блоке модуля, может сопровождаться *меткой экспорта* перед именем `пуб` , чтобы пояснить, что оно экспортируется из определяющего модуля с доступом *только на чтение*. В этом случае имя может быть использовано и в других модулях, если эти модули импортируют объявляющий модуль.
+`Имя`, объявленное в блоке модуля, может сопровождаться *меткой экспорта* перед именем `пуб` , чтобы пояснить, что оно экспортируется из определяющего модуля с доступом *только на чтение*. В этом случае имя может быть использовано и в других модулях, если эти модули импортируют объявляющий модуль. Если перед именем установлена метка `мут` -- символ, на который ссылается имя является *изменяемым*, но только в пределах модуля. Если символ является неизменяемым, значение ему можно задать только во время конструирования.
 
 
 `Имя` символа предваряется другим именем (префиксом), показывающим его модуль (см. ниже). Модуль и имя разделены точкой и вместе называются `уточнённым именем` (или `квалифицированным именем`).
 `Имя` символа предваряется другим именем (префиксом), показывающим его модуль (см. ниже). Модуль и имя разделены точкой и вместе называются `уточнённым именем` (или `квалифицированным именем`).
 
 
 > ИмяКвал = имя + "." + имя;
 > ИмяКвал = имя + "." + имя;
-> ИмяЭкспорт = "пуб" + имя ;
+> ИмяЭкспорт = "пуб" + имя;
+> ИмяИзмен = "мут + имя;
+> ИмяСимвол = ИмяЭкспорт? ИмяИзмен? имя;
 
 
 Следующие имена являются стандартными (группа `ключевые символы`); их значение определено ниже:
 Следующие имена являются стандартными (группа `ключевые символы`); их значение определено ниже:
 
 
@@ -325,7 +315,7 @@ UNPK
 ОбъявлениеКонстанты  = ИмяОпр + "=" + КонстантноеВыражение;
 ОбъявлениеКонстанты  = ИмяОпр + "=" + КонстантноеВыражение;
 ```
 ```
 
 
-Константное выражение может быть вычислено по его тексту на этапе компиляции программы. Его операнды — константы. Примеры объявлений констант:
+Константное выражение может быть вычислено по его тексту на этапе компиляции программы. Его операнды — константы. Значение константы не изменяется никогда. Примеры объявлений констант:
 
 
 ```c
 ```c
 конст {
 конст {
@@ -338,7 +328,7 @@ UNPK
 
 
 ## 6. Объявление типов
 ## 6. Объявление типов
 
 
-`Тип данных` задаёт множество специфичных значений, которые переменные этого типа могут принимать, а также множетво операторов и методов, которые к ним применимы. Объявление типа используется для связывания имени типа с определением типа. Типы определяют структуру переменных этого типа и, косвенно, операторы, которые применимы к компонентам самих типов.
+`Тип` задаёт множество специфичных значений, которые переменные этого типа могут принимать, а также множество операторов и методов, которые к ним применимы. Объявление типа используется для связывания имени типа с определением этого типа. Типы определяют структуры переменных этого типа и, через их специфику -- операторы, которые применимы к частям самих типов.
 
 
 Типы данных деляется на две группы:
 Типы данных деляется на две группы:
 
 
@@ -350,38 +340,33 @@ UNPK
 - линейный типы;
 - линейный типы;
 - векторные типы.
 - векторные типы.
 
 
-После присвоения литеральная строка представлена массивом байтов.
-
-```bash
-ОбъявлениеТипа = ИмяОпр + "=" + Тип;
-Тип = ИмяКвал | ТипСущность | ТипМассив | ТипСтруктура | ТипФункция;
-```
-
 Примеры:
 Примеры:
 
 
 ```c
 ```c
 тип {
 тип {
     Таблица = массив[255]вещ,
     Таблица = массив[255]вещ,
-    Дерево = Узел,
 
 
     структ Узел {
     структ Узел {
         ключ: целое,
         ключ: целое,
         Левый, Правый: Дерево,
         Левый, Правый: Дерево,
     }
     }
 
 
-    ДеревоСередина = УзелСередина,
+    Дерево = Узел,
 
 
-    структ УзелСередина (Узел){
+    структ УзелСередина (Дерево){
         Имя: массив[32]байт,
         Имя: массив[32]байт,
-        Подузел: Дерево,
+        Подузел: Узел,
     }
     }
+
+    ДеревоСередина = УзелСередина,
+
     Функция = ФН (x: целое): целое,
     Функция = ФН (x: целое): целое,
 }
 }
 ```
 ```
 
 
 ### 6.1 Встроенные линейные типы
 ### 6.1 Встроенные линейные типы
 
 
-Встроенные операторы и встроенные функции определены ниже. Имена встроенных типов следующие:
+Встроенные линейные типы представлены ниже:
 
 
 Встроенные линейные типы:
 Встроенные линейные типы:
 
 
@@ -404,7 +389,7 @@ UNPK
 Массив - это структура, состоящая из фиксированного количества элементов, тип элементов одинаковый для всех элементов конкретного типа массива. Количество элементов массива называется его длиной. Элементы массива обозначаются индексами, которые являются целыми числами от 0 до (длины - 1). Массив может иметь несколько размерностей.
 Массив - это структура, состоящая из фиксированного количества элементов, тип элементов одинаковый для всех элементов конкретного типа массива. Количество элементов массива называется его длиной. Элементы массива обозначаются индексами, которые являются целыми числами от 0 до (длины - 1). Массив может иметь несколько размерностей.
 
 
 ```bash
 ```bash
-ТипМассива = массив[длина, длина..?]тип_элемента;
+ТипМассива = массив[длина, длина..?]ТипИмя;
 длина = Выражение | КонстантноеВыражение;
 длина = Выражение | КонстантноеВыражение;
 ```
 ```
 
 
@@ -415,25 +400,32 @@ UNPK
 Примеры типов массивов:
 Примеры типов массивов:
 
 
 ```c
 ```c
-сущ {
+симв {
     listUser = массив[NN]целое,
     listUser = массив[NN]целое,
-    moments = массив[10, 20]вещ,
+    moments = массив[10,20]вещ,
 }
 }
 ```
 ```
 
 
-`Литеральная строка` при создании представляет собой набор байт в виде букв в двойных кавычках. После привоения фактически -- это массив байт.
+После присвоения литеральная строка представлена массивом байтов.
+
+```bash
+ОбъявлениеТипа = ИмяТип + "=" + СТРУКТ (ИмяТип?) { Поле..? };
+Тип = ИмяКвал | ТипСущность | ТипМассив | ТипСтруктура | ТипФункция;
+```
+
+`Литеральная строка` при создании представляет собой набор байт в виде букв в одинарных кавычках. После привоения фактически -- это массив байт.
 
 
 Пример:
 Пример:
 
 
 ```bash
 ```bash
-сущ {
+симв {
     strHello = `Привет`,
     strHello = `Привет`,
 }
 }
 ```
 ```
 
 
 ### 6.3 Структура
 ### 6.3 Структура
 
 
-Сущность `структура`, состоящая из фиксированного количества элементов возможно разных типов. Типа структуры при объявлении требует описание типа для каждого элемента этого типа, которое называется полем. Тип и имя поля првязывает является неотъемлемой частью структуры. Область действия этих имён полей - само определение структуры, но они также видны как неотъемлемые части экземпляра структуры в форме "через точку", которая ссылается на элементы самого экземпляра структуры. Структуры не помеченные как 'пуб' -- не экспортируются.
+Символ `структура`, состоит из фиксированного количества элементов возможно разных типов. Тип структуры при объявлении требует описание типа для каждого элемента этого типа, которое называется `полем`. Тип и имя `поля` является неотъемлемой частью структуры. Область действия этих имён полей - само определение структуры, но они также видны как неотъемлемые части экземпляра структуры в форме "через точку", которая ссылается на элементы самого экземпляра структуры. Структуры не помеченные как 'пуб' -- не экспортируются.
 Структуры не помеченные как 'мут' -- нельзя изменить после создания. Тоже самое относится и к каждому полю структуры.
 Структуры не помеченные как 'мут' -- нельзя изменить после создания. Тоже самое относится и к каждому полю структуры.
 
 
 ```bash
 ```bash
@@ -487,7 +479,7 @@ UNPK
     }
     }
 }
 }
 
 
-сущ {
+симв {
     i, j, k: целое,
     i, j, k: целое,
     x, y: вещ,
     x, y: вещ,
     p, q: бул,
     p, q: бул,
@@ -840,7 +832,7 @@ v := beg;
 ИмяФункции = фн ИмяФункции(ФормальныеПараметры..)Результат.
 ИмяФункции = фн ИмяФункции(ФормальныеПараметры..)Результат.
 ТелоФункции = ПоследОбъявлений{ПоследПредписаний, вернуть Выражение}.
 ТелоФункции = ПоследОбъявлений{ПоследПредписаний, вернуть Выражение}.
 ПоследОбъявлений = [конст {ОбъявлениеКонстант ";"}]
 ПоследОбъявлений = [конст {ОбъявлениеКонстант ";"}]
-[тип {ОбъявлениеТипов ";"}] [сущ {ОбъявлениеПеременных ";"}]
+[тип {ОбъявлениеТипов ";"}] [симв {ОбъявлениеПеременных ";"}]
 {ОбъявлениеФункции ";"}.
 {ОбъявлениеФункции ";"}.
 ```
 ```
 
 
@@ -848,7 +840,7 @@ v := beg;
 
 
 Формальные параметры (или просто параметры) -- это имена, которые обозначают фактические параметры (аргументы), указанные в вызове функции. Соответствие между аргументами и параметрами устанавливается при вызове функции. Переменная соответствует фактическому параметру, который является переменной, и она обозначает эту переменную. Значение соответствует фактическому параметру, который является выражением, и он обозначает его значение, которое невозможно изменить при передаче. Однако, если значение имеет базовый тип, он представляет собой локальную переменную, которой первоначально присваивается значение фактического выражения.
 Формальные параметры (или просто параметры) -- это имена, которые обозначают фактические параметры (аргументы), указанные в вызове функции. Соответствие между аргументами и параметрами устанавливается при вызове функции. Переменная соответствует фактическому параметру, который является переменной, и она обозначает эту переменную. Значение соответствует фактическому параметру, который является выражением, и он обозначает его значение, которое невозможно изменить при передаче. Однако, если значение имеет базовый тип, он представляет собой локальную переменную, которой первоначально присваивается значение фактического выражения.
 
 
-Тип параметра указывается в списке формальных параметров: переменные обозначаются ключевым словом `сущ`, а  значения не имеют такого префикса.
+Тип параметра указывается в списке формальных параметров: переменные обозначаются ключевым словом `симв`, а  значения не имеют такого префикса.
 
 
 Функция-процедура без параметров должна иметь пустой список параметров. Она должна быть вызвана через имя функции, список фактических параметров которой также пуст.
 Функция-процедура без параметров должна иметь пустой список параметров. Она должна быть вызвана через имя функции, список фактических параметров которой также пуст.
 
 
@@ -856,7 +848,7 @@ v := beg;
 
 
 ```bash
 ```bash
 Формальныйпараметр = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
 Формальныйпараметр = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
-Секция_FP = [сущ] имя{"," имя} ":" ФормальныйПараметр.
+Секция_FP = [симв] имя{"," имя} ":" ФормальныйПараметр.
 ФормальныйПараметр = массив[nn]Тип..
 ФормальныйПараметр = массив[nn]Тип..
 ```
 ```
 
 
@@ -867,9 +859,9 @@ v := beg;
 Примеры объявлений функций:
 Примеры объявлений функций:
 
 
 ```c
 ```c
-фн Целое_Читать(сущ x: `целое`){
-    сущ i : целое;
-    сущ ch: байт;
+фн Целое_Читать(симв x: `целое`){
+    симв i : целое;
+    симв ch: байт;
     i = 0;
     i = 0;
     Читать(ch);
     Читать(ch);
     пока ("0" <= ch) и (ch <= "9") {
     пока ("0" <= ch) и (ch <= "9") {
@@ -880,8 +872,8 @@ v := beg;
 }
 }
 
 
 фн Целое_Писать(x: целое){ // 0 <= x < 10^5
 фн Целое_Писать(x: целое){ // 0 <= x < 10^5
-сущ i: целое;
-сущ buf: массив[5]целое;
+симв i: целое;
+симв buf: массив[5]целое;
 i = 0;
 i = 0;
 пока i==0{
 пока i==0{
     buf[i] = x мод 10;
     buf[i] = x мод 10;
@@ -892,7 +884,7 @@ i = 0;
 }
 }
 
 
 фн лог2(x: целое):целое{
 фн лог2(x: целое):целое{
-    сущ y целое = 0; // assume x>0
+    симв y целое = 0; // assume x>0
     WHILE x > 1 {
     WHILE x > 1 {
         x = x див 2;
         x = x див 2;
         y++;
         y++;
@@ -975,7 +967,7 @@ i = 0;
     Oberon,
     Oberon,
 }
 }
 
 
-сущ {
+симв {
     W: Текст.Writer,
     W: Текст.Writer,
 }
 }
 
 
@@ -984,7 +976,7 @@ i = 0;
 }
 }
 
 
 фн WriteInt*(x, n: `целое`){
 фн WriteInt*(x, n: `целое`){
-    сущ {
+    симв {
         i: целое = 0,
         i: целое = 0,
         a: массив[16]BYTE,
         a: массив[16]BYTE,
     }
     }
@@ -1183,10 +1175,10 @@ DO ПоследПредписаний END.
 
 
 ПоследОпределений = [конст {ОпрКонстант ";"}]
 ПоследОпределений = [конст {ОпрКонстант ";"}]
 [TYPE {ОпрТипа ";"}]
 [TYPE {ОпрТипа ";"}]
-[сущ {ОпрПеременной ";"}]
+[симв {ОпрПеременной ";"}]
 {ОпрПроцедуры ";"}.
 {ОпрПроцедуры ";"}.
 ФормальныеПараметры = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
 ФормальныеПараметры = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
-Секция_FP 	= [сущ] имя {"," имя } ":" ФормальныйТип.
+Секция_FP 	= [симв] имя {"," имя } ":" ФормальныйТип.
 ФормальныйТип = {массив OF} квалификатор.
 ФормальныйТип = {массив OF} квалификатор.
 
 
 модуль	= MODULE имя ";" [СписокИмпорта] ПоследОпределений
 модуль	= MODULE имя ";" [СписокИмпорта] ПоследОпределений

+ 1 - 1
doc/concept_media.md

@@ -21,7 +21,7 @@ rax += eax // Тоже самое, выраженное средствами я
 
 
 _Форма одна, суть разная_.
 _Форма одна, суть разная_.
 
 
-Такая протечка высокоуровневых абстракций в языках высокого уровня имеет под собой вполне определённую причину: язык был сконструирован, как производный продукт от процессора. Это и называется **первородный грех языка**. И хорошо ,если язык был _сконструирован_. Очень часто язык _сочинён_.
+Такая протечка высокоуровневых абстракций в языках высокого уровня имеет под собой вполне определённую причину: язык был сконструирован, как производный продукт от процессора. Это и называется **первородный грех языка**. И хорошо, если язык был _сконструирован_. Очень часто язык _сочинён_.
 
 
 ## Подвал
 ## Подвал