В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633), страница 22
Текст из файла (страница 22)
 êà÷åñòâå ïðèìåðà ðàññìîòðèì ðåàëèçàöèþ àòðèáóòíîé ãðàììàòèêè èçïðèìåðà 5.5 (íåòðóäíî âèäåòü, ÷òî ãðàììàòèêà ÿâëÿåòñÿ Làòðèáóòíîé).148Ãëàâà 5. Ýëåìåíòû òåîðèè ïåðåâîäàvoid int_part(float * V0, int * P0){if (Map[InSym]==Digit){ int I=InSym;float V2;int P2;InSym=getInSym();int_part(&V2,&P2);*V0=I*exp(P2*ln(10))+V2;*P0=P2+1;}else {*V0=0;*P0=0;}}void fract_part(float * V0, int P0){if (Map[InSym]==Digit){ int I=InSym;float V2;int P2=P0+1;InSym=getInSym();fract_part(&V2,P2);*V0=I*exp(-P0*ln(10))+V2;}else {*V0=0;}}void number(){ float V1,V3,V0;int P;int_part(&V1,&P);if (InSym!='.') error();fract_part(&V3,1);V0=V1+V3;}5.3.
Àòðèáóòíûå ãðàììàòèêè1495.3.3. ßçûê îïèñàíèÿ àòðèáóòíûõ ãðàììàòèêÔîðìàëèçì àòðèáóòíûõ ãðàììàòèê îêàçàëñÿ î÷åíüóäîáíûì ñðåäñòâîì äëÿ îïèñàíèÿ ñåìàíòèêè ÿçûêîâ ïðîãðàììèðîâàíèÿ. Âìåñòå ñ òåì âûÿñíèëîñü, ÷òî ðåàëèçàöèÿ âû÷èñëèòåëåé äëÿ àòðèáóòíûõ ãðàììàòèê îáùåãî âèäàñòàëêèâàåòñÿ ñ áîëüøèìè òðóäíîñòÿìè.  ñâÿçè ñ ýòèì áûëî ñäåëàíî ìíîæåñòâî ïîïûòîê ðàññìàòðèâàòü òå èëè èíûåêëàññû àòðèáóòíûõ ãðàììàòèê, îáëàäàþùèõ ¾õîðîøèìè¿ñâîéñòâàìè. Ê ÷èñëó òàêèõ ñâîéñòâ îòíîñÿòñÿ ïðåæäå âñåãîïðîñòîòà àëãîðèòìà ïðîâåðêè àòðèáóòíîé ãðàììàòèêè íàçàöèêëåííîñòü è ïðîñòîòà àëãîðèòìà âû÷èñëåíèÿ àòðèáóòîâ äëÿ àòðèáóòíûõ ãðàììàòèê äàííîãî êëàññà.Àòðèáóòíûå ãðàììàòèêè èñïîëüçîâàëèñü äëÿ îïèñàíèÿ ñåìàíòèêè ÿçûêîâ ïðîãðàììèðîâàíèÿ è áûëî ñîçäàíîíåñêîëüêî ñèñòåì àâòîìàòèçàöèè ðàçðàáîòêè òðàíñëÿòîðîâ,îñíîâàííûõ íà ôîðìàëèçìå àòðèáóòíûõ ãðàììàòèê.
Îïûòèõ èñïîëüçîâàíèÿ ïîêàçàë, ÷òî ¾÷èñòûé¿ àòðèáóòíûé ôîðìàëèçì ìîæåò áûòü óñïåøíî ïðèìåí¼í äëÿ îïèñàíèÿ ñåìàíòèêè ÿçûêà, íî åãî èñïîëüçîâàíèå âûçûâàåò òðóäíîñòèïðè ñîçäàíèè òðàíñëÿòîðà. Ýòè òðóäíîñòè ñâÿçàíû êàê ññàìèì ôîðìàëèçìîì, òàê è ñ íåêîòîðûìè òåõíîëîãè÷åñêèìè ïðîáëåìàìè. Ê òðóäíîñòÿì ïåðâîãî ðîäà ìîæíî îòíåñòèíåñîîòâåòñòâèå ÷èñòî ôóíêöèîíàëüíîé ïðèðîäû àòðèáóòíîãî âû÷èñëèòåëÿ è ñâÿçàííîé ñ íåé íåóïîðÿäî÷åííîñòüþïðîöåññà âû÷èñëåíèÿ àòðèáóòîâ (÷òî â çíà÷èòåëüíîé ñòåïåíè ÿâëÿåòñÿ ïðåèìóùåñòâîì ýòîãî ôîðìàëèçìà) è óïîðÿäî÷åííîñòüþ ýëåìåíòîâ ïðîãðàììû.
Ýòî íåñîîòâåòñòâèåâåä¼ò ê òîìó, ÷òî ïðèõîäèòñÿ èäòè íà èñêóññòâåííûå ïðè¼ìû äëÿ èõ ñî÷åòàíèÿ. Òåõíîëîãè÷åñêèå òðóäíîñòè ñâÿçàíûñ ýôôåêòèâíîñòüþ òðàíñëÿòîðîâ, ïîëó÷åííûõ ñ ïîìîùüþàòðèáóòíûõ ñèñòåì. Êàê ïðàâèëî, êà÷åñòâî òàêèõ òðàíñëÿòîðîâ äîâîëüíî íèçêî èç-çà áîëüøèõ ðàñõîäîâ ïàìÿòè,íåýôôåêòèâíîñòè èñêóññòâåííûõ ïðè¼ìîâ, î êîòîðûõ áûëîñêàçàíî âûøå.Ó÷èòûâàÿ ýòî, ìû áóäåì âåñòè äàëüíåéøåå èçëîæåíèåíà ÿçûêå, ñî÷åòàþùåì îñîáåííîñòè àòðèáóòíîãî ôîðìàëèç-150Ãëàâà 5.
Ýëåìåíòû òåîðèè ïåðåâîäàìà è îáû÷íîãî ÿçûêà ïðîãðàììèðîâàíèÿ, â êîòîðîì ïðåäïîëàãàåòñÿ íàëè÷èå îïåðàòîðîâ, à çíà÷èò, è âîçìîæíîñòüóïðàâëåíèÿ ïîðÿäêîì èñïîëíåíèÿ îïåðàòîðîâ. Ýòîò ïîðÿäîê ìîæåò áûòü ïðèâÿçàí ê îáõîäó àòðèáóòèðîâàííîãî äåðåâà ðàçáîðà ñâåðõó âíèç ñëåâà íàïðàâî. ×òî êàñàåòñÿ ãðàììàòèêè âõîäíîãî ÿçûêà, òî ìû íå áóäåì ïðåäïîëàãàòü ïðèíàäëåæíîñòü å¼ îïðåäåë¼ííîìó êëàññó (íàïðèìåð, LL(1)èëè LR(1)). Áóäåì ñ÷èòàòü, ÷òî äåðåâî ðàçáîðà âõîäíîéïðîãðàììû óæå ïîñòðîåíî êàê ðåçóëüòàò ñèíòàêñè÷åñêîãî àíàëèçà è àòðèáóòíûå âû÷èñëåíèÿ îñóùåñòâëÿþòñÿ âðåçóëüòàòå îáõîäà ýòîãî äåðåâà. Òàêèì îáðàçîì, âõîäíàÿãðàììàòèêà àòðèáóòíîãî âû÷èñëèòåëÿ ìîæåò áûòü äàæåíåîäíîçíà÷íîé, ÷òî íå âëèÿåò íà ïðîöåññ àòðèáóòíûõ âû÷èñëåíèé.Ïðè çàïèñè ñèíòàêñèñà ìû áóäåì èñïîëüçîâàòü ðàñøèðåííóþ ÁÍÔ.
Ýëåìåíò ïðàâîé ÷àñòè ñèíòàêñè÷åñêîãî ïðàâèëà, çàêëþ÷¼ííûé â ñêîáêè [ ], ìîæåò îòñóòñòâîâàòü.Ýëåìåíò ïðàâîé ÷àñòè ñèíòàêñè÷åñêîãî ïðàâèëà, çàêëþ÷¼ííûé â ñêîáêè ( ), îçíà÷àåò âîçìîæíîñòü ïîâòîðåíèÿ îäèíèëè áîëåå ðàç. Ýëåìåíò ïðàâîé ÷àñòè ñèíòàêñè÷åñêîãî ïðàâèëà, çàêëþ÷¼ííûé â ñêîáêè [()], îçíà÷àåò âîçìîæíîñòüïîâòîðåíèÿ íîëü èëè áîëåå ðàç.
 ñêîáêàõ [ ] èëè [()]ìîæåò óêàçûâàòüñÿ ðàçäåëèòåëü êîíñòðóêöèé.Íèæå äàí ñèíòàêñèñ ÿçûêà îïèñàíèÿ àòðèáóòíûõ ãðàììàòèê. Ïðèâåä¼í òîëüêî ñèíòàêñèñ êîíñòðóêöèé, ñîáñòâåííî îïèñûâàþùèõ àòðèáóòíûå âû÷èñëåíèÿ. Ñèíòàêñèñ îáû÷íûõ âûðàæåíèé è îïåðàòîðîâ íå ïðèâîäèòñÿ îí îñíîâûâàåòñÿ íà Ñè.Àòðèáóòíàÿ ãðàììàòèêà::='ALPHABET'( ÎïèñàíèåÍåòåðìèíàëà ) ( Ïðàâèëî )ÎïèñàíèåÍåòåðìèíàëà::=ÈìÿÍåòåðìèíàëà'::' [( ÎïèñàíèåÀòðèáóòîâ / ';')]'.'ÎïèñàíèåÀòðèáóòîâ::=Òèï ( ÈìÿÀòðèáóòà / ',')Ïðàâèëî::='RULE' Ñèíòàêñèñ 'SEMANTICS' Ñåìàíòèêà'.'Ñèíòàêñèñ::=ÈìÿÍåòåðìèíàëà '::=' Ïðàâàÿ×àñòüÏðàâàÿ×àñòü::=[( ÝëåìåíòÏðàâîé×àñòè )]ÝëåìåíòÏðàâîé×àñòè::=ÈìÿÍåòåðìèíàëà5.3.
