Оберон-2 — Википедия

Oberon-2
Изображение логотипа
Класс языка императивный, структурированный, модульный, объектно-ориентированный
Появился в 1991
Автор Никлаус Вирт, Ханспетер Мёссенбёк
Система типов статическая, сильная
Испытал влияние Oberon
Повлиял на Компонентный Паскаль, Go

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

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

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

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

Существует оптимизирующий компилятор XDS[3] для Оберона-2; есть также компилятор языка в байт-код Java[4].

Семейство языков Алгол — Паскаль — Модула-2 — Оберон — Оберон-2 — Компонентный Паскаль развивалось в направлении снижения сложности синтаксиса. При этом несмотря на расширение языка, объём формального описания синтаксиса Оберона-2 меньше, чем у классического Оберона за счёт оптимизация описания: полный синтаксис описан всего в 33 предложениях по расширенной форме Бэкуса — Наура[5]:

Модуль           = 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. Язык программирования Оберон-2 Архивная копия от 28 марта 2022 на Wayback Machine, Х. Мёссенбёк, Н. Вирт
  2. A Description of the Oberon-2 Language, Paul Floyd Архивная копия от 5 сентября 2012 на Wayback Machine (англ.)
  3. XDS Family of Products. Дата обращения: 18 августа 2012. Архивировано из оригинала 23 августа 2011 года.
  4. компилятор Оберон-2 в байт-код виртуальной машины Java ([[Java Virtual Machine]]). Дата обращения: 20 апреля 2022. Архивировано 30 сентября 2021 года.
  5. Х. Мёссенбёк, Н. Вирт, 1993. Дата обращения: 21 августа 2012. Архивировано из оригинала 2 марта 2010 года.