Oberon-2 | |
---|---|
![]() | |
Класс языка | императивный, структурированный, модульный, объектно-ориентированный |
Появился в | 1991 |
Автор | Никлаус Вирт, Ханспетер Мёссенбёк |
Система типов | статическая, сильная |
Испытал влияние | Oberon |
Повлиял на | Компонентный Паскаль, Go |
Оберон-2 (Oberon-2) является расширением языка программирования Оберон в котором добавлены элементы метапрограммирования (ограниченная рефлексия) и удобства для объектно-ориентированного программирования, открытые массивы и базовые типы указателей, поля доступные при экспорте только для чтения и восстановлен оператор FOR из Модулы-2.
Оберон-2 был разработан в 1991 году в Швейцарской высшей технической школе (Цюрих) Никлаусом Виртом и Ханспетером Мёссенбёком, которые теперь работают в Институте системного программного обеспечения (SSW) Университета им. Иоганна Кеплера в Линце (Австрия). Оберон-2 — расширенный набор Оберона и полностью с ним совместим. Оберон-2 стал переработкой конструкции Объектного Оберона.
Кратко дополнения, внесённые в Оберон-2, заключаются в следующем:
Любопытно, что несмотря на расширение языка, объем формального описания синтаксиса Оберона-2 меньше, чем у классического Оберона. Это произошло в результате оптимизации описания синтаксиса.
Существует оптимизирующий компилятор XDS[3] для Oberon-2;
Есть также компилятор языка Оберон-2[4] в байт-код виртуальной машины Java (Java Virtual Machine). Разработанный С.Свердловым (Вологда, ВГПУ) в 1998 году компилятор работает в Windows 95/NT. Генерирует файлы классов (.class), которые могут загружаться и исполняться виртуальной машиной языка Java. Позволяет создавать приложения и аплеты. Содержит стандартные для Оберона, так называемые Дубовые требования библиотеки а также интерфейсы для Java API.
Разработка семейства языков ALGOL — Pascal — Modula-2 — Oberon — Oberon-2 — Component Pascal отмечена редукцией сложности синтаксиса языка. Полный синтаксис языка Оберон-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 | "&".
Обозначение = УточнИдент {"." идент | "[" СписокВыраж "]" | "^" | "(" УточнИдент ")"}.
СписокВыраж = Выраж {"," Выраж}.
СписокИдент = ИдентОпр {"," ИдентОпр}.
УточнИдент = [идент "."] идент.
ИдентОпр = идент [ "*" | "-" ].
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .