فهرست منبع

SVI Исправления

SVI 2 سال پیش
والد
کامیت
2c65e0f924
1فایلهای تغییر یافته به همراه117 افزوده شده و 115 حذف شده
  1. 117 115
      README.md

+ 117 - 115
README.md

@@ -50,7 +50,7 @@
 
 **Оберон-У** — язык программирования общего назначения, который является развитием **Модулы-2** и модификацией **Оберон-7**.
 
-Данная вариация по большей части не имеет принципиально новых концепций, новые части отдельно описаны в соответствующих разделах. Концепция позволяет максимально изолировать высокоуровневые средства от низкоуровневых.
+Данная вариация по большей части не имеет принципиально новых концепций, новые части отдельно описаны в соответствующих разделах. Концепция позволяет максимально изолировать абстрактные средства от аппаратных (опасных).
 
 Назначение этого документа в том, чтобы служить эталоном для программистов, разработчиков и авторов руководств. Если о чём-то не сказано, то обычно это ошибка.
 
@@ -67,101 +67,106 @@
 `Модуль` имеет строго заданную структуру:
 
 ```bash
-МОДУЛЬ Старт
+модуль Старт;
 
-// Импорт, Типы, Переменные, Функции
+Импорты?, Типы?, Константы?, Переменные?, Функции?;
 
 {
-    // Выражения при загрузке модуля
+    Выражения?; // При загрузке модуля
 }
 ```
 
 До начала модуля и после окончания модуля может быть любой текст.
 
-`Модуль` может содержать бесконечное множество правильно сформированных `предложений`, в соответствии с синтаксисом языка. Набор предложений **Оберон** ограничивается  объявлением модуля. Каждое предложение представляет собой конечную последовательность *символов* из *конечного словаря*. Словарь **Оберон** состоит из `сущностей`:
+`Модуль` может содержать бесконечное множество правильно сформированных `предложений`, в соответствии с синтаксисом языка (продукциями). Набор предложений **Оберон** ограничивается  объявлением модуля. Количество предложений в модуле не ограничено. Каждое предложение представляет собой конечную последовательность *символов* из *словаря программы*. Словарь программы **Оберон** состоит из `символов`:
 
 - *пользовательский символ*;
 - *встроенный символ*;
 
-Все эти `сущности` входят в группу `дерево символов` и состоят из `литер`. (Обратите внимание на разницу между `символами` и `литерами`). `Дерево символов` кроме самих `сущностей` содержит связи `сущностей` и все их необходимые `атрибуты`. `Листья` дерева не могут видеть другие `листья`, находящиеся ниже по веткам или в соседних ветках. Также есть ряд отдельных случаев описанных ниже.
+Все эти `символы` входят в группу `словарь программы`; все символы состоят из `литер`. (Обратите внимание на разницу между `символами` и `литерами`). `Словарь символов` кроме самих `символов` содержит связи `символов` и все их необходимые `атрибуты`.
 
-Синтаксические сущности (`символы`) обозначаются русскими словами (английскими эквивалентами), выражающими их функциональное назначение. `Символы` могут быть на любом языке, ограничений нет. `Символы` словаря языка программирования обозначаются литеральными строками, заключенными в кавычки или литерами.
+`Символы` проритетно обозначаются русскими словами выражающими их функциональное назначение. Здесь представлены английские эквиваленты. `Символы` могут быть на любом языке, ограничений нет. `Символы` словаря языка программирования обозначаются литеральными строками в одиночных кавычках.
 
 ## 2. Синтез сущностей
 
 В группу `литеры` входят несколько классов:
 
-- `буква`;
-- `цифра`;
+- `Буква`;
+- `Цифра`;
 
-Для составления `пользовательских символов` предусматривается использование следующих правил. `Пробелы` и `переносы строк` не должны встречаться внутри `пользовательских символов` (исключая `комментарии`). Они игнорируются, если они не существенны для отделения двух последовательных `символов`. Заглавные и строчные буквы считаются различными.
+Для конструирования `пользовательских символов` предусматривает использование следующих правил. Литеры `Пробел`, `табуляция`,`переносы строк` не должны встречаться внутри `пользовательских символов` (кроме `комментариев`). Они игнорируются только в `литеральных строках`. Заглавные и строчные буквы считаются различными.
 