Àòðèáóòíûå ãðàììàòèêè151| Òåðìèíàë| '(' Íåòåðìèíàë [ '/' Òåðìèíàë ] ')'| '[' Íåòåðìèíàë ']'| '[(' Íåòåðìèíàë [ '/' Òåðìèíàë ] ')]'Ñåìàíòèêà::=[(ËîêàëüíîåÎáúÿâëåíèå / ';')][( Ñåìàíòè÷åñêîåÄåéñòâèå / ';')]Ñåìàíòè÷åñêîåÄåéñòâèå::=Ïðèñâàèâàíèå| [ Ìåòêà ] ÎïåðàòîðÏðèñâàèâàíèå::=Ïåðåìåííàÿ ':=' ÂûðàæåíèåÏåðåìåííàÿ::=ËîêàëüíàÿÏåðåìåííàÿ| ÀòðèáóòÀòðèáóò::=ËîêàëüíûéÀòðèáóò| ÃëîáàëüíûéÀòðèáóòËîêàëüíûéÀòðèáóò::=ÈìÿÀòðèáóòà '<' Íîìåð '>'ÃëîáàëüíûéÀòðèáóò::=ÈìÿÀòðèáóòà '<' Íåòåðìèíàë '>'Ìåòêà::=Öåëîå ':'| Öåëîå 'Å' ':'| Öåëîå 'À' ':'Îïåðàòîð::=Óñëîâíûé|ÎïåðàòîðÏðîöåäóðû|ÖèêëÏîÌíîæåñòâó|ÏðîñòîéÖèêë|ÖèêëÑÓñëîâèåìÎêîí÷àíèÿÎïèñàíèå àòðèáóòíîé ãðàììàòèêè ñîñòîèò èç ðàçäåëàîïèñàíèÿ àòðèáóòîâ è ðàçäåëà ïðàâèë.
Ðàçäåë îïèñàíèÿàòðèáóòîâ îïðåäåëÿåò ñîñòàâ àòðèáóòîâ äëÿ êàæäîãî ñèìâîëà ãðàììàòèêè è òèï êàæäîãî àòðèáóòà. Ïðàâèëà ñîñòîÿò èç ñèíòàêñè÷åñêîé è ñåìàíòè÷åñêîé ÷àñòè.  ñèíòàêñè÷åñêîé ÷àñòè èñïîëüçóåòñÿ ðàñøèðåííàÿ ÁÍÔ. Ñåìàíòè÷åñêàÿ ÷àñòü ïðàâèëà ñîñòîèò èç ëîêàëüíûõ îáúÿâëåíèé è ñåìàíòè÷åñêèõ äåéñòâèé.  êà÷åñòâå ñåìàíòè÷åñêèõ äåéñòâèéäîïóñêàþòñÿ êàê àòðèáóòíûå ïðèñâàèâàíèÿ, òàê è ñîñòàâíûå îïåðàòîðû.Ìåòêà â ñåìàíòè÷åñêîé ÷àñòè ïðàâèëà ïðèâÿçûâàåò âûïîëíåíèå îïåðàòîðà ê îáõîäó äåðåâà ðàçáîðà ñâåðõó-âíèçñëåâà íàïðàâî.
Êîíñòðóêöèÿ i : îïåðàòîð îçíà÷àåò, ÷òîîïåðàòîð äîëæåí áûòü âûïîëíåí ñðàçó ïîñëå îáõîäà i-é152Ãëàâà 5. Ýëåìåíòû òåîðèè ïåðåâîäàêîìïîíåíòû ïðàâîé ÷àñòè. Êîíñòðóêöèÿ i E : îïåðàòîðîçíà÷àåò, ÷òî îïåðàòîð äîëæåí áûòü âûïîëíåí, òîëüêî åñëèïîðîæäåíèå i-é êîìïîíåíòû ïðàâîé ÷àñòè ïóñòî. Êîíñòðóêöèÿ i A : îïåðàòîð îçíà÷àåò, ÷òî îïåðàòîð äîëæåí áûòüâûïîëíåí ïîñëå ðàçáîðà êàæäîãî ïîâòîðåíèÿ i-é êîìïîíåíòû ïðàâîé ÷àñòè (èìååòñÿ â âèäó êîíñòðóêöèÿ ïîâòîðåíèÿ).Êàæäîå ïðàâèëî ìîæåò èìåòü ëîêàëüíûå îïðåäåëåíèÿ(òèïîâ è ïåðåìåííûõ).  ôîðìóëàõ èñïîëüçóþòñÿ êàê àòðèáóòû ñèìâîëîâ äàííîãî ïðàâèëà (ëîêàëüíûå àòðèáóòû) è âýòîì ñëó÷àå ñîîòâåòñòâóþùèå ñèìâîëû óêàçûâàþòñÿ íîìåðàìè â ïðàâèëå (0 äëÿ ñèìâîëà ëåâîé ÷àñòè, 1 äëÿïåðâîãî ñèìâîëà ïðàâîé ÷àñòè, 2 äëÿ âòîðîãî ñèìâîëàïðàâîé ÷àñòè è ò.ä.), òàê è àòðèáóòû ñèìâîëîâ ïðåäêîâ ëåâîé ÷àñòè ïðàâèëà (ãëîáàëüíûå àòðèáóòû).
 ýòîì ñëó÷àåñîîòâåòñòâóþùèé ñèìâîë óêàçûâàåòñÿ èìåíåì íåòåðìèíàëà. Òàêèì îáðàçîì, íà äåðåâå îáðàçóþòñÿ îáëàñòè âèäèìîñòè àòðèáóòîâ: àòðèáóò ñèìâîëà èìååò îáëàñòü âèäèìîñòè,ñîñòîÿùóþ èç ïðàâèëà, â êîòîðîå ñèìâîë âõîäèò â ïðàâóþ÷àñòü, ïëþñ âñ¼ ïîääåðåâî, êîðíåì êîòîðîãî ÿâëÿåòñÿ ñèìâîë, çà èñêëþ÷åíèåì ïîääåðåâüåâ ïîòîìêîâ òîãî æå ñèìâîëà â ýòîì ïîääåðåâå.Çíà÷åíèå òåðìèíàëüíîãî ñèìâîëà äîñòóïíî ÷åðåç àòðèáóò VAL ñîîòâåòñòâóþùåãî òèïà.Ïðèìåð 5.9.
