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