Оберон, Мерл
- 1 year ago
- 0
- 0
Оберон-2 ( Oberon-2 ) — расширение языка программирования Оберон элементами метапрограммирования ( ограниченная рефлексия ) и средствами для объектно-ориентированного программирования, также добавлены открытые массивы и базовые типы указателей, поля доступные при экспорте только для чтения, восстановлен оператор FOR из Модулы-2 .
Разработан в 1991 году в Швейцарской высшей технической школе ( Цюрих ) Никлаусом Виртом и Ханспетером Мёссенбёком как переработка Объектного Оберона. Оберон-2 — расширенный набор Оберона и полностью с ним совместим.
Основные дополнения:
Существует оптимизирующий компилятор для Оберона-2; есть также компилятор языка в байт-код Java .
Семейство языков Алгол — Паскаль — Модула-2 — Оберон — Оберон-2 — Компонентный Паскаль развивалось в направлении снижения сложности синтаксиса . При этом несмотря на расширение языка, объём формального описания синтаксиса Оберона-2 меньше, чем у классического Оберона за счёт оптимизация описания: полный синтаксис описан всего в 33 предложениях по расширенной форме Бэкуса — Наура :
Модуль = MODULE имя ";" [СписокИмпорта] ПослОбъявл [BEGIN ПослОператоров] END имя ".".
СписокИмпорта = IMPORT [имя ":="] имя {"," [имя ":="] имя} ";".
ПослОбъявл = { CONST {ОбъявлКонст ";" } | TYPE {ОбъявлТипа ";" } | VAR {ОбъявлПерем ";" }}
{ОбъявлПроц ";" | ОпережающееОбъяв";"}.
ОбъявлКонст = ИмяОпр "=" КонстВыраж.
ОбъявлТипа = ИмяОпр "=" Тип.
ОбъявлПерем = СписокИмя ":" Тип.
ОбъявлПроц = PROCEDURE [Приемник] ИмяОпр [ФормальныеПарам]";" ПослОбъявл [BEGIN ПослОператоров] END имя.
ОпережающееОбъяв = PROCEDURE "^" [Приемник] ИмяОпр [ФормальныеПарам].
ФормальныеПарам = "(" [СекцияФП {";" СекцияФП}] ")" [":" УточнИмя].
СекцияФП = [VAR] имя {"," имя} ":" Тип.
Приемник = "(" [VAR] имя ":" имя ")".
Тип = УточнИмя | ARRAY [КонстВыраж {"," КонстВыраж}] OF Тип
| RECORD ["("УточнИмя")"] СписокПолей {";" СписокПолей} END | POINTER TO Тип | PROCEDURE [ФормальныеПарам].
СписокПолей = [СписокИмя ":" Тип].
ПослОператоров = Оператор {";" Оператор}.
Оператор = [ Обозначение ":=" Выраж
| Обозначение ["(" [СписокВыраж] ")"]
| IF Выраж THEN ПослОператоров {ELSIF Выраж THEN ПослОператоров} [ELSE ПослОператоров] END
| CASE Выраж OF Вариант {"|" Вариант} [ELSE ПослОператоров] END
| WHILE Выраж DO ПослОператоров END
| REPEAT ПослОператоров UNTIL Выраж
| FOR имя ":=" Выраж TO Выраж [BY КонстВыраж] DO ПослОператоров END
| LOOP ПослОператоров END
| WITH Охрана DO ПослОператоров {"|" Охрана DO ПослОператоров} [ELSE ПослОператоров] END
| EXIT
| RETURN [Выраж] ].
Вариант = [МеткиВарианта {"," МеткиВарианта} ":" ПослОператоров].
МеткиВарианта = КонстВыраж [".." КонстВыраж].
Охрана = УточнИмя ":" УточнИмя.
КонстВыраж = Выраж.
Выраж = ПростоеВыраж [Отношение ПростоеВыраж].
ПростоеВыраж = ["+" | "-"] Слагаемое {ОперСлож Слагаемое}.
Слагаемое = Множитель {ОперУмн Множитель}.
Множитель = Обозначение ["(" [СписокВыраж] ")"] | число | символ | строка | NIL | Множество
| "(" Выраж ")" | " ~ " Множитель.
Множество = "{" [Элемент {"," Элемент}] "}".
Элемент = Выраж [".." Выраж].
Отношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
ОперСлож = "+" | "-" | OR.
ОперУмн = "*" | "/" | DIV | MOD | "&".
Обозначение = УточнИмя {"." имя | "[" СписокВыраж "]" | "^" | "(" УточнИмя ")"}.
СписокВыраж = Выраж {"," Выраж}.
СписокИмя = ИмяОпр {"," ИмяОпр}.
УточнИмя = [имя "."] имя.
ИмяОпр = имя [ "*" | "-" ].