Bläddra i källkod

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

SVI 2 år sedan
förälder
incheckning
2d5de4ff12
3 ändrade filer med 48 tillägg och 32 borttagningar
  1. 2 2
      README.md
  2. 30 30
      doc/lang_abstract.md
  3. 16 0
      src/main.obu

+ 2 - 2
README.md

@@ -1,4 +1,4 @@
-# Оброн-У
+# Оберон-У
 
 Это реализация варианта языка **Оберон-7**. **Оберон-У** достаточносильно сильно отошёл от своего предка, но недостаточно, чтобы его считать самостоятельным языком.
 
@@ -47,4 +47,4 @@ make mod       # обновление зависимостей
 make lint      # Запуск линтеров
 make test.run  # Запуск тестов
 make graph     # Построение графа зависимостей в SVG
-```
+```

+ 30 - 30
doc/lang_abstract.md

@@ -25,22 +25,22 @@
   - [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.1 Операнды](#91-операнды)
+    - [9.2 Операторы](#92-операторы)
+      - [9.2.1 Логические операции](#921-логические-операции)
+      - [9.2.2 Арифметические операторы](#922-арифметические-операторы)
+      - [9.2.3 Отношения](#923-отношения)
   - [10. Предписания](#10-предписания)
-    - [9.1 Предписание ПРИСВОЕНИЕ](#91-предписание-присвоение)
-    - [9.3 Последовательность предписаний](#93-последовательность-предписаний)
-    - [9.4 Предписание\_ЕСЛИ](#94-предписание_если)
-    - [9.5 Предписание\_ВЫБОР](#95-предписание_выбор)
-    - [9.7 Предписание цикл](#97-предписание-цикл)
+    - [10.1 Предписание ПРИСВОЕНИЕ](#101-предписание-присвоение)
+    - [10.3 Последовательность предписаний](#103-последовательность-предписаний)
+    - [10.4 Предписание\_ЕСЛИ](#104-предписание_если)
+    - [10.5 Предписание\_ВЫБОР](#105-предписание_выбор)
+    - [10.7 Предписание цикл](#107-предписание-цикл)
   - [11.  Объявление функций](#11--объявление-функций)
-    - [10.1 Формальные параметры](#101-формальные-параметры)
-    - [10.2. Встроенные функции](#102-встроенные-функции)
+    - [11.1 Формальные параметры](#111-формальные-параметры)
+    - [11.2. Встроенные функции](#112-встроенные-функции)
   - [12.  Модули](#12--модули)
-    - [11.1 Модуль СИСТЕМА](#111-модуль-система)
+    - [12.1 Модуль СИСТЕМА](#121-модуль-система)
   - [Приложение 1: Синтаксис Оберона](#приложение-1-синтаксис-оберона)
   - [Приложение 2: Участники](#приложение-2-участники)
   - [Пиложение 3: Ссылки](#пиложение-3-ссылки)
@@ -478,12 +478,12 @@ UNPK
 ```bash
 тип {
     База = структ абстракт {
-        Открыть([]байт):ошибка;
-        Закрыть():ошибка;
+        Открыть([]байт)ошибка;
+        Закрыть()ошибка;
     }
     БазаРасшир = структ абстракт (База) {
-        Строить():ошибка;
-        Шахта():уголь;
+        Строить()ошибка;
+        Шахта()уголь;
     }
 }
 
@@ -536,7 +536,7 @@ UNPK
 
 `Выражения` состоят из операндов и операторов. Также могут включать круглые скобки для выражения определённых правил вычисления операторов и операндов. Выражения разделяются литерой `;`.
 
-### 8.1 Операнды
+### 9.1 Операнды
 
 За исключением чисел и литерных констант, операнды обозначаются именами. Обозначение операнда состоит из имени, которое может оносится к символам:
 
@@ -567,7 +567,7 @@ t.левый.правый (Дерево)
 t(УзелСредний).подузел(Дерево)
 ```
 
-### 8.2 Операторы
+### 9.2 Операторы
 
 Синтаксис выражений различает четыре вида операторов с разными приоритетами (порядком выполнения).
 
@@ -596,7 +596,7 @@ t(УзелСредний).подузел(Дерево)
 
 Множество [m..n] обозначает [m, m + 1, ..., n-1, n], а если m>n, то пустое множество. Доступные операции перечислены в следующих таблицах. В некоторых случаях несколько разных операций обозначаются одним и тем же символом операции. В этих случаях фактическая операция определяется типом операндов.
 
-#### 8.2.1 Логические операции
+#### 9.2.1 Логические операции
 
 | Символ | Результат                |
 | ------ | ------------------------ |
@@ -610,7 +610,7 @@ t(УзелСредний).подузел(Дерево)
 > p и q // обозначает «если р, то q, иначе нет
 > не P   // означает "не p"
 
-#### 8.2.2 Арифметические операторы
+#### 9.2.2 Арифметические операторы
 
 | Символ | Результат |
 | ------ | --------- |
@@ -624,7 +624,7 @@ t(УзелСредний).подузел(Дерево)
 - `-` обозначает инверсию знака;
 - `+` обозначает оператор идентичности.
 
-#### 8.2.3 Отношения
+#### 9.2.3 Отношения
 
 | Символ | Результат        |
 | ------ | ---------------- |
@@ -667,7 +667,7 @@ T есть УзелСредний  (`бул`)
 
 > Предписание = Оператор | Присвоение | ВызовПроцедур | Предписание_ЕСЛИ |Предписание_ВЫБОР | Предписание_ЦИКЛ.
 
-### 9.1 Предписание ПРИСВОЕНИЕ
+### 10.1 Предписание ПРИСВОЕНИЕ
 
 Элементарное предписание `ПРИСВОЕНИЕ` служит для замены текущего значения объекта на новое значение, заданное выражением. Предписание `ПРИСВОЕНИЕ` записывается как «=» и произносится как «присвоить».
 
@@ -695,13 +695,13 @@ t.key = i
 w[i+1].ch = "A"
 ```
 
-### 9.3 Последовательность предписаний
+### 10.3 Последовательность предписаний
 
 Последовательности предписаний обозначают последовательность действий, заданную частями операторов, разделенными точкой с запятой.
 
 > Последовательность_Предписаний = Предписание? ; Предписание..?;
 
-### 9.4 Предписание_ЕСЛИ
+### 10.4 Предписание_ЕСЛИ
 
 Предписание `если` проверяет булево выражение. Если булево выражение положительное -- далее выполняется последовательность предписаний.
 
@@ -719,7 +719,7 @@ w[i+1].ch = "A"
 }
 ```
 
-### 9.5 Предписание_ВЫБОР
+### 10.5 Предписание_ВЫБОР
 
 Составное предписание `выбор` определяет выбор и выполнение последовательности предписаний в соответствии со значением выражения. Сначала вычисляется выражение `выбор`, затем выполняется последовательность предписаний, чей список меток содержит полученное значение. Если выражение `выбор` имеет тип `целое` или `байт`, все метки должны быть целыми или байтами, соответственно.
 
@@ -778,7 +778,7 @@ w[i+1].ch = "A"
 }
 ```
 
-### 9.7 Предписание цикл
+### 10.7 Предписание цикл
 
 Составное предписание `цикл` указывает повторное выполнение последовательности выражений бесконечное количество раз. Для досрочного начала очередной операции используется ключевой символ `дальше`. Для прерывания итераций используется ключевой символ `стоп`.
 
@@ -811,7 +811,7 @@ w[i+1].ch = "A"
 ПоследОбъявлений = ОбъявлениеКонстант..? ; ОбъявлениеТипов..? ; ОбъявлениеОбъектов?;
 ```
 
-### 10.1 Формальные параметры
+### 11.1 Формальные параметры
 
 Формальные параметры (или просто параметры) -- это имена, которые обозначают фактические параметры (аргументы), указанные в вызове функции. Соответствие между аргументами и параметрами устанавливается при вызове функции. Объект соответствует фактическому параметру, который является объектом внутри функции. Значение соответствует фактическому параметру, который является выражением, и он обозначает его значение, которое невозможно изменить при передаче. Однако, если значение имеет базовый тип, он представляет собой локальный объект, которому первоначально присваивается значение фактического выражения.
 
@@ -880,7 +880,7 @@ w[i+1].ch = "A"
 }
 ```
 
-### 10.2. Встроенные функции
+### 11.2. Встроенные функции
 
 В следующей таблице перечислены встроенные функции. Некоторые из них являются общими функциями, то есть они применяются к нескольким типам операндов. `v` обозначает переменную, `x` и `n` для выражений, `T` - тип.
 
@@ -994,7 +994,7 @@ w[i+1].ch = "A"
 }
 ```
 
-### 11.1 Модуль СИСТЕМА
+### 12.1 Модуль СИСТЕМА
 
 Необязательный модуль `СИСТЕМА` содержит определения, необходимые для программирования опасных операций, ссылающихся непосредственно на ресурсы, специфичные для данной аппаратуры.
 

+ 16 - 0
src/main.obu

@@ -12,6 +12,22 @@
     Лог=`#/log.obu`
 }
 
+тип {
+    Книга = структ пуб абстракт {
+        Открыть(имя []байт):ошибка;
+        Закрыть():ошибка;
+    }
+    Журнал = структ пуб (Книга) {
+        год: пуб мут целое;
+        месяц: пуб целое;
+        день: мут целое;
+    }
+}
+
+сущ {
+
+}
+
 {
     Лог.СтрокаПеревод(`Привет, мир!`);
 }.