В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633), страница 12
Текст из файла (страница 12)
Çàòåì îí âûïîëíÿåò äåéñòâèå_i. Êàê ïðàâèëî, äåéñòâèå_i âîçâðàùàåò óïðàâëåíèå ñèíòàêñè÷åñêîìóàíàëèçàòîðó. Åñëè ýòî íå òàê, òî åñòü â ñîîòâåòñòâóþùåìäåéñòâèè íåò âîçâðàòà, òî ËÀ ïðîäîëæàåò ïîèñê ëåêñåì äî3.6. Êîíñòðóêòîð ëåêñè÷åñêèõ àíàëèçàòîðîâ LEX77òåõ ïîð, ïîêà äåéñòâèå íå âåðí¼ò óïðàâëåíèå ñèíòàêñè÷åñêîìó àíàëèçàòîðó. Ïîâòîðíûé ïîèñê ëåêñåì âïëîòü äî ÿâíîéïåðåäà÷è óïðàâëåíèÿ ïîçâîëÿåò ËÀ ïðàâèëüíî îáðàáàòûâàòü ïðîáåëû è êîììåíòàðèè. Ñèíòàêñè÷åñêîìó àíàëèçàòîðó ËÀ âîçâðàùàåò åäèíñòâåííîå çíà÷åíèå òèï ëåêñåìû. Äëÿ ïåðåäà÷è èíôîðìàöèè î òèïå ëåêñåìû èñïîëüçóåòñÿ ãëîáàëüíàÿ ïåðåìåííàÿ yylval. Òåêñòîâîå ïðåäñòàâëåíèå âûäåëåííîé ëåêñåìû õðàíèòñÿ â ïåðåìåííîé yytext, àå¼ äëèíà â ïåðåìåííîé yylen.Ïðèìåð 3.11.
LEX-ïðîãðàììà äëÿ ËÀ, îáðàáàòûâàþùåãîèäåíòèôèêàòîðû, ÷èñëà, êëþ÷åâûå ñëîâà if, then, else è çíàêèëîãè÷åñêèõ îïåðàöèé.%{ /*îïðåäåëåíèÿ êîíñòàíò LT,LE,EQ,NE,GT,GE,IF,THEN,ELSE,ID,NUMBER,RELOP, íàïðèìåð,÷åðåç DEFINE èëè ñêàëÿðíûé òèï*/ %}/*ðåãóëÿðíûå îïðåäåëåíèÿ*/delim[ \t\n]ws{delim}+letter[A-Za-z]digit[0-9]id{letter}({letter}|{digit})*number{digit}+(\.{digit}+)?(E[+\-]?{digit}+)?%%{ws}{/* äåéñòâèé è âîçâðàòà íåò */}if{return(IF);}then{return(THEN);}else{return(ELSE);}{id}{yylval=install_id(); return(ID);}{number} {yylval=install_num(); return(NUMBER);}"<"{yylval=LT; return(RELOP);}"<="{yylval=LE; return(RELOP);}"="{yylval=EQ; return(RELOP);}"<>"{yylval=NE; return(RELOP);}">"{yylval=GT; return(RELOP);}">="{yylval=GE; return(RELOP);}%%install_id(){/*ïîäïðîãðàììà, êîòîðàÿ ïîìåùàåò ëåêñåìó,íà ïåðâûé ñèìâîë êîòîðîé óêàçûâàåò yytext,78Ãëàâà 3.
Ëåêñè÷åñêèé àíàëèçäëèíà êîòîðîé ðàâíà yylen, â òàáëèöóñèìâîëîâ è âîçâðàùàåò óêàçàòåëü íà íå¼*/}install_num(){/*àíàëîãè÷íàÿ ïîäïðîãðàììà äëÿ ðàçìåùåíèÿëåêñåìû ÷èñëà*/} ðàçäåëå îáúÿâëåíèé, çàêëþ÷¼ííîì â ñêîáêè %{ è %}, ïåðå÷èñëåíû êîíñòàíòû, èñïîëüçóåìûå ïðàâèëàìè òðàíñëÿöèè. Âñ¼,÷òî çàêëþ÷åíî â ýòè ñêîáêè, íåïîñðåäñòâåííî êîïèðóåòñÿ â ïðîãðàììó ËÀ lex.yy.c è íå ðàññìàòðèâàåòñÿ êàê ÷àñòü ðåãóëÿðíûõ îïðåäåëåíèé èëè ïðàâèë òðàíñëÿöèè.
Òî æå êàñàåòñÿ è âñïîìîãàòåëüíûõ ïîäïðîãðàìì òðåòüåé ñåêöèè.  äàííîì ïðèìåðåýòî ïîäïðîãðàììû install_id è install_num. ñåêöèþ îïðåäåëåíèé âõîäÿò òàêæå íåêîòîðûå ðåãóëÿðíûåîïðåäåëåíèÿ. Êàæäîå òàêîå îïðåäåëåíèå ñîñòîèò èç èìåíè è ðåãóëÿðíîãî âûðàæåíèÿ, îáîçíà÷àåìîãî ýòèì èìåíåì. Íàïðèìåð,ïåðâîå îïðåäåë¼ííîå èìÿ ýòî delim. Îíî îáîçíà÷àåò êëàñññèìâîëîâ { \t\n\}, òî åñòü ëþáîé èç òð¼õ ñèìâîëîâ: ïðîáåë, òàáóëÿöèÿ èëè íîâàÿ ñòðîêà.
Âòîðîå îïðåäåëåíèå ðàçäåëèòåëü,îáîçíà÷àåìûé èìåíåì ws. Ðàçäåëèòåëü ýòî ëþáàÿ ïîñëåäîâàòåëüíîñòü îäíîãî èëè áîëåå ñèìâîëîâ-ðàçäåëèòåëåé. Ñëîâî delimäîëæíî áûòü çàêëþ÷åíî â ñêîáêè, ÷òîáû îòëè÷èòü åãî îò îáðàçöà, ñîñòîÿùåãî èç ïÿòè ñèìâîëîâ delim. îïðåäåëåíèè letter èñïîëüçóåòñÿ êëàññ ñèìâîëîâ. Ñîêðàùåíèå [A-Za-z] îçíà÷àåò ëþáóþ èç ïðîïèñíûõ áóêâ îò A äî Zèëè ñòðî÷íûõ áóêâ îò a äî z.  ïÿòîì îïðåäåëåíèè äëÿ id äëÿãðóïïèðîâêè èñïîëüçóþòñÿ ñêîáêè, ÿâëÿþùèåñÿ ìåòàñèìâîëàìèLEX. Àíàëîãè÷íî, âåðòèêàëüíàÿ ÷åðòà ìåòàñèìâîë LEX, îáîçíà÷àþùèé îáúåäèíåíèå. ïîñëåäíåì ðåãóëÿðíîì îïðåäåëåíèè number ñèìâîë ¾+¿ èñïîëüçóåòñÿ êàê ìåòàñèìâîë ¾îäíî èëè áîëåå âõîæäåíèé¿, ñèìâîë¾?¿ êàê ìåòàñèìâîë ¾íîëü èëè îäíî âõîæäåíèå¿.
Îáðàòíàÿ ÷åðòà èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû ïðèäàòü îáû÷íûé ñìûñë ñèìâîëó, èñïîëüçóþùåìóñÿ â LEX êàê ìåòàñèìâîë.  ÷àñòíîñòè, äåñÿòè÷íàÿ òî÷êà â îïðåäåëåíèè number îáîçíà÷àåòñÿ êàê ¾\.¿,ïîñêîëüêó òî÷êà ñàìà ïî ñåáå ïðåäñòàâëÿåò êëàññ, ñîñòîÿùèé èçâñåõ ñèìâîëîâ, çà èñêëþ÷åíèåì ñèìâîëà íîâîé ñòðîêè.  êëàññeñèìâîëîâ [+\] îáðàòíàÿ ÷åðòà ïåðåä ìèíóñîì ñòîèò ïîòîìó, ÷òîçíàê ìèíóñ èñïîëüçóåòñÿ êàê ñèìâîë äèàïàçîíà, êàê â [A-Z].3.6. Êîíñòðóêòîð ëåêñè÷åñêèõ àíàëèçàòîðîâ LEX79Åñëè ñèìâîë èìååò ñìûñë ìåòàñèìâîëà, òî ïðèäàòü åìó îáû÷íûé ñìûñë ìîæíî è ïî-äðóãîìó, çàêëþ÷èâ åãî â êàâû÷êè.
Òàê,â ñåêöèè ïðàâèë òðàíñëÿöèè øåñòü îïåðàöèé îòíîøåíèÿ çàêëþ÷åíû â êàâû÷êè.Ðàññìîòðèì ïðàâèëà òðàíñëÿöèè, ñëåäóþùèå çà ïåðâûì %%.Ñîãëàñíî ïåðâîìó ïðàâèëó, åñëè îáíàðóæåíî ws, òî åñòü ìàêñèìàëüíàÿ ïîñëåäîâàòåëüíîñòü ïðîáåëîâ, òàáóëÿöèé è íîâûõ ñòðîê,íèêàêèõ äåéñòâèé íå ïðîèçâîäèòñÿ.  ÷àñòíîñòè, íå îñóùåñòâëÿåòñÿ âîçâðàò â ñèíòàêñè÷åñêèé àíàëèçàòîð.Ñîãëàñíî âòîðîìó ïðàâèëó, åñëè îáíàðóæåíà ïîñëåäîâàòåëüíîñòü áóêâ ¾if¿, íóæíî âåðíóòü çíà÷åíèå IF, êîòîðîå îïðåäåëåíîêàê öåëàÿ êîíñòàíòà, ïîíèìàåìàÿ ñèíòàêñè÷åñêèì àíàëèçàòîðîìêàê ëåêñåìà ¾if¿. Àíàëîãè÷íî îáðàáàòûâàþòñÿ êëþ÷åâûå ñëîâà¾then¿ è ¾else¿ â äâóõ ñëåäóùèõ ïðàâèëàõ. äåéñòâèè, ñâÿçàííîì ñ ïðàâèëîì äëÿ id, äâà îïåðàòîðà. Ïåðåìåííîé yylval ïðèñâàèâàåòñÿ çíà÷åíèå, âîçâðàùàåìîå ïðîöåäóðîé install_id.
Ïåðåìåííàÿ yyl- val îïðåäåëåíà â ïðîãðàììålex.yy.c, âûõîäå LEX, è îíà äîñòóïíà ñèíòàêñè÷åñêîìó àíàëèçàòîðó. yylval õðàíèò âîçâðàùàåìîå ëåêñè÷åñêîå çíà÷åíèå, ïîñêîëüêó âòîðîé îïåðàòîð â äåéñòâèè, return(ID), ìîæåò òîëüêî âîçâðàòèòü êîä êëàññà ëåêñåì. Ôóíêöèÿ install_id çàíîñèòèäåíòèôèêàòîðû â òàáëèöó ñèìâîëîâ.Àíàëîãè÷íî îáðàáàòûâàþòñÿ ÷èñëà â ñëåäóþùåì ïðàâèëå. ïîñëåäíèõ øåñòè ïðàâèëàõ yylval èñïîëüçóåòñÿ äëÿ âîçâðàòàêîäà îïåðàöèè îòíîøåíèÿ, âîçâðàùàåìîå æå ôóíêöèåé çíà÷åíèå ýòî êîä ëåêñåìû relop.Åñëè, íàïðèìåð, â òåêóùèé ìîìåíò ËÀ îáðàáàòûâàåò ëåêñåìó ¾if¿, òî ýòîé ëåêñåìå ñîîòâåòñòâóþò äâà îáðàçöà: ¾if¿ è{id} è áîëåå äëèííîé ñòðîêè, ñîîòâåòñòâóþùåé îáðàçöó, íåò. Ïîñêîëüêó îáðàçåö ¾if¿ ïðåäøåñòâóåò îáðàçöó äëÿ èäåíòèôèêàòîðà, êîíôëèêò ðàçðåøàåòñÿ â ïîëüçó êëþ÷åâîãî ñëîâà.
Òàêàÿñòðàòåãèÿ ðàçðåøåíèÿ êîíôëèêòîâ ïîçâîëÿåò ëåãêî ðåçåðâèðîâàòü êëþ÷åâûå ñëîâà.Åñëè íà âõîäå âñòðå÷àåòñÿ ¾<=¿, òî ïåðâîìó ñèìâîëó ñîîòâåòñòâóåò îáðàçåö ¾<¿, íî ýòî íå ñàìûé äëèííûé îáðàçåö, êîòîðûéñîîòâåòñòâóåò ïðåôèêñó âõîäà. Ñòðàòåãèÿ âûáîðà ñàìîãî äëèííîãî ïðåôèêñà ëåãêî ðàçðåøàåò òàêîãî ðîäà êîíôëèêòû.Ãëàâà 4.Ñèíòàêñè÷åñêèéàíàëèç4.1. Êîíòåêñòíîñâîáîäíûå ãðàììàòèêè è àâòîìàòû ñ ìàãàçèííîéïàìÿòüþÏóñòü G = (N, T, P, S) ÊÑãðàììàòèêà. Ââåä¼ìíåñêîëüêî âàæíûõ ïîíÿòèé è îïðåäåëåíèé.Âûâîä, â êîòîðîì â ëþáîé ñåíòåíöèàëüíîé ôîðìå íàêàæäîì øàãå äåëàåòñÿ ïîäñòàíîâêà ñàìîãî ëåâîãî íåòåðìèíàëà, íàçûâàåòñÿ ëåâîñòîðîííèì. Åñëè S ⇒∗ u â ïðîöåññåëåâîñòîðîííåãî âûâîäà, òî u ëåâàÿ ñåíòåíöèàëüíàÿ ôîðìà.
Àíàëîãè÷íî îïðåäåëèì ïðàâîñòîðîííèé âûâîä. Îáîçíà÷èì øàãè ëåâîãî (ïðàâîãî) âûâîäà ⇒l (⇒r ).Óïîðÿäî÷åííûì ãðàôîì íàçûâàåòñÿ ïàðà (V, E ), ãäå Våñòü ìíîæåñòâî âåðøèí, à E ìíîæåñòâî ëèíåéíî óïîðÿäî÷åííûõ ñïèñêîâ äóã, êàæäûé ýëåìåíò êîòîðîãî èìååò âèä((v, v1 ), (v, v2 ), . . . , (v, vn )). Ýòîò ýëåìåíò óêàçûâàåò, ÷òî èçâåðøèíû v âûõîäÿò n äóã, ïðè÷¼ì ïåðâîé èç íèõ ñ÷èòàåòñÿäóãà, âõîäÿùàÿ â âåðøèíó v1 , âòîðîé äóãà, âõîäÿùàÿ ââåðøèíó v2 , è ò.ä.4.1. ÊÑ-ãðàììàòèêè è ÌÏ-àâòîìàòû81Óïîðÿäî÷åííûì ïîìå÷åííûì äåðåâîì íàçûâàåòñÿ óïîðÿäî÷åííûé ãðàô (V, E ), îñíîâîé êîòîðîãî ÿâëÿåòñÿ äåðåâîè äëÿ êîòîðîãî îïðåäåëåíà ôóíêöèÿ f : V → F (ôóíêöèÿðàçìåòêè) äëÿ íåêîòîðîãî ìíîæåñòâà F .Óïîðÿäî÷åííîå ïîìå÷åííîå äåðåâî D íàçûâàåòñÿ äåðåâîì âûâîäà (èëè äåðåâîì ðàçáîðà) öåïî÷êè w â ÊÑ-ãðàììàòèêå G = (N, T, P, S), åñëè âûïîëíåíû ñëåäóþùèå óñëîâèÿ:(1) êîðåíü äåðåâà D ïîìå÷åí S ;(2) êàæäûé ëèñò ïîìå÷åí ëèáî a ∈ T , ëèáî e;(3) êàæäàÿ âíóòðåííÿÿ âåðøèíà ïîìå÷åíà íåòåðìèíàëîìA ∈ N;(4) åñëè X íåòåðìèíàë, êîòîðûì ïîìå÷åíà âíóòðåííÿÿâåðøèíà è X1 , .
. . , Xn ìåòêè å¼ ïðÿìûõ ïîòîìêîââ óêàçàííîì ïîðÿäêå, òî X → X1 . . . Xk ïðàâèëî èçìíîæåñòâà P ;(5) Öåïî÷êà, ñîñòàâëåííàÿ èç âûïèñàííûõ ñëåâà íàïðàâîìåòîê ëèñòüåâ, ðàâíà w.Ïðîöåññ îïðåäåëåíèÿ ïðèíàäëåæíîñòè äàííîé ñòðîêèÿçûêó, ïîðîæäàåìîìó äàííîé ãðàììàòèêîé, è, â ñëó÷àå óêàçàííîé ïðèíàäëåæíîñòè, ïîñòðîåíèå äåðåâà ðàçáîðà äëÿýòîé ñòðîêè, íàçûâàåòñÿ ñèíòàêñè÷åñêèì àíàëèçîì. Ìîæíî ãîâîðèòü î âîññòàíîâëåíèè äåðåâà âûâîäà (â ÷àñòíîñòè,ïðàâîñòîðîííåãî èëè ëåâîñòîðîííåãî) äëÿ ñòðîêè, ïðèíàäëåæàùåé ÿçûêó.
Ïî âîññòàíîâëåííîìó âûâîäó ìîæíî ñòðîèòü äåðåâî ðàçáîðà.Ãðàììàòèêà G íàçûâàåòñÿ íåîäíîçíà÷íîé, åñëè ñóùåñòâóåò öåïî÷êà w, äëÿ êîòîðîé èìååòñÿ äâà èëè áîëåå ðàçëè÷íûõ äåðåâüåâ âûâîäà â G.Ãðàììàòèêà G íàçûâàåòñÿ ëåâîðåêóðñèâíîé, åñëè â íåéèìååòñÿ íåòåðìèíàë A òàêîé, ÷òî äëÿ íåêîòîðîé öåïî÷êè αñóùåñòâóåò âûâîä A ⇒+ Aα.Àâòîìàò ñ ìàãàçèííîé ïàìÿòüþ (ÌÏ-àâòîìàò) ýòîñåì¼ðêà M = (Q, T, Γ, D, q0 , Z0 , F ), ãäå(1) Q êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé, ïðåäñòàâëÿþùèõ âñåâîçìîæíûå ñîñòîÿíèÿ óïðàâëÿþùåãî óñòðîéñòâà;82Ãëàâà 4.
Ñèíòàêñè÷åñêèé àíàëèç(2) T êîíå÷íûé âõîäíîé àëôàâèò;(3) Γ êîíå÷íûé àëôàâèò ìàãàçèííûõ ñèìâîëîâ;(4) D îòîáðàæåíèå ìíîæåñòâà Q×(T ∪{e})×Γ â ìíîæåñòâî êîíå÷íûõ ïîäìíîæåñòâ Q×Γ∗ , íàçûâàåìîå ôóíêöèåé ïåðåõîäîâ;(5) q0 ∈ Q íà÷àëüíîå ñîñòîÿíèå óïðàâëÿþùåãî óñòðîéñòâà;(6) Z0 ∈ Γ ñèìâîë, íàõîäÿùèéñÿ â ìàãàçèíå â íà÷àëüíûé ìîìåíò (íà÷àëüíûé ñèìâîë ìàãàçèíà);(7) F ⊆ Q ìíîæåñòâî çàêëþ÷èòåëüíûõ ñîñòîÿíèé.Êîíôèãóðàöèÿ ÌÏ-àâòîìàòà ýòî òðîéêà (q, w, u), ãäå(1) q ∈ Q òåêóùåå ñîñòîÿíèå óïðàâëÿþùåãî óñòðîéñòâà;(2) w ∈ T ∗ íåïðî÷èòàííàÿ ÷àñòü âõîäíîé öåïî÷êè; ïåðâûé ñèìâîë öåïî÷êè w íàõîäèòñÿ ïîä âõîäíîé ãîëîâêîé; åñëè w = e, òî ñ÷èòàåòñÿ, ÷òî âñÿ âõîäíàÿ ëåíòàïðî÷èòàíà;(3) u ∈ Γ∗ ñîäåðæèìîå ìàãàçèíà; ñàìûé ëåâûé ñèìâîëöåïî÷êè u ñ÷èòàåòñÿ âåðõíèì ñèìâîëîì ìàãàçèíà; åñëèu = e, òî ìàãàçèí ñ÷èòàåòñÿ ïóñòûì.Òàêò ðàáîòû ÌÏ-àâòîìàòà M áóäåì ïðåäñòàâëÿòü â âèäå áèíàðíîãî îòíîøåíèÿ `, îïðåäåë¼ííîãî íà êîíôèãóðàöèÿõ.
Áóäåì ïèñàòü(q, aw, Zu) ` (p, w, vu),åñëè ìíîæåñòâî D(q, a, Z) ñîäåðæèò (p, v), ãäå q , p ∈ Q,a ∈ T ∪ {e}, w ∈ T ∗ , Z ∈ Γ è u, v ∈ Γ∗ (âåðõóøêà ìàãàçèíàñëåâà).Íà÷àëüíîé êîíôèãóðàöèåé ÌÏ-àâòîìàòà M íàçûâàåòñÿêîíôèãóðàöèÿ âèäà (q0 , w, Z0 ), ãäå w ∈ T ∗ , òî åñòü óïðàâëÿþùåå óñòðîéñòâî íàõîäèòñÿ â íà÷àëüíîì ñîñòîÿíèè, âõîäíàÿ ëåíòà ñîäåðæèò öåïî÷êó, êîòîðóþ íóæíî ïðîàíàëèçèðîâàòü, à â ìàãàçèíå èìååòñÿ òîëüêî íà÷àëüíûé ñèìâîë Z0 .4.1. ÊÑ-ãðàììàòèêè è ÌÏ-àâòîìàòû83Çàêëþ÷èòåëüíîé êîíôèãóðàöèåé íàçûâàåòñÿ êîíôèãóðàöèÿ âèäà (q, e, u), ãäå q ∈ F , u ∈ Γ∗ , òî åñòü óïðàâëÿþùååóñòðîéñòâî íàõîäèòñÿ â îäíîì èç çàêëþ÷èòåëüíûõ ñîñòîÿíèé, à âõîäíàÿ öåïî÷êà öåëèêîì ïðî÷èòàíà.Ââåä¼ì òðàíçèòèâíîå è ðåôëåêñèâíî-òðàíçèòèâíîå çàìûêàíèå îòíîøåíèÿ `, à òàêæå åãî ñòåïåíü k > 0 (îáîçíà÷àåìûå `+ , `∗ è `k ñîîòâåòñòâåííî).Ãîâîðÿò, ÷òî öåïî÷êà w äîïóñêàåòñÿ ÌÏ-àâòîìàòîì M ,åñëè (q0 , w, Z0 ) `∗ (q, e, u) äëÿ íåêîòîðûõ q ∈ F è u ∈ Γ∗ .Ìíîæåñòâî âñåõ öåïî÷åê, äîïóñêàåìûõ àâòîìàòîì M íàçûâàåòñÿ ÿçûêîì, äîïóñêàåìûì (ðàñïîçíàâàåìûì, îïðåäåëÿåìûì) àâòîìàòîì M (îáîçíà÷àåòñÿ L(M )).Ïðèìåð 4.1.
Ðàññìîòðèì ÌÏ-àâòîìàòM = ({q0 , q1 , q2 }, {a, b}, {Z, a, b}, D, q0 , Z, {q2 }),ó êîòîðîãî ôóíêöèÿ ïåðåõîäîâ D ñîäåðæèò ýëåìåíòû:D(q0 , a, Z) = {(q0 , aZ)},D(q0 , b, Z) = {(q0 , bZ)},D(q0 , a, a) = {(q0 , aa), {q1 , e)},D(q0 , a, b) = {(q0 , ab)},D(q0 , b, a) = {(q0 , ba)},D(q0 , b, b) = {(q0 , bb), (q1 , e)},D(q1 , a, a) = {(q1 , e)},D(q1 , b, b) = {(q1 , e)},D(q1 , e, Z) = {(q2 , e)}.Íåòðóäíî ïîêàçàòü, ÷òî L(M ) = {wwR |w ∈ {a, b}+ }, ãäå wRîáîçíà÷àåò îáðàùåíèå (¾ïåðåâîðà÷èâàíèå¿)öåïî÷êè w.Èíîãäà äîïóñòèìîñòü îïðåäåëÿþò íåñêîëüêî èíà÷å: öåïî÷êà w äîïóñêàåòñÿ ÌÏ-àâòîìàòîì M , åñëè (q0 , w, Z0 ) `∗(q, e, e) äëÿ íåêîòîðîãî q ∈ Q.  òàêîì ñëó÷àå ãîâîðÿò, ÷òîàâòîìàò äîïóñêàåò öåïî÷êó îïóñòîøåíèåì ìàãàçèíà.