Турбо Паскаль 5.0
Описание подготовлено И. Назаровой
Буква="A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|
"S"|"T"|"U"|"V"|"W"|"Z"|"X"|"Y"|"a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|
"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"z"|"x"|"y".
Цифра="1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".
ШестнадцатиричнаяЦифра=Цифра|"A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f".
ИдентификаторМетки=СоставнойИдентификатор.
ИдентификаторКонстанты=СоставнойИдентификатор.
ИдентификаторТипа=СоставнойИдентификатор.
ИдентификаторПеременной=СоставнойИдентификатор.
ИдентификаторПроцедуры=СоставнойИдентификатор.
ИдентификаторФункции=СоставнойИдентификатор.
Идентификатор=Буква{Буква|Цифра|ЗнакПодчеркивания}.
ЗнакПодчеркивания="_".
ИдентификаторПрограммы=Идентификатор.
ИдентификаторМодуля=Идентификатор.
ИдентификаторПоля=Идентификатор.
СоставнойИдентификатор=[ИдентификаторМодуля"."]Идентификатор.
Метка=ПоследовательностьЦифр|Идентификатор.
ПоследовательностьШестнадцатиричныхЦифр=ШестнадцатиричнаяЦифра
{ШестнадцатиричнаяЦифра}.
ПоследовательностьЦифр=Цифра{Цифра}.
ЦелоеБезЗнака=(ПоследовательностьЦифр)|("$"ПоследовательностьЦифр).
Знак="+"|"-".
ВещественноеБезЗнака=(ПоследовательностьЦифр)("."ПоследовательностьЦифр
МасштабныйМножитель)|("."ПоследовательностьЦифр)|МасштабныйМножитель.
МасштабныйМножитель=("E"|"e")[Знак]ПоследовательностьЦифр.
ЧислоБезЗнака=ЦелоеБезЗнака|ВещественноеБезЗнака.
ЧислоСоЗнаком=[Знак]ЧислоБезЗнака.
СтрокаСимволов="'"{СтрочныйСимвол}"'".
ОписаниеКонстанты=Идентификатор"="Константа";".
Константа=([Знак]ИдентификаторКонстанты)|ЧислоСоЗнаком|СтрокаСимволов.
СтрочныйСимвол=(символ)|("'""'").
ОператорInline=(INLINE"(")(ЗаписьВоВнутреннемМашинномКоде|"/")")".
ЗаписьВоВнутреннемМашинномКоде=(["<"|">"]Константа)|(ИдентификаторПеременной
[Знак Константа{Знак Константа}]).
Блок=РазделОписания РазделОператоров.
РазделОписания={[РазделОписанияМеток|РазделОписанияКонстант|РазделОписанияТипов
|РазделОписанияПеременных|РазделОписанияПроцедурИФункций]}.
РазделОписанияМеток=LABEL Метка{","Метка}";".
РазделОписанияКонстант=(CONST)(ОписаниеКонстанты|ОписаниеТипизированнойКонстанты
){ОписаниеКонстанты|ОписаниеТипизированнойКонстанты}.
РазделОписанияТипов=TYPE ОписаниеТипа {ОписаниеТипа}.
РазделОписанияПеременных=VAR ОписаниеПеременной {ОписаниеПеременной}.
РазделОператоров=СоставнойОператор.
РазделОписанияПроцедурИФункций=ОписаниеПроцедуры | ОписаниеФункции.
ОписаниеТипа=Идентификатор "=" Тип ";".
Тип=ПростойТип|ТипУказатель|СтруктурныйТип|СтроковыйТип|ИдентификаторТипа.
ПростойТип=ПорядковыйТип|ВещественныйТип.
ПорядковыйТип=ОтрезокТипа|ПеречислимыйТип|ИдентификаторПорядковогоТипа.
ИдентификаторПорядковогоТипа=ИдентификаторТипа.
ВещественныйТип=ИдентификаторВещественногоТипа.
ИдентификаторВещественногоТипа=ИдентификаторТипа.
ПеречислимыйТип="(" СписокИдентификаторов ")".
СписокИдентификаторов=Идентификатор{","Идентификатор}.
ОтрезокТипа=Константа ".." Константа.
СтроковыйТип=STRING["["ЦелоеБезЗнака"]"].
СтруктурныйТип=([PACKED])(ТипМассив|МножественныйТип|ФайловыйТип|ТипЗапись).
ТипМассив=ARRAY "["ИндексныйТип{","ИндексныйТип} "]" OF Тип.
ИндексныйТип=ПорядковыйТип.
ТипЗапись=RECORD [СписокПолей] END.
СписокПолей=((ФиксированнаяЧасть [";"ВариантнаяЧасть])|ВариантнаяЧасть)[";"].
ФиксированнаяЧасть=СписокИдентификаторов ":"Тип{";"СписокИдентификаторов
":" Тип}.
ВариантнаяЧасть=CASE[Идентификатор":"]ТипПоляПризнака OF Вариант{";"Вариант}.
ТипПоляПризнака=ИдентификаторПорядковогоТипа.
Вариант=Константа{","Константа} ":" "(" [СписокПолей] ")".
МножественныйТип=SET OF ПорядковыйТип.
ФайловыйТип=FILE [OF Тип].
ТипУказатель="^"БазовыйТип.
БазовыйТип=ИдентификаторТипа.
ОписаниеПеременной=СписокИдентификаторов ":" Тип [АбсолютноеПредложение] ";".
АбсолютноеПредложение=(ABSOLUTE) ((ЦелоеБезЗнака ":" ЦелоеБезЗнака)|
ИдентификаторПеременной).
СсылкаНаПеременную=(ИдентификаторПеременной|ПриведенныйТипПеременной|
ВызовФункции) {Квалификатор}.
Квалификатор=Индекс|ДесигнаторПоля|"^".
Индекс="[" Выражение {"," Выражение} "]".
ДесигнаторПоля="." ИдентификаторПоля.
ПриведенныйТипПеременной=ИдентификаторТипа "(" СсылкаНаПеременную ")".
ОписаниеТипизированнойКонстанты=Идентификатор":"Тип"="ТипизированнаяКонстанта.
ТипизированнаяКонстанта=Константа|КонстантаМассив|КонстантаЗапись|
КонстантаМножество|NIL.
КонстантаМассив="("ТипизированнаяКонстанта{","ТипизированнаяКонстанта}")".
КонстантаЗапись="(" ИдентификаторПоля ":"ТипизированнаяКонстанта{";"
ИдентификаторПоля ":"ТипизированнаяКонстанта} ")".
КонстантаМножество="["[КонстантаЭлемент{","КонстантаЭлемент}]"]".
КонстантаЭлемент=Константа[".."Константа].
Множитель=КонстантаБезЗнака | ("("Выражение")") | (NOT Множитель) |
ВызовФункции | ОписательМножества | ПриведениеТипаЗначений | ((["@"]
СсылкаНаПеременную)| ("@"(ИдентификаторПроцедуры|ИдентификаторФункции))).
КонстантаБезЗнака=ЧислоБезЗнака|СтрокаСимволов|ИдентификаторКонстанты|NIL.
Терм=(Множитель){("*"|"/"|DIV|MOD|AND|SHL|SHR)Множитель}.
ПростоеВыражение=(Терм){("+"|"."|OR|XOR)Терм}.
Выражение=(ПростоеВыражение)[("<"|"<="|">"|">="|"<>"|IN) ПростоеВыражение].
ВызовФункции=ИдентификаторФункции[СписокФактическихПараметров].
СписокФактическихПараметров=ОператорПроцедуры"("ФактическийПараметр{","ФактическийПараметр}")".
ФактическийПараметр=Выражение|СсылкаНаПеременную.
ОписательМножества="[" [ГруппаЭлементов{"," ГруппаЭлементов}]"]".
ГруппаЭлементов=Выражение[".."Выражение].
ПриведениеТипаЗначений=ИдентификаторТипа "("Выражение")".
Оператор=[Метка ":"][ПростойОператор|СтруктурныйОператор].
ПростойОператор=ОператорПрисваивания|ОператорПроцедуры|ОператорПерехода.
ОператорПрисваивания=(СсылкаНаПеременную|Идентификатор) ":="Выражение.
ОператорПроцедуры =ИдентификаторПроцедуры[СписокФактическихПараметров].
ОператорПерехода=GOTO Метка.
СтруктурныйОператор=СоставнойОператор|УсловныйОператор|ОператорЦикла.
СоставнойОператор=BEGIN Оператор {";" BEGIN Оператор}END.
УсловныйОператор=ОператорIf|ОператорCase.
ОператорIf=IF Выражение THEN Оператор [ELSE Оператор].
ОператорCase=CASE OF Case{";"Case}[ELSE Оператор][";"] END.
Case=Константа{","Константа}".."Константа":"Оператор.
ОператорЦикла=ОператорRepeat|ОператорWhile|ОператорFor.
ОператорRepeat=REPEAT Оператор{";"Оператор} UNTIL Оператор.
ОператорWhile=WHILE Выражение DO Оператор.
ОператорFor=(FOR УправляющаяяПеременная ":=" НачальноеЗначение)(TO|DOWNTO)
КонечноеЗначение DO Оператор.
УправляющаяяПеременная=ИдентификаторПеременной.
НачальноеЗначение=Выражение.
КонечноеЗначение=Выражение.
ОператорПрисоединения=WITH СсылкаНаПеременнуюТипаЗапись {","
СсылкаНаПеременнуюТипаЗапись } DO Оператор.
СсылкаНаПеременнуюТипаЗапись=СсылкаНаПеременную.
ОписаниеПроцедуры=ЗаголовокПроцедуры ";" ТелоПроцедуры ";".
ЗаголовокПроцедуры=PROCEDURE Идентификатор [СписокФормальныхПараметров].
СписокФормальныхПараметров="(" ОписаниеПараметров {";"ОписаниеПараметров}")".
ОписаниеПараметров=[VAR] СписокИдентификаторов [":" ТипПараметра ].
ТипПараметра=ИдентификаторТипа|STRING|FILE.
ТелоПроцедуры=(([INTERRUPT ";"])(Блок|FORWARD|EXTERNAL))|(ОператорInline).
ОписаниеФункции=ЗаголовокФункции ";" ТелоФункции ";".
ЗаголовокФункции=FUNCTION Идентификатор [СписокФормальныхПараметров] ":"
ТипРезультата.
ТипРезультата=ИдентификаторТипа | STRING.
ТелоФункции=Блок|FORWARD|EXTERNAL|ОператорInline.
Программа=[ЗаголовокПрограммы ";"] [ПредложениеИспользования] Модуль.
ЗаголовокПрограммы=PROGRAM Идентификатор ["("ПараметрыПрограммы")"].
ПараметрыПрограммы=СписокИдентификаторов.
ПредложениеИспользования=USES Идентификатор {","Идентификатор} ";".
Модуль=ЗаголовокМодуля ";" ИнтерфейснаяСекция СекцияРеализации
СекцияИнициализации "." .
ЗаголовокМодуля=UNIT ИдентификаторМодуля .
ИнтерфейснаяСекция=INTERFASE [ПредложениеИспользования] {[РазделОписанияТипов|
РазделОписанияКонстант|РазделОписанияПеременных|РазделЗаголовковПроцедурИФункций]}.
РазделЗаголовковПроцедурИФункций = ( ЗаголовокПроцедуры | ЗаголовокФункции )
";" [ОператорInline ";"].
СекцияРеализации = IMPLEMENTATION [ ПредложениеИспользования ]
{ [ РазделОписанияМеток|РазделОписанияКонстант|РазделОписанияТипов|
РазделОписанияПеременных|РазделОписанияПроцедурИФункций ] } .
СекцияИнициализации=[ ОператорнаяЧасть ] END.
ОператорнаяЧасть=BEGIN Оператор {";" Оператор}.