Àòðèáóòíàÿ ãðàììàòèêà èç ïðèìåðà 5.5 çàïèñûâàåòñÿ ñëåäóþùèì îáðàçîì:ALPHABETNum:: float V.Int:: float V;int P.Frac :: float V;int P.digit :: int VAL.RULENum ::= Int '.' FracSEMANTICSV<0>=V<1>+V<3>; P<3>=1.5.3. Àòðèáóòíûå ãðàììàòèêèRULEInt ::= eSEMANTICSV<0>=0; P<0>=0.RULEInt ::= digit IntSEMANTICSV<0>=VAL<1>*10**P<2>+V<2>; P<0>=P<2>+1.RULEFrac ::= eSEMANTICSV<0>=0.RULEFrac ::= digit FracSEMANTICSV<0>=VAL<1>*10**(-P<0>)+V<2>; P<2>=P<0>+1.153Ãëàâà 6.Ïðîâåðêàêîíòåêñòíûõ óñëîâèé6.1. Îïèñàíèå îáëàñòåé âèäèìîñòè èáëî÷íîé ñòðóêòóðûÇàäà÷åé êîíòåêñòíîãî àíàëèçà ÿâëÿåòñÿ óñòàíîâëåíèåñâîéñòâ îáúåêòîâ è èõ èñïîëüçîâàíèÿ.
Íàèáîëåå ÷àñòî ðåøàåìîé çàäà÷åé ÿâëÿåòñÿ îïðåäåëåíèå ñóùåñòâîâàíèÿ îáúåêòà è ñîîòâåòñòâèÿ åãî èñïîëüçîâàíèÿ êîíòåêñòó, ÷òî îñóùåñòâëÿåòñÿ ñ ïîìîùüþ àíàëèçà òèïà îáúåêòà. Ïîä êîíòåêñòîì çäåñü ïîíèìàåòñÿ âñÿ ñîâîêóïíîñòü ñâîéñòâ òåêóùåéòî÷êè ïðîãðàììû, íàïðèìåð, ìíîæåñòâî äîñòóïíûõ îáúåêòîâ, òèï âûðàæåíèÿ è ò.ä.Òàêèì îáðàçîì, íåîáõîäèìî õðàíèòü îáúåêòû è èõ òèïû,óìåòü íàõîäèòü ýòè îáúåêòû è îïðåäåëÿòü èõ òèïû, îïðåäåëÿòü õàðàêòåðèñòèêè êîíòåêñòà. Ñîâîêóïíîñòü äîñòóïíûõ âäàííîé òî÷êå îáúåêòîâ áóäåì íàçûâàòü ñðåäîé. Îáû÷íî ñðåäà ïðîãðàììû ñîñòîèò èç ÷àñòè÷íî óïîðÿäî÷åííîãî íàáîðàêîìïîíåíòE = {DS1 , DS2 , .
. . , DSn }6.1. Îïèñàíèå îáëàñòåé âèäèìîñòè è áëî÷íîé ñòðóêòóðû155Dhjg_\Zydhfihg_glZijh]jZffZijhp_^mjZ[ehdijhp_^mjZ[ehdijhp_^mjZ[ehdÐèñ. 6.1.Êàæäàÿ êîìïîíåíòà ýòî ìíîæåñòâî îáúÿâëåíèé, ïðåäñòàâëÿþùèõ ñîáîé ïàðû (èìÿ, òèï):DSi = {(èìÿj , òèïj ) | 1 6 j 6 ki }ãäå ïîä òèïîì áóäåì ïîäðàçóìåâàòü ïîëíîå îïèñàíèåñâîéñòâ îáúåêòà (îáúåêòîì, â ÷àñòíîñòè, ìîæåò áûòü ñàìîîïèñàíèå òèïà).Êîìïîíåíòû îáðàçóþò äåðåâî, ñîîòâåòñòâóþùåå ýòîìó÷àñòè÷íîìó ïîðÿäêó. ×àñòè÷íûé ïîðÿäîê ìåæäó êîìïîíåíòàìè îáû÷íî îïðåäåëÿåòñÿ ñòàòè÷åñêîé âëîæåííîñòüþêîìïîíåíò â ïðîãðàììå.
Ýòà âëîæåííîñòü ìîæåò ñîîòâåòñòâîâàòü áëîêàì, ïðîöåäóðàì èëè êëàññàì ïðîãðàììû(ðèñ. 6.1). Êîìïîíåíòû ñðåäû ìîãóò áûòü èìåíîâàíû. Ïîèñê â ñðåäå îáû÷íî âåä¼òñÿ ñ ó÷¼òîì óïîðÿäî÷åííîñòè êîìïîíåíò. Ñðåäà ìîæåò âêëþ÷àòü â ñåáÿ êàê êîìïîíåíòû, ïîëó÷åííûå ïðè òðàíñëÿöèè ¾òåêóùåãî¿ òåêñòà ïðîãðàììû,òàê è ¾âíåøíèå¿ (íàïðèìåð, ðàçäåëüíî êîìïèëèðîâàííûå)êîìïîíåíòû.Äëÿ îáîçíà÷åíèÿ ó÷àñòêîâ ïðîãðàììû, â êîòîðûõ äîñòóïíû òå èëè èíûå îïèñàíèÿ, èñïîëüçóþòñÿ ïîíÿòèÿ îáëàñòè äåéñòâèÿ è îáëàñòè âèäèìîñòè.
Îáëàñòüþ äåéñòâèÿîïèñàíèÿ ÿâëÿåòñÿ ïðîöåäóðà (áëîê), ñîäåðæàùàÿ îïèñàíèå, ñî âñåìè âõîäÿùèìè â íå¼ (ïîä÷èí¼ííûìè ïî äåðåâó)ïðîöåäóðàìè (áëîêàìè). Îáëàñòüþ âèäèìîñòè îïèñàíèÿ íàçûâàåòñÿ ÷àñòü îáëàñòè äåéñòâèÿ, èç êîòîðîé èñêëþ÷åíû òå156Ãëàâà 6. Ïðîâåðêà êîíòåêñòíûõ óñëîâèéïîäîáëàñòè, â êîòîðûõ ïî òåì èëè èíûì ïðè÷èíàì îïèñàíèå íåäîñòóïíî, íàïðèìåð, îíî ïåðåêðûòî äðóãèì îïèñàíèåì.  ðàçíûõ ÿçûêàõ ïîíÿòèÿ îáëàñòè äåéñòâèÿ è îáëàñòèâèäèìîñòè óòî÷íÿþòñÿ ïî-ðàçíîìó.Îáû÷íûìè îïåðàöèÿìè ïðè ðàáîòå ñî ñðåäîé ÿâëÿþòñÿ: âêëþ÷èòü îáúåêò â êîìïîíåíòó ñðåäû; íàéòè îáúåêò â ñðåäå è ïîëó÷èòü äîñòóï ê åãî îïèñàíèþ; îáðàçîâàòü â ñðåäå íîâóþ êîìïîíåíòó, îïðåäåë¼ííûì îáðàçîì ñâÿçàííóþ ñ îñòàëüíûìè; óäàëèòü êîìïîíåíòó èç ñðåäû.Ñðåäà ñîñòîèò èç îòäåëüíûõ îáúåêòîâ, ðåàëèçóåìûõ êàêçàïèñè (â äàëüíåéøåì îïèñàíèè ìû áóäåì èñïîëüçîâàòüèìÿ TElement äëÿ èìåíè òèïà ýòîé çàïèñè).
Ñîñòàâ ïîëåéçàïèñè, âîîáùå ãîâîðÿ, çàâèñèò îò îïèñûâàåìîãî îáúåêòà(òèï, ïåðåìåííàÿ è ò.ä.), íî åñòü ïîëÿ, âõîäÿùèå â çàïèñüäëÿ ëþáîãî îáúåêòà:TObject Object êàòåãîðèÿ îáúåêòà (òèï, ïåðåìåííàÿ,ïðîöåäóðà è ò.ä.);TMode Mode âèä îáúåêòà: öåëûé, ìàññèâ, çàïèñü è ò.ä.;TName Name èìÿ îáúåêòà;TType Type óêàçàòåëü íà îïèñàíèå òèïà.6.2. Çàíåñåíèå â ñðåäó è ïîèñê îáúåêòîâÐàññìîòðèì ñõåìó ðåàëèçàöèè ïðîñòîé áëî÷íîé ñòðóêòóðû, àíàëîãè÷íîé ïðîöåäóðàì â Ïàñêàëå èëè áëîêàì â Ñè.Êàæäûé áëîê ìîæåò èìåòü ñâîé íàáîð îïèñàíèé. Ïðîãðàììà ñîñòîèò èç îñíîâíîãî èìåíîâàííîãî áëîêà, â êîòîðîìèìåþòñÿ îïèñàíèÿ è îïåðàòîðû.
Îïèñàíèÿ ñîñòîÿò èç îïèñàíèé òèïîâ è îáúÿâëåíèé ïåðåìåííûõ.  êà÷åñòâå òèïà ìîæåò èñïîëüçîâàòüñÿ öåëî÷èñëåííûé òèï è òèï ìàññèâà. Äâàòèïà T1 è T2 ñ÷èòàþòñÿ ýêâèâàëåíòíûìè, åñëè èìååòñÿ îïèñàíèå T1=T2 (èëè T2=T1). Îïåðàòîðàìè ñëóæàò îïåðàòîðûïðèñâàèâàíèÿ âèäà Ïåðåìåííàÿ1=Ïåðåìåííàÿ2 è áëîêè. Ïåðåìåííàÿ ýòî ëèáî ïðîñòî èäåíòèôèêàòîð, ëèáî âûáîðêà èç ìàññèâà. Îïåðàòîð ïðèñâàèâàíèÿ ñ÷èòàåòñÿ ïðàâèëü-6.2. Çàíåñåíèå â ñðåäó è ïîèñê îáúåêòîâ157íûì, åñëè òèïû ïåðåìåííûõ ëåâîé è ïðàâîé ÷àñòè ýêâèâàëåíòíû.
Ïðèìåðîì ïðàâèëüíîé ïðîãðàììû ìîæåò ñëóæèòüprogram Examplebegintype T1=array 100 of array 200 of integer;T2=T1;var V1:T1;V2:T2;beginV1=V2;V2[1]=V1[2];begintype T3=array 300 of T1;var V3:T3;V3[50]=V1;endendend.Ðàññìàòðèâàåìîå ïîäìíîæåñòâî ÿçûêà ìîæåò áûòü ïîðîæäåíî ñëåäóþùåé ãðàììàòèêîé (çàïèñü â ðàñøèðåííîéÁÍÔ):Prog::='program' Ident Block '.'Block::='begin' [(Declaration)] [(Statement)] 'end'Declaration::='type' (Type_Decl)Type_Decl::=Ident '=' Type_DefinType_Defin::='ARRAY' Index 'OF' Type_DefinType_Defin::=Type_UseType_Use::=IdentDeclaration::='var' (Var_Decl)Var_Decl::=Ident_List ':' Type_Use ';'Ident_List::=(Ident / ',')Statement::=Block ';'Statement::=Variable '=' Variable ';'Variable::=Ident AccessAccess::='[' Expression ']' AccessAccess::=158Ãëàâà 6.