-`Имена` — тип сущностей в виде последовательности `букв` и `цифр`. Первая `литера` *должна* быть `буквой`.
+`Имя` — тип `символов` в виде последовательности `букв` и `цифр`. Первая `литера` *должна* быть `буквой`.
 
-> имя = буква + (буква?.. | цифра?..);
+> Имя = Буква + (Буква.. | Цифра..)?;
 
 Примеры:
 
 > x Сканер Оберон Символ_Получить перваяЛитера name2
 
-В группу `числа` входят символы:
+В группу `Число` входят символы:
 
-- `целые числа`;
-- `дробные числа`.
+- `ЧислоЦелое`;
+- `ЧислоДробное`.
 
-`Целые числа` являются последовательностью `цифр` и могут быть продолжены `литерой` суффикса слитно за числом. Если суффикса нет, то представление десятичное. Суффикс `H` обозначает шестнадцатеричное представление.
+`ЧислоЦелое` являются последовательностью `Цифра` и могут быть продолжены `литерой` суффикса `H` слитно за числом.
 
-`Дробное число` всегда содержит десятичную точку. Допускается чтобы оно было представлено целым десятичным числом. Литера `E` означает «умножить на десять в степени».
+- Без суффикса -- представление десятичное;
+- Суффикс `H` обозначает шестнадцатеричное представление.
+
+`ЧислоДробное` всегда содержит десятичную точку. Допускается чтобы оно было представлено целым десятичным числом. Литера `E` означает «умножить на десять в степени».
 
 ```bash
-цифра   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
-шестнЦифра = цифра | "A" | "B" | "C" | "D" | "E" | "F";
+Цифра   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
+ЦифраШестн = Цифра | "A" | "B" | "C" | "D" | "E" | "F";
 
-целое   = знак? цифра | цифра..? шестнЦифра? + H?;
-дробное = знак}? + цифра | цифра..? + "." + цифра Порядок?;
-Порядок = "E" ("+" | "-")? цифра | цифра..?;
+ЧислоЗнак = "+"? | "-"?;
+ЧислоЦелое   = ЧислоЗнак? Цифра | Цифра..? ЦифраШестн? + "H"?;
+ЧислоДробное = ЧислоЗнак? + Цифра | Цифра..? + "." + Цифра..Порядок?;
+Порядок = "E" ЧислоЗнак? Цифра | Цифра..?;
 
-число   = целое | дробное.
+Число   = ЧислоЦелое | ЧислоДробное.
 ```
 
 Примеры:
 
 > 1987    100H = 256    12.3    4.567E8 = 456700000
 
-`Строковые литералы` — последовательность `литер`, заключенных в двойные кавычки  `"`. Ограничивающая кавычка не должна встречаться внутри  литерала, но допускается:
+`Строковые литералы` — последовательность `литер`, заключенных в одиночные кавычки  `'`. Ограничивающая кавычка не должна встречаться внутри  литерала, но допускается:
 
-- литерал из одной литеры может быть определён порядковым номером литеры в шестнадцатеричной нотации с последующей литерой "X";
 - внутри литерала может быть кавычка с экраном, также непечатаемые символы должны быть экранированы даун-слэшем.
 
 Число литер в литерале называется длиной строкового литерала.
 
 ```bash
-строка = литера..? | цифра? шестнЦифра? + "X"?;
+Строка = "'" + (Литера..? | Цифра..?)? + "'";
 ```
 
 Примеры:
 
-> "ОБЕРОН"    "Don't worry!"   22X  "Hey, \"world\"!"
+> 'ОБЕРОН'    'Don\'t worry!'    'Hey, "world"!'
 
 Все `символы` делятся на две группы:
 
-- `встроенные символы` (предопределены заранее);
+- `встроенные символы` (использованы в языке);
 - `пользовательские символы` (определяются пользователем).
 
 В группу `встроенных символов` входят:
 
 - `ключевой символ` (зарезервированные слова);
-- `предписание` (сложные сущности, управляющие потоком программы);
-- `оператор` (простые сущности ,управляющие действиями);
-- `разделитель` (простые сущности, разделяющие другие сущности).
+- `предписание` (составные символы, управляющие потоком программы);
+- `оператор` (простые символы, управляющие операциями);
+- `разделитель` (простые символы, разделяющие другие символы);
+- `комментарий` (поясняющий текст, возможно опции компилятора).
 
 `Ключевые символы` являются специальной группой и они *не могут* использоваться в качестве `пользовательских символов` ни в какой части программы.
 
