|
|
@@ -959,6 +959,7 @@ w[i+1].ch = "A"
|
|
|
Следующие определения обычно применимы без дополнительных изменений. Однако отдельные реализации языка могут включать в свои модули дополнительные определения `СИСТЕМА`, которые относятся к конкретной, находящейся в использовании аппаратуре. В дальнейшем `v` обозначает переменную, `x`, `a` и `n` для выражений.
|
|
|
|
|
|
Функции-процедуры:
|
|
|
+
|
|
|
| Имя | Тип аргумента | Тип результата | Функция |
|
|
|
| --------- | ------------- | -------------- | ------------------ |
|
|
|
| ADR(v) | любой | `целое` | адрес переменной v |
|
|
|
@@ -966,6 +967,7 @@ w[i+1].ch = "A"
|
|
|
| BIT(a, n) | a, n: `целое` | BOOLEAN | n бит в mem[a] |
|
|
|
|
|
|
Собственные процедуры:
|
|
|
+
|
|
|
| Имя | Тип аргумента | Тип результата | Функция |
|
|
|
| ----------------- | ------------- | -------------------- | ------------------------------------------------ |
|
|
|
| GET(a, v) | a: `целое` | v: любой базовый тип | v := mem[a] |
|
|
|
@@ -975,6 +977,7 @@ w[i+1].ch = "A"
|
|
|
Ниже приводятся дополнительные процедуры, принятые компилятором для RISC-процессора:
|
|
|
|
|
|
Процедуры-функции:
|
|
|
+
|
|
|
| Имя | Тип аргумента | Тип результата | Функция |
|
|
|
| --------- | ------------- | -------------- | ----------------------------- |
|
|
|
| VAL(T, n) | скалярный | T | преобразование |
|
|
|
@@ -984,6 +987,7 @@ w[i+1].ch = "A"
|
|
|
| COND(n) | `целое` | BOOLEAN | IF Cond(n) THEN ... |
|
|
|
|
|
|
Собственные процедуры:
|
|
|
+
|
|
|
| Имя | Тип аргумента | Функция |
|
|
|
| ------ | ------------- | -------------------------- |
|
|
|
| LED(n) | `целое` | отображает n на LED-экране |
|
|
|
@@ -991,58 +995,58 @@ w[i+1].ch = "A"
|
|
|
## Приложение 1: Синтаксис Оберона
|
|
|
|
|
|
```bash
|
|
|
-литера = "A" | "B" | … | "Z" | "a" | "b" | … | "z".
|
|
|
-цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
|
|
|
+литера = "A" | "B" | … | "Z" | "a" | "b" | … | "z".
|
|
|
+цифра "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
|
|
|
шестнЦифра = digit | "A" | "B" | "C" | "D" | "E" | "F".
|
|
|
-имя = литера {литера | цифра}.
|
|
|
+имя = литера {литера | цифра}.
|
|
|
квалификатор = [имя "."] имя.
|
|
|
-ОпрИмени = имя ["*"].
|
|
|
-целое = цифра {цифра} | цифра {шестнЦифра} "H".
|
|
|
+ОпрИмени = имя ["*"].
|
|
|
+целое = цифра {цифра} | цифра {шестнЦифра} "H".
|
|
|
вещественное = цифра{цифра} "." {цифра} [экспонента].
|
|
|
-экспонента = "E" ["+" | "-"] цифра{цифра}.
|
|
|
-число = целое | вещественное.
|
|
|
-строка = """ {литера} """ | цифра {шестнЦифра } "X".
|
|
|
+экспонента = "E" ["+" | "-"] цифра{цифра}.
|
|
|
+число = целое | вещественное.
|
|
|
+строка = """ {литера} """ | цифра {шестнЦифра } "X".
|
|
|
ОпрКонстанты = ОпрКонстанты "=" КонстВыражение.
|
|
|
КонстВыражение = выражение.
|
|
|
-ОпрТипа = ОпрИмени "=" тип.
|
|
|
-тип = квалификатор| ТипМассива | ТипЗаписи | ТипСсылка | ТипПроцедуры.
|
|
|
+ОпрТипа = ОпрИмени "=" тип.
|
|
|
+тип = квалификатор| ТипМассива | ТипЗаписи | ТипСсылка | ТипПроцедуры.
|
|
|
ТипМассива = массив длина {"," длина} OF тип.
|
|
|
-длина = КонстВыражение .
|
|
|
-ТипЗаписи = RECORD ["(" БазовыйТип ")"] [ПоследСписокПолей] END.
|
|
|
+длина = КонстВыражение .
|
|
|
+ТипЗаписи = RECORD ["(" БазовыйТип ")"] [ПоследСписокПолей] END.
|
|
|
БазовыйТип = квалификатор.
|
|
|
ПоследСписокПолей = СписокПолей {";" СписокПолей }.
|
|
|
СписокПолей = СписокИмён ":" тип.
|
|
|
-СписокИмён = ОпрИмени{"," ОпрИмени}.
|
|
|
+СписокИмён = ОпрИмени{"," ОпрИмени}.
|
|
|
ТипСсылка = POINTER TO тип.
|
|
|
ТипПроцедуры = PROCEDURE [ФормальныеПараметры].
|
|
|
ОпрПеременных = СписокИмён ":" тип.
|
|
|
-выражение = ОперацияПростая [ОперацияОтношение ОперацияПростая ].
|
|
|
-ОперацияОтношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
|
|
|
+выражение = ОперацияПростая [ОперацияОтношение ОперацияПростая ].
|
|
|
+ОперацияОтношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
|
|
|
ОперацияПростая = ["+" | "-"] разделитель {ОперАддикции разделитель }.
|
|
|
ОперАддикции = "+" | "-" | OR.
|
|
|
-разделитель = множитель {ОперМультипликации множитель}.
|
|
|
+разделитель = множитель {ОперМультипликации множитель}.
|
|
|
ОперМультипликации = "*" | "/" | DIV | MOD | "&".
|
|
|
-множитель = число | строка | NIL | TRUE | FALSE | set | ссылка [АктуальныеПараметры] | "(" выражение")" | "~" множитель.
|
|
|
-ссылка = квалификатор {селектор}.
|
|
|
-селектор = "." имя| "[" СписокВыражений"]" | "^" | "(" квалификатор")".
|
|
|
-набор = "{" [элемент {"," элемент}] "}".
|
|
|
-элемент = выражение [".." выражение ].
|
|
|
-СписокВыражений = выражение {"," выражение }.
|
|
|
+множитель = число | строка | NIL | TRUE | FALSE | set | ссылка [АктуальныеПараметры] | "(" выражение")" | "~" множитель.
|
|
|
+ссылка = квалификатор {селектор}.
|
|
|
+селектор = "." имя| "[" СписокВыражений"]" | "^" | "(" квалификатор")".
|
|
|
+набор = "{" [элемент {"," элемент}] "}".
|
|
|
+элемент = выражение [".." выражение ].
|
|
|
+СписокВыражений = выражение {"," выражение }.
|
|
|
АктуальныеПараметры = "(" [СписокВыражений ] ")" .
|
|
|
-предписание = [присвоение | ВызовПроцедуры| Предписание_If | Предписание_Case |
|
|
|
+предписание = [присвоение | ВызовПроцедуры| Предписание_If | Предписание_Case |
|
|
|
Предписание_While| Предписание_Repeat | Предписание_For].
|
|
|
|
|
|
-присвоение = ссылка ":=" выражение.
|
|
|
+присвоение = ссылка ":=" выражение.
|
|
|
ВызовПроцедуры = ссылка [АктуальныеПараметры].
|
|
|
ПоследПредписаний = предписание {";" предписание }.
|
|
|
Предписание_If = IF выражение THEN ПоследПредписаний
|
|
|
{ELSIF выражение THEN ПоследПредписаний }
|
|
|
[ELSE ПоследПредписаний ] END.
|
|
|
Предписание_Case = CASE выражение OF вариант {"|" вариант } END.
|
|
|
-вариант = [СписокМеток_Case ":" ПоследПредписаний ].
|
|
|
+вариант = [СписокМеток_Case ":" ПоследПредписаний ].
|
|
|
СписокМеток_Case = СписокМеток {"," СписокМеток }.
|
|
|
СписокМеток = метка [".." метка ].
|
|
|
-метка = целое | строка | квалификатор .
|
|
|
+метка = целое | строка | квалификатор .
|
|
|
Предписание_While = WHILE выражение DO ПоследПредписаний
|
|
|
{ELSIF выражение DO ПоследПредписаний } END.
|
|
|
Предписание_Repeat = REPEAT ПоследПредписаний UNTIL выражение .
|
|
|
@@ -1061,14 +1065,14 @@ DO ПоследПредписаний END.
|
|
|
[симв {ОпрПеременной ";"}]
|
|
|
{ОпрПроцедуры ";"}.
|
|
|
ФормальныеПараметры = "(" [Секция_FP {";" Секция_FP}] ")" [":" квалификатор].
|
|
|
-Секция_FP = [симв] имя {"," имя } ":" ФормальныйТип.
|
|
|
+Секция_FP = [симв] имя {"," имя } ":" ФормальныйТип.
|
|
|
ФормальныйТип = {массив OF} квалификатор.
|
|
|
|
|
|
-модуль = MODULE имя ";" [СписокИмпорта] ПоследОпределений
|
|
|
+модуль = MODULE имя ";" [СписокИмпорта] ПоследОпределений
|
|
|
[BEGIN ПоследПредписаний ] END имя "."
|
|
|
|
|
|
СписокИмпорта = IMPORT импорт {"," импорт } ";".
|
|
|
-импорт = имя [":=" имя].
|
|
|
+импорт = имя [":=" имя].
|
|
|
```
|
|
|
|
|
|
## Приложение 2: Участники
|