Ада
Описание подготовлено Н. Шумиловой
ГрафСимвол = ОснГрафСимвол | СтрочБуква | ДополСпецСимвол .
ОснГрафСимвол = ПрописБуква | Цифра | СпецСимвол | СимволПробела .
ОснСимвол = ОснГрафСимвол | символупрформатом .
СтрочБуква = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" |
"i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" |
"y" | "z" .
СимволПробела = " " .
ДополСпецСимвол = "!" | "$" | "%" | "?" | "@" | "[" | "]" |
"\" | "^" | "{" | "}" | "`" | "~" .
ПрописБуква = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" |
"I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" |
"Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" |
"Y" | "Z" .
Цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
"8" | "9" .
СпецСимвол = "кав" | "#" | "&" | "'" | "(" | ")" | "*" | "+" |
"," | "-" | "." | "/" | ";" | ":" |"<" | "=" |
">" | "|" .
Идентификатор = Буква { Буква | Цифра } .
Буква = ПрописБуква | СтрочБуква .
ЧислЛитерал = ДесятичЛитерал | ЛитералСОснованием .
ДесятичЛитерал = Целое [ Целое ] [ Порядок ] .
Целое = Цифра { Цифра } .
Порядок = "E" [ "+" | "-" ] Цифра { Цифра } .
ЛитералСОснованием = Основание "#" ЦелоеСОснованием
[ "." ЦелоеСОснованием ] "#" [ Порядок ] .
Основание = Целое .
ЦелоеСОснованием = РасширЦифра { РасширЦифра } .
РасширЦифра = Цифра | Буква .
СимвЛитерал = "'" ГрафСимвол "'" .
СтрЛитерал = '"' { ГрафСимвол } '" '.
Прагма = PRAGMA Идентификатор [ "(" СопостАрг { "," СопостАрг } ")" ] .
СопостАрг = [ ИдентификаторАргумента "=" ">" ] Имя
| [ ИдентификаторАргумента "=" ">" ] Выраж .
ИдентификаторАргумента = Идентификатор .
ОснОписание = ОписОбъекта | ОписТипа | ОписПодпрогр | ОписЗадачи |
ОписИсключения | ОписПереимен | ОписЧисла | ОписПодтипа |
ОписПакета | ОписНастройки | КонкретизацияНастройки |
ОписСубконст .
ОписОбъекта = СписокИдентификаторов ":" [ CONSTANT ]
УказПодтипа [ ":" "=" Выраж ] ";"
| СписокИдентификаторов ":" [ CONSTANT ]
ОпрОгранИндексТипа [ ":" "=" Выраж ] .
ОписЧисла = СписокИдентификаторов ":" CONSTANT ":" "=" УниверсСтатичВыраж .
УниверсСтатичВыраж = Выраж .
СписокИдентификаторов = Идентификатор { "," Идентификатор } .
ОписТипа = ПолноеОписТипа | НеполноеОписТипа | ОписЛичТипа .
ПолноеОписТипа = TYPE Идентификатор [ РазделДискр ] IS ОпрТипа .
ОпрТипа = ОпрПеречислТипа | ОпрЦелТипа | ОпрВещТипа | ОпрИндексТипа |
ОпрИменТипа | ОпрСсылочТипа | ОпрПроизводТипа .
ОписПодтипа = SUBTYPE Идентификатор IS УказПодтипа .
УказПодтипа = ОбознТипа [ Ограничение ] .
ОбознТипа = ИмяТипа | ИмяПодтипа .
ИмяТипа = Имя .
ИмяПодтипа = Имя .
Ограничение = ОгранДиапазона | ОгранПлавТипа | ОгранФиксирТипа |
ОгранИндекса | ОгранДискр .
ОпрПроизводТипа = NEW УказПодтипа .
ОгранДиапазона = RANGE Диапазон .
Диапазон = АтрибутДиапазона | ПростВыраж ".." ПростВыраж .
АтрибутДиапазона = Атрибут .
ОпрПеречислТипа = "(" СпецЛитералаПеречисления
{ "," СпецЛитералаПеречисления } ")" .
СпецЛитералаПеречисления = ЛитералПеречисления .
ЛитералПеречисления = Идентификатор | СимвЛитерал .
ОпрЦелТипа = ОгранДиапазона .
ОпрВещТипа = ОгранПлавТипа | ОгранФиксирТипа .
ОгранПлавТипа = ОпрТочнПлавТипа [ ОгранДиапазона ] .
ОпрТочнПлавТипа = DIGITS СтатичПростВыраж .
СтатичПростВыраж = ПростВыраж .
ОгранФиксирТипа = ОпрТочнФиксирТипа [ ОгранДиапазона ] .
ОпрТочнФиксирТипа = DELTA СтатичПростВыраж .
ОпрИндексТипа = ОпрНеогрИндексТипа | ОпрОгранИндексТипа .
ОпрНеогрИндексТипа = ARRAY "(" ОпрПодтипаИндекса { "," ОпрПодтипаИндекса } ")"
OF УказПодтипаКомпоненты .
УказПодтипаКомпоненты = УказПодтипа .
ОпрОгранИндексТипа = ARRAY ОгранИндекса OF УказПодтипаКомпоненты .
ОпрПодтипаИндекса = ОбознТипа RANGE "<" ">" .
ОгранИндекса = "(" ДискрДиапазон [ "," ДискрДиапазон ] ")".
ДискрДиапазон = УказДискретПодтипа | Диапазон .
УказДискретПодтипа = УказПодтипа .
ОпрИменТипа = RECORD СписКомпонент END RECORD .
СписКомпонент = ОписКомпоненты { ОписКомпоненты } |
{ ОписКомпоненты } РазделВар | NULL .
ОписКомпоненты = СписокИдентификаторов ":" ОпрПодтипаКомпоненты [ ":" "="
Выраж ] .
ОпрПодтипаКомпоненты = УказПодтипа .
РазделДискр = "(" СпецДискр { ";" СопостДискр } ")" .
СпецДискр = СписокИдентификаторов ":" ОбознТипа [ ":" "=" Выраж ] .
ОгранДискр = "(" СопостДискр { "," СопостДискр } ")" .
СопостДискр = [ ПростИмяДискр { "|" ПростИмяДискр } "=" ">" ] Выраж .
РазделВар = CASE ПростИмяДискр IS Вар { Вар } END CASE .
ПростИмяДискр = ПростИмя .
Вар = WHEN Выбор { "|" Выбор } "=" ">" СписКомпонент .
Выбор = ПростВыраж | ДискрДиапазон | OTHERS | ПростИмяКомпоненты .
ПростИмяКомпоненты = ПростИмя .
ОпрСсылочТипа = ACCESS Идентификатор [ РазделДискр ] .
НеполноеОписТипа = TYPE Идентификатор [ РазделДискр] .
РаздОпис = { ОснЭлОпис } { ДополЭлОпис } .
ОснЭлОпис = ОснОписание | СпецПредставления | СпецИспол .
ДополЭлОпис = Тело
| ОписПодпрогр | ОписПакета | ОписЗадачи | ОписНастройки
| СпецИспол | КонкретизацияНастройки .
Тело = СоотвТело | СледТела .
СоотвТело = ТелоПодпрогр | ТелоПакета | ТелоЗадачи .
Имя = ПростИмя | СимвЛитерал | ЗнакОперации | ИндексКомпонента |
Отрезок | ИменКомпонента | Атрибут .
ПростИмя = Идентификатор .
Префикс = Имя | ВызовФункции .
ИндексКомпонента = Префикс "(" Выраж { "," Выраж } ")" .
Отрезок = Префикс "(" ДискрДиапазон ")" .
ИменКомпонента = Префикс "." Постфикс .
Постфикс = ПростИмя | СимвЛитерал | ЗнакОперации | ALL .
Атрибут = Префикс "'" ОбознАтрибута .
ОбознАтрибута = ПростИмя [ "(" УниверсСтатичВыраж ")"] .
Агрегат = "(" СопостКомпонент { "," СопостКомпонент } ")" .
СопостКомпонент = [ Выбор { "|" Выбор } "=" ">" ] Выраж .
Выраж = Отношение { AND Отношение } | Отношение { AND THEN Отношение }
| Отношение { OR Отношение } | Отношение { OR ELSE Отношение}
| Отношение { XOR Отношение } .
Отношение = ПростВыраж [ ОперОтнош ПростВыраж ] | ПростВыраж [ NOT ] IN
Диапазон | ПростВыраж [ NOT ] IN ОбознТипа .
ПростВыраж = [ УнарАддитОперация ] Слаг { БинарАддитОперация Слаг } .
Слаг = Множ { МультОперация Множ } .
Множ = Первич [ "**" Первич ] | ABS Первич | NOT Первич .
Первич = ЧислЛитерал | NULL | Агрегат | СтрЛитерал | Имя | Генератор
| ВызовФункции | ПреобразТипа | КвалифицВыраж | "(" Выраж ")" .
ЛогичОпер = AND | OR | XOR .
ОперОтнош = "=" | "/=" | "<" | "<=" | ">" | "="">" .
БинарАддитОперация = "+" | "-" | "&" .
УнарАддитОперация = "+" | "-" .
МультОперация = "*" | "/" | MOD | REM .
ОперВысшПриоритета = "**" | ABS | NOT .
ПреобразТипа = ОбознТипа "(" Выраж ")" .
КвалифицВыраж = ОбознТипа "'" "(" Выраж ")" | ОбознТипа "'" Агрегат .
Генератор = NEW УказПодтипа | NEW КвалифицВыраж .
ПоследОператоров = Оператор { Оператор } .
Оператор = { Метка } ПростОператор | { Метка } СоставОператор .
ПростОператор = ПустОпер | ОперПрисв | ОперВызПроц | ОперВых
| ОперВозвр | ОперПерех | ОперВызоваВхода | ОперЗадержки
| ОперПрекращ | ОперВозбуждения | ОперКода .
СоставОператор = УсловОпер | ОперВыбор | ОперЦикл | ОперБлок
| ОперПринятия | ОперОтбора .
Метка = "<" "<" ПростИмяМетки ">" ">" .
ПростИмяМетки = ПростИмя .
ПустОпер = NULL .
ОперПрисв = ИмяПеременной ":=" Выраж .
ИмяПеременной =Имя .
УсловОпер = IF Условие THEN ПоследОператоров { ELSIF Условие THEN
ПоследОператоров } [ ELSE ПоследОператоров ]
END IF .
Условие = ЛогичВыраж .
ЛогичВыраж = Выраж .
ОперВыбор = CASE Выраж IS АльтерОперВыбор { АльтерОперВыбор }
END CASE .
АльтерОперВыбор = WHEN Выбор { "|" Выбор } "=" ">" ПоследОператоров .
ОперЦикл = [ ПростИмяЦикла ":" ] [ СхемаИтерации ] LOOP
ПоследОператоров END LOOP [ ПростИмяЦикла ] .
ПростИмяЦикла =ПростИмя .
СхемаИтерации = WHILE Условие | FOR СпецПараметраЦикла .
СпецПараметраЦикла = Идентификатор IN [ REVERSE ] ДискрДиапазон .
ОперБлок = [ ПростИмяБлока ":" ] [ DECLARE РаздОпис ] BEGIN ПоследОператоров
[ EXCEPTION ОбрабИсключения { ОбрабИсключения } ]
END [ ПростИмяБлока ] .
ПростИмяБлока = ПростИмя .
ОперВых = EXIT [ ИмяЦикла ] [ WHEN Условие ] .
ИмяЦикла = Имя .
ОперВозвр = RETURN [ Выраж ] .
ОперПерех = GOTO ИмяМетки .
ИмяМетки =Имя .
ОписПодпрогр = СпецПодпрогр .
СпецПодпрогр = PROCEDURE Идентификатор [ РазделФормальнПараметров ]
| FUNCTION Обозн [ РазделФормальнПараметров ]
RETURN ОбознТипа .
Обозн = Идентификатор | ЗнакОперации .
ЗнакОперации = СтрЛитерал .
РазделФормальнПараметров = "(" СпецПараметра { ";" СпецПараметра } ")" .
СпецПараметра = СписокИдентификаторов ":" Вид ОбознТипа [ ":=" Выраж ] .
Вид = [ IN ] | IN OUT | OUT .
ТелоПодпрогр = СпецПодпрогр IS [ РаздОпис ] BEGIN ПоследОператоров
[ EXCEPTION ОбрабИсключения { ОбрабИсключения } ]
END [ Обозн ] .
ОперВызПроц = ИмяПроц [ РазделФактичПараметров ] .
ВызовФункции = ИмяФункц [ РазделФактичПараметров ] .
ИмяПроц =Имя .
ИмяФункц = Имя .
РазделФактичПараметров = "(" СопостПараметров { ","
СопостПараметров } ")" .
СопостПараметров = [ ФормПараметр "=" ">" ] ФактичПараметр .
ФормПараметр = ПростИмяПараметра .
ПростИмяПараметра = ПростИмя .
ФактичПараметр = Выраж | ИмяПеременной | ОбознТипа "(" ИмяПеременной ")" .
ОписПакета = СпецПакета .
СпецПакета = PACKAGE Идентификатор IS { ОснЭлОпис } [ PRIVATE
{ ОснЭлОпис } ] END [ ПростИмяПакета ] .
ПростИмяПакета =ПростИмя .
ТелоПакета = PACKAGE BODY ПростИмяПакета IS [ РаздОпис ]
[ BEGIN ПоследОператоров [ EXCEPTION ОбрабИсключения
{ ОбрабИсключения } ] ] END [ ПростИмяПакета ] .
ОписЛичТипа = TYPE Идентификатор [ РазделДискр ] IS [ LIMITED ] PRIVATE .
ОписСубконст = СписокИдентификаторов ":" CONSTANT ОбознТипа .
СпецИспол = USE ИмяПакета { "," ИмяПакета } .
ИмяПакета = Имя .
ОписПереимен = Идентификатор ":" ОбознТипа RENAMES ИмяОбъекта ";"
| Идентификатор ":" EXCEPTION RENAMES ИмяИсключ ";"
| PACKAGE Идентификатор RENAMES ИмяПакета ";"
| СпецПодпрогр RENAMES ИмяПодпрИлиВхода .
ИмяПодпрИлиВхода =Имя .
ИмяИсключ = Имя .
ИмяОбъекта =Имя .
ОпрСсылочТипа = ACCESS УказПодтипа .
НеполОписТипа = TYPE Идентификатор [ РазделДискр ] .
ОписЗадачи = СпецЗадачи .
СпецЗадачи = TASK [ TYPE ] Идентификатор [ IS { ОписВхода }
{СпецПредставления } END [ ПростИмяЗадачи ] ] .
ТелоЗадачи = TASK BODY ПростИмяЗадачи IS [ РаздОпис ] BEGIN
ПоследОператоров [ EXCEPTION ОбрабИсключения { ОбрабИсключения } ]
END [ ПростИмя ] .
ПростИмяЗадачи =ПростИмя .
ОписВхода = ENTRY Идентификатор [ "(" ДискрДиапазон ")" ]
[ РазделФормальнПараметров] .
ОперВызоваВхода = ИмяВхода [ РазделФактичПараметров ] .
ИмяВхода = Имя.
ОперПринятия = ACCEPT ПростИмя [ "(" ИндексВхода ")" ]
[ РазделФормальнПараметров ] [ DO ПоследОператоров
END [ ПростИмяВхода ]] .
ПростИмяВхода =ПростИмя.
ИндексВхода = Выраж .
ОперЗадержки = DELAY ПростВыраж .
ОперОтбора = ОтборСОжид | УсловВызовВхода | ВременВызовВхода .
ОтборСОжид = SELSCT АльтерОтбора { OR АльтерОтбора } [ ELSE
ПоследОператоров ] END SELSCT .
АльтерОтбора = [ WHEN Условие "=" ">" ] АльтерОтбораСОжид .
АльтерОтбораСОжид = АльтерПринятия | АльтерЗадержки | АльтерЗавершения .
АльтерПринятия = ОперПринятия [ ПоследОператоров ] .
АльтерЗадержки = ОперЗадержки [ ПоследОператоров ] .
АльтерЗавершения = TERMINATE .
УсловВызовВхода = SELSCT ОперВызоваВхода [ ПоследОператоров ]
ELSE ПоследОператоров END SELSCT .
ВременВызовВхода = SELSCT ОперВызоваВхода [ ПоследОператоров ]
OR АльтерЗадержки END SELSCT .
ОперПрекращ = ABORT ИмяЗадачи { "," Имя } .
ИмяЗадачи =Имя .
Компиляция = { КомпилируемыйМодуль }.
КомпилируемыйМодуль = СпецКонтекста БиблиотечныйМодуль
|СпецКонтекста ВторичныйМодуль .
БиблиотечныйМодуль = ОписПодпрогр | ОписПакета |ОписНастройки
|КонкретизацияНастройки | ТелоПодпрогр .
ВторичныйМодуль = ТелоБиблиотечногоМодуля |Субмодуль .
ТелоБиблиотечногоМодуля = ТелоПодпрогр | ТелоПакета .
СпецКонтекста = { СпецСовместности { СпецИспол } } .
СпецСовместности = WITH ПростИмяМодуля { "," ПростИмяМодуля } .
ПростИмяМодуля = ПростИмя .
СледТела = СпецПодпрогр IS SEPARATE ";" | PACKAGE BODY ПростИмяПакета
IS SEPARATE ";" | TASK BODY ПростИмяЗадачи IS SEPARATE .
Субмодуль = SEPARATE "(" ИмяРодитМодуля ")" СоотвТело .
ИмяРодитМодуля = Имя .
ОписИсключения = СписокИдентификаторов ":" EXCEPTION .
ОбрабИсключения = WHEN ВыборИсключения { "|" ВыборИсключения } "=" ">"
ПоследОператоров .
ВыборИсключения = ИмяИсключ | OTHERS .
ОперВозбуждения = RAISE [ ИмяИсключ ] .
ОписНастройки = СпецНастройки .
СпецНастройки = РазделФормальнПараметровНастройки СпецПодпрогр
| РазделФормальнПараметровНастройки СпецПакета.
РазделФормальнПараметровНастройки = GENERIC { ОписПараметраНастройки } .
ОписПараметраНастройки = СписокИдентификаторов [ IN [ OUT ] ]
ОбознТипа [ ":=" Выраж ] ";" | TYPE Идентификатор
IS ОпрНастТипа ";" | ОписЛичТипа | WITH
СпецПодпрогр [ IS Имя ] ";" |
WITH СпецПодпрогр [ IS "<" ">" ].
ОпрНастТипа = "(" "<" ">" ")" | RANGE "<" ">" | DELTA "<" ">"
| ОпрИндексТипа |ОпрСсылочТипа .
КонкретизацияНастройки = PACKAGE Идентификатор IS NEW ИмяНастрПакета
[РазделФактичПараметровНастройки] ";"
| PROCEDURE Идентификатор IS NEW ИмяНастрПроцедуры
[РазделФактичПараметровНастройки] ";"
| FUNCTION Обозн IS NEW ИмяНастрФункции
[РазделФактичПараметровНастройки] .
РазделФактичПараметровНастройки = "(" СопостПараметровНастройки
{ "," СопостПараметровНастройки } ")".
СопостПараметровНастройки = [ФормальныйПараметрНастройки "=" ">" ]
ФормальныйПараметрНастройки.
ФормальныйПараметрНастройки = ПростИмяПараметра | ЗнакОперации .
ФактичПараметрНастройки = Выраж | ИмяПеременной | ИмяПодпрогр | ИмяВхода
| ОбознТипа .
ИмяПодпрогр = Имя .
ИмяНастрПроцедуры = Имя .
ИмяНастрПакета =Имя .
ИмяНастрФункции = Имя .
СпецПредставления = СпецПредставленияТипа | СпецАдреса .
СпецПредставленияТипа = СпецДлины | СпецПредставленияПеречисления
| СпецПредставленияЗаписи СпецПредставленияПеречисления.
СпецДлины = FOR Атрибут USE ПростВыраж .
СпецПредставленияПеречисления = FOR ПростИмяТипа USE Агрегат .
ПростИмяТипа = ПростИмя .
СпецПредставленияЗаписи = FOR ПростИмяТипа USE
RECORD [ СпецВыравнивания ] { СпецКомпоненты }
END RECORD .
СпецВыравнивания = AT MOD СтатичПростВыраж .
СпецКомпоненты = ИмяКомпоненты AT СтатичПростВыраж RANGE СтатичДиапазон .
ИмяКомпоненты = Имя.
СтатичДиапазон = Диапазон .
СпецАдреса = FOR ПростИмя USE AT ПростВыраж .
ОперКода = ОбознТипа | АгрегатЗаписи .
АгрегатЗаписи = Агрегат .