-Группа символов `комментарии` могут быть вставлены между любыми двумя `символами` в `программе`. Они являются произвольными последовательностями литер, которые открываются `/*`, `(*` и закрываются с помощью `*/`, `*)`. Однострочные `комментарии`` начинаются на `//` и действуют до конца строки. Комментарии *не влияют* на смысл программы. Они могут быть вложенными.
+Группа символов `комментарии` могут быть вставлены между любыми двумя `символами` в `программе`. Они являются произвольными последовательностями литер, которые открываются `/*`, `(*` и закрываются с помощью `*/`, `*)`. Однострочные `комментарии` начинаются на `//` и действуют до конца строки. Комментарии *не влияют* на смысл программы, но если это опции компилятора -- могут направлять компилятор на выбор нужных модулей. Комментарии могут быть вложенными.
 
 `Разделитель` включает в себя:
 
 - `пробел`;
+- `табуляция`;
 - `перенос строки`.
 
 Для более полного понимания зависимостей ниже приводится структурная схема:
@@ -171,28 +176,30 @@ flowchart TD
     Программа
     Модуль0
     Модуль1
-    Сущность0
-    Сущность1
+    Символ0
+    Символ1
     Пользовательские_символы
     Встроенные_символы
     Имя
     Литеры
     Программа --> Модуль0
     Программа --> Модуль1
-    Модуль1 --> Сущность0
-    Модуль1 --> Сущность1
-    Сущность1 --> Пользовательские_символы
-    Сущность1 --> Встроенные_символы
+    Модуль1 --> Символ0
+    Модуль1 --> Символ1
+    Символ1 --> Пользовательские_символы
+    Символ1 --> Встроенные_символы
     Встроенные_символы --> Ключевые_символы
     Встроенные_символы --> Предписания
     Встроенные_символы --> Операторы
     Встроенные_символы --> Разделители
+    Встроенные_символы --> Комментарии
     Пользовательские_символы --> Имя
     Ключевые_символы --> Имя
     Предписания --> Имя
     Имя --> Литеры
     Операторы --> Литеры
     Разделители --> Литеры
+    Комментарии --> Литеры
     Литеры --> Буквы
     Литеры --> Цифры
     Литеры --> Служебные
@@ -220,11 +227,8 @@ flowchart TD
 | **=      | Возведение в степень с присвоением операнда слева    |
 | /        | Деление                                              |
 | /=       | Деление с присвоением операнду слева                 |
-| ~        | Отрицание                                            |
 | <        | Меньше                                               |
 | >        | Больше                                               |
-| &        | Логическое И                                         |
-| &=       | Логическое И с присвоением операнду слева            |
 | =        | Присвоить                                            |
 | //       | Линейный комментарий                                 |
 | /*       | Начало многострочного комментария                    |
@@ -235,9 +239,8 @@ flowchart TD
 | <=       | Меньше или равно                                     |
 | ,        | Запятая                                              |
 | >=       | Больше или равно                                     |
-| ;        | Точка с запятой                                      |
-| ...      | Перечисление                                         |
-| \|       | Логическое ИЛИ                                       |
+| ;        | Разделитель выражений                                |
+| ..       | Перечисление                                         |
 | :        | Определить тип переменной                            |
 | (        | Открывающая круглая скобка (выражение)               |
 | )        | Закрывающая круглая скобка (выражение)               |
@@ -245,8 +248,16 @@ flowchart TD
 | ]        | Закрывающая квадратная скобка (массив)               |
 | {        | Фигурная открывающая скобка (область видимости)      |
 | }        | Закрывающая фигурная скобка (область видимости)      |
-| ЕСТЬ     | IS Проверка типа                                     |
-| БУЛ      | BOOL Белвый тип                                      |
+| модуль   | MODULE Объявление начала модуля                      |
+| импорт   | IMPORT Импорт модуля                                 |
+| конст    | CONST Объявление константы                           |
+| тип      | TYPE Объявление типа                                 |
+| структ   | STRUCT Объявление структуры                          |
+| сущ      | VAR Объявление переменной                            |
+| фн       | FN Объявление функции                                |
+| &        | Создание объекта                                     |
+| есть     | IS Проверка типа                                     |
+| бул      | BOOL Белвый тип                                      |
 | ДА       | TRUE Булево значение                                 |
 | НЕТ      | FALSE Отрицание логического значения                 |
 | БАЙТ     | BYTE Тип байт                                        |
@@ -254,15 +265,7 @@ flowchart TD
 | ВЕЩ      | REAL Дробное число                                   |
 | МАССИВ   | ARRAY Массив элементов                               |
 | ПРОВЕР   | SWITCH Проверка на выбор                             |
-| ТИП      | TYPE Объявление типа                                 |
-| МОДУЛЬ   | MODULE Объявление начала модуля                      |
-| ИМПОРТ   | IMPORT Импорт модуля                                 |
-| КОНСТ    | CONST Объявление константы                           |
-| ТИП      | TYPE Определение типа                                |
-| СТРУКТ   | STRUCT Объявление структуры                          |
-| ЗНАЧ     | VAR Объявление переменной                            |
 | МУТ      | MUT Признак изменяемости                             |
-| ФН       | FN Объявление функции                                |
 | ВЕРНУТЬ  | RETURN Возврат из функции                            |
 | НОВ      | NEW Создать новую переменную                         |
 | ЕСЛИ     | IF Начало условия                                    |
@@ -271,20 +274,19 @@ flowchart TD
 | ДИВ      | DIV Остаток от целочисленного деления                |
 | НИЧ      | NIL Пустое состояние объекта                         |
 | ПОКА     | WHILE Условие проверки продолжения цикла на входе    |
-| ПЕТЛЯ    | LOOP Бесконечный цикл                                |
 | ДАЛЬШЕ   | NEXT Продолжить цикл с пропуском следующих выражений |
 | ПРЕРВАТЬ | BREAK Прервать цикл с пропуском следующих выражений  |
 | ИЛИ      | OR Логическое ИЛИ                                    |
 | И        | AND Логическое И                                     |
 | НЕ       | NOT Логическая инверсия                              |
-| ДЛЯ      | FOR Объявление цикла                                 |
 
 ## 4. Объявления имён и область видимости
 
-Каждое встречающееся в программе `имя` должно быть объявлено заранее, если это `ключевой символ` (например, `ТИП` или `ПЕРЕМ`). `Имя` также служит для задания опредёленных постоянных свойств сущности, например, является ли оно константой, определением типа, переменной или функцией.
-`Имя` используется для ссылки на соответствующую `сущность`. Это возможно в тех частях программы, которые находятся в пределах `области видимости`. `Имя` не может обозначать больше чем *одну* `сущность` внутри данной области. `Область видимости` распространяется текстуально от точки объявления до конца блока (функции или модуля), к которому принадлежит `имя` и, следовательно -- по отношению к которому, объект является локальным.
+Каждое встречающееся в программе `имя` должно быть объявлено заранее, если это `ключевой символ` (например, `тип` или `сущ`). `Имя` также служит для задания опредёленных постоянных свойств сущности, например, является ли оно константой, определением типа, переменной или функцией.
+
+`Имя` используется для ссылки на соответствующую `сущность`. Это возможно в тех частях программы, которые находятся в пределах `области видимости`. `Имя` не может обозначать больше чем *одну* `сущность` внутри одной области видимости. `Область видимости` распространяется текстуально от точки объявления до конца блока (модуля, функции или области видимости), к которому принадлежит `имя` и, следовательно -- по отношению к которому, объект является локальным.
 
-`Имя`, объявленное в блоке модуля, может сопровождаться *меткой экспорта* сразу после имени `*` , чтобы пояснить, что оно экспортируется из определяющего модуля с доступом *только на чтение*. В этом случае имя может быть использовано и в других модулях, если эти модули импортируют объявляющий модуль.
+`Имя`, объявленное в блоке модуля, может сопровождаться *меткой экспорта* перед именем `пуб` , чтобы пояснить, что оно экспортируется из определяющего модуля с доступом *только на чтение*. В этом случае имя может быть использовано и в других модулях, если эти модули импортируют объявляющий модуль.
 
 `Имя` символа предваряется другим именем (префиксом), показывающим его модуль (см. Гл 11). Префикс и имя разделены точкой и вместе называются `уточнённым именем` (или `квалифицированным именем`).
 
@@ -295,7 +297,7 @@ flowchart TD
 
 > ASR
 > ASSERT
-> БУЛ
+> бул
 > БАЙТ
 > EXCL
 > FLT
@@ -320,7 +322,7 @@ flowchart TD
 Константное выражение может быть вычислено по его тексту без фактического выполнения программы. Его операнды — константы. Примеры объявлений констант:
 
 ```c
-КОНСТ {
+конст {
     число = 100,
     лимит = 2 * число - 1,
     словаВсе = [0 .. словаРазмер -1],
@@ -350,18 +352,18 @@ flowchart TD
 Примеры:
 
 ```c
-ТИП {
+тип {
     Таблица = МАССИВ[255]ВЕЩ,
     Дерево = Узел,
 
-    СТРУКТ Узел {
+    структ Узел {
         ключ: ЦЕЛОЕ,
         Левый, Правый: Дерево,
     }
 
     ДеревоСередина = УзелСередина,
 
-    СТРУКТ УзелСередина (Узел){
+    структ УзелСередина (Узел){
         Имя: МАССИВ[32]БАЙТ,
         Подузел: Дерево,
     }
@@ -375,7 +377,7 @@ flowchart TD
 
 Встроенные линейные типы:
 
-- `БУЛ` -- принимает значения `TRUE` и `FALSE`
+- `бул` -- принимает значения `TRUE` и `FALSE`
 - `БАЙТ` -- целые числа от 0 до 255, размер фиксированный в 8 бит
 - `ЦЕЛОЕ` -- целые числа, размер зависит от реализации
 - `ВЕЩ` -- дробные числа, размер зависит от реализации
@@ -405,7 +407,7 @@ flowchart TD
 Примеры типов массивов:
 
 ```c
-ЗНАЧ {
+сущ {
     listUser=МАССИВ[NN]ЦЕЛОЕ,
     moments=МАССИВ[10, 20]ВЕЩ,
 }
@@ -416,7 +418,7 @@ flowchart TD
 Пример:
 
 ```bash
-ЗНАЧ {
+сущ {
     strHello="Привет",
 }
 ```
@@ -428,7 +430,7 @@ flowchart TD
 Сущность `структура`, состоящая из фиксированного количества элементов возможно разных типов. Объявление типа структуры задаёт для каждого элемента, которое называется полем, его тип и имя, которое првязывает это поле. Область действия этих имён полей - само определение структуры, но они также видны как неотъемлемые части экземпляра структуры в форме "через точку", которая ссылается на элементы самого экземпляра структуры.
 
 ```bash
-ТипЗаписи = СТРУКТ ( БазовыйТип?) {
+ТипЗаписи = структ ( БазовыйТип?) {
     СписокПолейТипа
 };
 БазовыйТип = квалификатор;
@@ -442,11 +444,11 @@ flowchart TD
 **Определение**. Тип `T1` является `T0`, если он непосредственно расширяет `T0`. И наоборот, тип `T0` является базовым типом для типа `T1`, если он является прямым базовым типом базового типа `T1`. Примеры типов структур:
 
 ```c
-ТИП {
-    СТРУКТ Дата {
+тип {
+    структ Дата {
         день, месяц, год: ЦЕЛОЕ,
     }
-    СТРУКТ User (Дата){
+    структ User (Дата){
         имя, фамилия: МАССИВ[32]БАЙТ,
         возраст: ЦЕЛОЕ,
         зарплата: ВЕЩ,
@@ -479,17 +481,17 @@ flowchart TD
 Переменные, имена которых отображаются через запятую имеют один и тот же тип. Примеры объявления переменных (см. Примеры в главе 6):
 
 ```c
-ТИП {
-    СТРУКТ Текст {
+тип {
+    структ Текст {
         лит: БАЙТ,
         счётчик: ЦЕЛОЕ,
     }
 }
 
-ЗНАЧ {
+сущ {
     i, j, k: ЦЕЛОЕ,
     x, y: ВЕЩ,
-    p, q: БУЛ,
+    p, q: бул,
     f: FN(),
     a: МАССИВ[100]ВЕЩ,
     w: МАССИВ[16]Текст,
@@ -550,7 +552,7 @@ t(УзелСредний).подузел(Дерево)
 
 ```bash
 выражение = (ОперацияПростая ОперацияОтношение ОперацияПростая)..;
-ОперацияОтношение = "=" | "~" | "<" | "<=" | ">" | ">=" | ЕСТЬ;
+ОперацияОтношение = "=" | "~" | "<" | "<=" | ">" | ">=" | есть;
 ОперацияПростая = ()"+"|"−"? разделитель? ОператорАддикции разделитель?;
 ОперациярАддикции= "+" | "−" | ИЛИ;
 разделитель = множитель ОператорМультипликации? множитель;
@@ -570,7 +572,7 @@ t(УзелСредний).подузел(Дерево)
 | И      | И логическое соединение  |
 | НЕ     | НЕ логическое отрицание  |
 
-Эти операции применяются к операндам БУЛ и дают результат BOO.
+Эти операции применяются к операндам бул и дают результат BOO.
 
 > р ИЛИ q  // означает «если р, то ДА, иначе q»
 > p И q // обозначает «если р, то q, иначе НЕТ
@@ -607,28 +609,28 @@ t(УзелСредний).подузел(Дерево)
 | <=     | меньше или равно |
 | >      | больше           |
 | =      | больше или равно |
-| ЕСТЬ   | проверка типа    |
+| есть   | проверка типа    |
 
-Результат операций отношения является базовым типом `БУЛ`. `ОперацияОтношение` (`<`, `<=`,`>`,`=`) применяется к числовым типам и `БАЙТ`. Отношения `=` и `!=` применимы также к типам `БУЛ`, ссылкам и процедурным типам.
+Результат операций отношения является базовым типом `бул`. `ОперацияОтношение` (`<`, `<=`,`>`,`=`) применяется к числовым типам и `БАЙТ`. Отношения `=` и `!=` применимы также к типам `бул`, ссылкам и процедурным типам.
 
-`v ЕСТЬ T` означает `v ЯВЛЯЕТСЯ типом T` и вызывает проверку типа. Это применимо, если выполнены все условия:
+`v есть T` означает `v ЯВЛЯЕТСЯ типом T` и вызывает проверку типа. Это применимо, если выполнены все условия:
 
 - `T` расширение объявленной структуры `T0` для `v`;
 - `v` параметр, как переменная заданного типа структуры.
 
-Предполагая, например, что сслыка на тип структуры `T` является расширением базовой ссылки на  тип структуры `T0`, тогда проверка `v ЕСТЬ T` определяет, является ли фактически указанная переменная (в том числе, а не только `T0`) cтруктурой типа `T`. Значение `ПУСТО ЕСТЬ Т` возвращает отрицательный результат.
+Предполагая, например, что сслыка на тип структуры `T` является расширением базовой ссылки на  тип структуры `T0`, тогда проверка `v есть T` определяет, является ли фактически указанная переменная (в том числе, а не только `T0`) cтруктурой типа `T`. Значение `ПУСТО есть Т` возвращает отрицательный результат.
 Примеры выражений (см. Примеры в главе 7):
 
 ```c
 1987                (`ЦЕЛОЕ`)
 I ДИВ 3             (`ЦЕЛОЕ`)
-~ P ИЛИ q           (`БУЛ`)
+~ P ИЛИ q           (`бул`)
 (I + j) * (i-j)     (`ЦЕЛОЕ`)
 A [i + j] * a [i-j] (`ВЕЩ`)
-(0 <= i) & (i <100) (`БУЛ`)
-T.ключ = 0          (`БУЛ`)
-K == i              (`БУЛ`)
-T ЕСТЬ УзелСредний  (`БУЛ`)
+(0 <= i) & (i <100) (`бул`)
+T.ключ = 0          (`бул`)
+K == i              (`бул`)
+T есть УзелСредний  (`бул`)
 ```
 
 ## 9. Предписания
@@ -725,7 +727,7 @@ w[i+1].ch = "A"
 Пример:
 
 ```c
-ТИП СвязьЦел СТРУКТ{
+тип СвязьЦел структ{
     a : ЦЕЛОЕ
 }
 
@@ -733,7 +735,7 @@ w[i+1].ch = "A"
     а:5,
 }
 
-ТИП СвязьВещ СТРУКТ{
+тип СвязьВещ структ{
     а:ВЕЩ
 }
 
@@ -836,10 +838,10 @@ v := beg;
 
 ```bash
 ОбъявлениеФункции = ИмяФункции{ТелоФункции}.
-ИмяФункции = ФН ИмяФункции(ФормальныеПараметры..)Результат.
+ИмяФункции = фн ИмяФункции(ФормальныеПараметры..)Результат.
 ТелоФункции = ПоследОбъявлений{ПоследПредписаний, ВЕРНУТЬ Выражение}.
-ПоследОбъявлений = [КОНСТ {ОбъявлениеКонстант ";"}]
-[ТИП {ОбъявлениеТипов ";"}] [ЗНАЧ {ОбъявлениеПеременных ";"}]
+ПоследОбъявлений = [конст {ОбъявлениеКонстант ";"}]
+[тип {ОбъявлениеТипов ";"}] [сущ {ОбъявлениеПеременных ";"}]
 {ОбъявлениеФункции ";"}.
 ```
 
@@ -847,7 +849,7 @@ v := beg;
 
 Формальные параметры (или просто параметры) -- это имена, которые обозначают фактические параметры (аргументы), указанные в вызове функции. Соответствие между аргументами и параметрами устанавливается при вызове функции. Переменная соответствует фактическому параметру, который является переменной, и она обозначает эту переменную. Значение соответствует фактическому параметру, который является выражением, и он обозначает его значение, которое невозможно изменить при передаче. Однако, если значение имеет базовый тип, он представляет собой локальную переменную, которой первоначально присваивается значение фактического выражения.
 
-Тип параметра указывается в списке формальных параметров: переменные обозначаются ключевым словом `ЗНАЧ`, а  значения не имеют такого префикса.
+Тип параметра указывается в списке формальных параметров: переменные обозначаются ключевым словом `сущ`, а  значения не имеют такого префикса.
 
 Функция-процедура без параметров должна иметь пустой список параметров. Она должна быть вызвана через имя функции, список фактических параметров которой также пуст.
 
@@ -855,7 +857,7 @@ v := beg;
 
 ```bash
 Формальныйпараметр = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
-Секция_FP = [ЗНАЧ] имя{"," имя} ":" ФормальныйПараметр.
+Секция_FP = [сущ] имя{"," имя} ":" ФормальныйПараметр.
 ФормальныйПараметр = МАССИВ[nn]Тип..
 ```
 
@@ -866,9 +868,9 @@ v := beg;
 Примеры объявлений функций:
 
 ```c
-ФН Целое_Читать(ЗНАЧ x: `ЦЕЛОЕ`){
-    ЗНАЧ i : ЦЕЛОЕ;
-    ЗНАЧ ch: БАЙТ;
+фн Целое_Читать(сущ x: `ЦЕЛОЕ`){
+    сущ i : ЦЕЛОЕ;
+    сущ ch: БАЙТ;
     i = 0;
     Читать(ch);
     ПОКА ("0" <= ch) И (ch <= "9") {
@@ -878,9 +880,9 @@ v := beg;
     x = i
 }
 
-ФН Целое_Писать(x: ЦЕЛОЕ){ // 0 <= x < 10^5
-ЗНАЧ i: ЦЕЛОЕ;
-ЗНАЧ buf: МАССИВ[5]ЦЕЛОЕ;
+фн Целое_Писать(x: ЦЕЛОЕ){ // 0 <= x < 10^5
+сущ i: ЦЕЛОЕ;
+сущ buf: МАССИВ[5]ЦЕЛОЕ;
 i = 0;
 ПОКА i==0{
     buf[i] = x МОД 10;
@@ -890,8 +892,8 @@ i = 0;
     Записать(БАЙТ(buf[i] + ORD("0")));
 }
 
-ФН лог2(x: ЦЕЛОЕ):ЦЕЛОЕ{
-    ЗНАЧ y ЦЕЛОЕ = 0; // assume x>0
+фн лог2(x: ЦЕЛОЕ):ЦЕЛОЕ{
+    сущ y ЦЕЛОЕ = 0; // assume x>0
     WHILE x > 1 {
         x = x ДИВ 2;
         y++;
@@ -909,7 +911,7 @@ i = 0;
 | Имя           | Тип аргумента   | Тип результата       | Описание                       | Англ      |
 | ------------- | --------------- | -------------------- | ------------------------------ | --------- |
 |               | x: числовой тип | соответствует типу x | абсолютное значение числа      | ABS(x)    |
-|               | x: ЦЕЛОЕ        | БУЛ                  | x МОД 2 = 1, чёиность          | ODD(x)    |
+|               | x: ЦЕЛОЕ        | бул                  | x МОД 2 = 1, чёиность          | ODD(x)    |
 | м.Длин()      | v: МАССИВ       | ЦЕЛОЕ                | длина массива v                | v.Len()   |
 | х.СдвигЛев(н) | x, н: ЦЕЛОЕ     | ЦЕЛОЕ                | логический сдвиг влево, x * 2n | LSL(x, n) |
 |               | x, n: ЦЕЛОЕ     | ЦЕЛОЕ                | знаковый сдвиг вправо,x DIV 2n | ASR(x, n) |
@@ -921,7 +923,7 @@ i = 0;
 | --- | ------------- | -------------- | ------------------- | -------- |
 |     | ВЕЩ           | ЦЕЛОЕ          | округление вниз     | FLOOR(x) |
 |     | ЦЕЛОЕ         | ВЕЩ            | преобразование типа | FLT(x)   |
-|     | БАЙТ, БУЛ     | ЦЕЛОЕ          | порядковый номер x  | ORD(x)   |
+|     | БАЙТ, бул     | ЦЕЛОЕ          | порядковый номер x  | ORD(x)   |
 
 Безопасные процедуры:
 
@@ -944,14 +946,14 @@ i = 0;
 Модуль представляет собой набор объявлений констант, типов, переменных и функций и последовательностей предписаний с целью присвоения начальных значений переменным. Модуль обычно представляет собой текст, который можно скомпилировать как единое целое.
 
 ```bash
-Модуль = МОДУЛЬ Имя;
+Модуль = модуль Имя;
     [СписокИмпорта]
     СписокОбъявлений..? | СписокПредписаний..?;
 {
     СписокВыражений..?;
 }
 
-СписокИмпорта = ИМПОРТ {
+СписокИмпорта = импорт {
     ИмпортМодуля..?
 }
 
@@ -967,23 +969,23 @@ i = 0;
 Пример:
 
 ```c
-МОДУЛЬ Вывод; // экспортирует процедуры: Write, WriteInt, WriteLn
+модуль Вывод; // экспортирует процедуры: Write, WriteInt, WriteLn
 
-ИМПОРТ {
+импорт {
     Текст,
     Oberon,
 }
 
-ЗНАЧ {
+сущ {
     W: Текст.Writer,
 }
 
-ФН Write*(ch: БАЙТ){
+фн Write*(ch: БАЙТ){
     Текст.Write(W, ch);
 }
 
-ФН WriteInt*(x, n: `ЦЕЛОЕ`){
-    ЗНАЧ {
+фн WriteInt*(x, n: `ЦЕЛОЕ`){
+    сущ {
         i: ЦЕЛОЕ = 0,
         a: МАССИВ[16]BYTE,
     }
@@ -1010,7 +1012,7 @@ i = 0;
     Текст.Write(W, a[i]);
 }
 
-ФН WriteLn*{}
+фн WriteLn*{}
     Текст.WriteLn(W);
     Текст.Append(Oberon.Log, W.buf);
 }
@@ -1180,12 +1182,12 @@ DO ПоследПредписаний END.
 ТелоПроцедуры = ПоследОпределений[BEGIN ПоследПредписаний ]
 [RETURN выражение ] END.
 
-ПоследОпределений = [КОНСТ {ОпрКонстант ";"}]
+ПоследОпределений = [конст {ОпрКонстант ";"}]
 [TYPE {ОпрТипа ";"}]
-[ЗНАЧ {ОпрПеременной ";"}]
+[сущ {ОпрПеременной ";"}]
 {ОпрПроцедуры ";"}.
 ФормальныеПараметры = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
-Секция_FP 	= [ЗНАЧ] имя {"," имя } ":" ФормальныйТип.
+Секция_FP 	= [сущ] имя {"," имя } ":" ФормальныйТип.
 ФормальныйТип = {МАССИВ OF} квалификатор.
 
 модуль	= MODULE имя ";" [СписокИмпорта] ПоследОпределений