Interested Article - Оберон-2

Оберон-2 ( Oberon-2 ) — расширение языка программирования Оберон элементами метапрограммирования ( ограниченная рефлексия ) и средствами для объектно-ориентированного программирования, также добавлены открытые массивы и базовые типы указателей, поля доступные при экспорте только для чтения, восстановлен оператор FOR из Модулы-2 .

Разработан в 1991 году в Швейцарской высшей технической школе ( Цюрих ) Никлаусом Виртом и Ханспетером Мёссенбёком как переработка Объектного Оберона. Оберон-2 — расширенный набор Оберона и полностью с ним совместим.

Основные дополнения:

  • добавлены процедуры, связанные с типом, допускающие переопределение для порождённых типов (приблизительный аналог виртуальных методов в других объектно-ориентированных языках);
  • в язык возвращен оператор цикла с шагом FOR;
  • добавлена возможность экспорта описаний в режиме «только для чтения» .

Существует оптимизирующий компилятор для Оберона-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 | "&".
Обозначение      = УточнИмя {"." имя | "[" СписокВыраж "]" | "^" | "(" УточнИмя ")"}.
СписокВыраж      = Выраж {"," Выраж}.
СписокИмя      = ИмяОпр {"," ИмяОпр}.
УточнИмя       = [имя "."] имя.
ИмяОпр         = имя [ "*" | "-" ].

Примечания

  1. от 28 марта 2022 на Wayback Machine , Х. Мёссенбёк, Н. Вирт
  2. от 5 сентября 2012 на Wayback Machine (англ.)
  3. . Дата обращения: 18 августа 2012. Архивировано из 23 августа 2011 года.
  4. . Дата обращения: 20 апреля 2022. 30 сентября 2021 года.
  5. . Дата обращения: 21 августа 2012. Архивировано из 2 марта 2010 года.


Источник —

Same as Оберон-2