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

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

Основные дополнения: добавлены процедуры, связанные с типом, допускающие переопределение для порождённых типов (приблизительный аналог виртуальных методов в других объектно-ориентированных языках); в язык возвращен оператор цикла с шагом FOR; добавлена возможность экспорта описаний в режиме «только для чтения»Язык программирования Оберон-2 , Х. Мёссенбёк, Н. ВиртA Description of the Oberon-2 Language, Paul Floyd .

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

Примечания

O O O Категория:Языки программирования семейства Оберона Категория:Программное обеспечение ETHZ Категория:Языки программирования с автоматическим управлением памятью