7. Ôîðìàëüíûå ÿçûêè è ôîðìàëüíûå ãðàììàòèêè Ðàññìîòðèì òðåòèé ñïîñîá îïèñàíèÿ ÿçûêîâ ïðîãðàììèðîâàíèÿ. Ýòîò ðàçäåë ïîäãîòîâëåí â îñíîâíîì ïî ãëàâå 3 êíèãè [1], îòòóäà æå çàèìñòâîâàíû íåêîòîðûå ïðèìåðû. 7.1. Ôîðìàëüíûå ÿçûêè Îñíîâíûìè îáúåêòàìè òåîðèè ôîðìàëüíûõ ÿçûêîâ ÿâëÿþòñÿ öåïî÷êè ñèìâîëîâ. Àëôàâèò (èíîãäà òàêæå ãîâîðÿò ñëîâàðü) íåïóñòîå ìíîæåñòâî Σ, ñèìâîëû (èíîãäà ñëîâà) a, b, c, . . . åãî ýëåìåíòû. Öåïî÷êè (íàä àëôàâèòîì) êîíå÷íûå óïîðÿäî÷åííûå ïîñëåäîâàòåëüíîñòè ñèìâîëîâ. Ïðèìåð. Àëôàâèò Σ = {a, b, c} è öåïî÷êè ε, a, b, c, aa, ab, ac, ba, bb, bc, . . . , babcca, . . . Ïóñòàÿ öåïî÷êà îáîçíà÷àåòñÿ ε. Äëèíà öåïî÷êè ÷èñëî ñîäåðæàùèõñÿ â íåé ñèìâîëîâ: |babcca| = 6. Ìíîæåñòâî âñåõ âîçìîæíûõ öåïî÷åê íàä àëôàâèòîì Σ îáîçíà÷àåòñÿ Σ∗ . Äëÿ öåïî÷åê ñèìâîëîâ åñòåñòâåííûì îáðàçîì îïðåäåëåíà áèíàðíàÿ îïåðàöèÿ êîíêàòåíàöèè (ñêëåèâàíèÿ): α, β ∈ Σ∗ 7→ αβ ∈ Σ∗ . Ïî îïðåäåëåíèþ αn = αα . . . α è an = aa . . . a. Èíîãäà âìåñòî αβ ïèøóò α · β . ßçûê L íàä ñëîâàðåì Σ íåêîòîðîå ìíîæåñòâî öåïî÷åê ñèìâîëîâ, òî åñòü ïîä- ìíîæåñòâî ìíîæåñòâà Σ∗ . Ñóùåñòâóåò è áîëåå àáñòðàêòíîå îïðåäåëåíèå ôîðìàëüíîãî ÿçûêà. Ïîëóãðóïïà S íåïóñòîå ìíîæåñòâî ñ àññîöèàòèâíîé áèíàðíîé îïåðàöèåé: ∀s1 , s2 ∈ S 7→ s1 · s2 ∈ S | (s1 · s2 ) · s3 = s1 · (s2 · s3 ). ( îáùåì ñëó÷àå · íå îáÿçàòåëüíî êîíêàòåíàöèÿ.)  ïîëóãðóïïå ìîãóò áûòü åäèíèöà è íóëü, òî åñòü òàêèå ýëåìåíòû, ÷òî . . . Ïóñòü A íåïóñòîå ìíîæåñòâî. Ìíîæåñòâî A∗ âñåõ êîíå÷íûõ óïîðÿäî÷åííûõ ïîñëåäîâàòåëüíîñòåé ýëåìåíòîâ èç A ñ àññîöèàòèâíîé áèíàðíîé îïåðàöèåé íàçûâàþò ñâîáîäíîé ïîëóãðóïïîé. ßçûê L ýòî ïîäìíîæåñòâî ñâîáîäíîé íåêîììóòàòèâíîé ïîëóãðóïïû A∗ . Òàêîå îïðåäåëåíèå íåêîíñòðóêòèâíî: òðóäíî îòâåòèòü íà âîïðîñ, ïðèíàäëåæèò ëè íåêîòîðàÿ öåïî÷êà ñèìâîëîâ òîìó èëè èíîìó ÿçûêó. Èñïîëüçóþòñÿ ðàçëè÷íûå ñïîñîáû îïèñàíèÿ ôîðìàëüíûõ ÿçûêîâ. Åñëè ÿçûê ñîñòîèò èç êîíå÷íîãî ÷èñëà öåïî÷åê, òî ìîæíî ïðîñòî ñîñòàâèòü èõ ïîëíûé ñïèñîê. 1. Ñëîâåñíîå îïèñàíèå ïåðå÷èñëåíèå ñâîéñòâ öåïî÷åê, ïðèíàäëåæàùèõ äàííîìó ÿçûêó. 2. Àëãåáðàè÷åñêîå îïèñàíèå óêàçàíèÿ, êàê ñ ïîìîùüþ àëãåáðàè÷åñêèõ ïðàâèë êîíñòðóèðóþòñÿ öåïî÷êè ñèìâîëîâ. 3. Ïîðîæäàþùèå ïðàâèëà íàáîð èíñòðóêöèé, ïî êîòîðûì èñõîäÿ èç íåêîòîðîãî íà÷àëüíîãî ìíîæåñòâà ñèìâîëîâ (ìîæåò áûòü, òîëüêî îäíîãî) ñòðîÿòñÿ âñå öåïî÷êè ÿçûêà. Ýòîò ñïîñîá íàèáîëåå ðàñïðîñòðàíåí ïðè îïèñàíèè ÿçûêîâ ïðîãðàììèðîâàíèÿ. 39 4. Àëãîðèòì ðàñïîçíàâàíèÿ ïîñëåäîâàòåëüíîñòü äåéñòâèé, ñ ïîìîùüþ êîòîðûõ ìîæåò áûòü ïðîâåäåí àíàëèç öåïî÷êè ñèìâîëîâ è, êàê ñëåäñòâèå, âûÿñíÿåòñÿ, ïðèíàäëåæèò ýòà öåïî÷êà ÿçûêó èëè íåò. Óäîáíî ðàññìàòðèâàòü íåêîòîðîå ðàñïîçíàþùåå óñòðîéñòâî (àâòîìàò), êîòîðîå ïåðåõîäèò èç îäíîãî ñîñòîÿíèÿ â äðóãîå â çàâèñèìîñòè îò òîãî, êàêîé ñèìâîë èç àíàëèçèðóåìîé öåïî÷êè ïîñòóïàåò íà åãî âõîä. Ïðèìåðû. Σ = {a, b, c}. Âñå öåïî÷êè èç òðåõ ñèìâîëîâ ýòîãî àëôàâèòà ëåãêî âûïèñàòü. Íàòóðàëüíûå ÷èñëà: 1, 2, 3, 4, . . . , 12403, . . . ßñíî, ÷òî â àëôàâèòå ñîäåðæèòñÿ äåñÿòü àðàáñêèõ öèôð, íî ïåðâîé öèôðîé öåïî÷êè íå ìîæåò áûòü íóëü. Öåïî÷êè èç íóëåé è åäèíèö, íà÷èíàþùèåñÿ ñ åäèíèöû. Ñëîâà èç áóêâ, âõîäÿùèõ â çàäàííîå ñëîâî. (Ñòóäåíòû-ìàòåìàòèêè íà ñêó÷íûõ ëåêöèÿõ èãðàþò â äðóãèå èãðû :-). Σ = {a, b}; L = {ak bl am bn | 0 ≤ k ≤ l ≤ m ≤ n} ïðîñòîé ïðèìåð àëãåáðàè÷åñêîãî îïèñàíèÿ ÿçûêà. Σ = {(, )}; L ìíîæåñòâî öåïî÷åê, â êîòîðûõ äëÿ êàæäîé ëåâîé ñêîáêè íàéäåòñÿ ïðàâàÿ ñêîáêà. Ìíîæåñòâî ïðàâèëüíûõ àðèôìåòè÷åñêèõ âûðàæåíèé. Çäåñü, êîíå÷íî, íóæíî ÷åòêî ñôîðìóëèðîâàòü, ÷òî òàêîå àðèôìåòè÷åñêîå âûðàæåíèå è êîãäà îíî ÿâëÿåòñÿ ïðàâèëüíûì. Ïóñòü Σ = {a, b, c, . . . 0, 1, 2, . . . , begin, end, f or, to, do, read, write, . . .}. ßçûê ïðîãðàììèðîâàíèÿ Ïàñêàëü (èëè åìó ïîäîáíûé) ìîæíî çàäàòü, åñëè ïåðå÷èñëèòü ïðàâèëà çàïèñè îñíîâíûõ êîíñòðóêöèé ÿçûêà ñî âñåìè íåîáõîäèìûìè îãðàíè÷åíèÿìè. Ïîëíîå ñëîâåñíîå îïèñàíèå òàêîãî ÿçûêà ïîëó÷èòñÿ äîñòàòî÷íî äëèííûì. Àçáóêà Ìîðçå. Àáî, áåññàðàáêà, âàâèëîí, ãîëîâà, äîãàäêà, . . . ôàî, âåî, ôà, âå, âå, ... ýòî öåïî÷êà ñèìâîëîâ èç èíñòðóêöèè ïî ñáîðêå íåêîåãî óñòðîéñòâà (êòî áûë íà ëåêöèè, òîò çíàåò, î ÷åì èäåò ðå÷ü). Äëÿ îïèñàíèÿ ÿçûêîâ ïðîãðàììèðîâàíèÿ, êàê óæå áûëî ñêàçàíî, óäîáíî èñïîëüçîâàòü ïîðîæäàþùèå ïðàâèëà. Ìåòàëèíãâèñòè÷åñêèå ôîðìû íîòàöèè Áýêóñà-Íàóðà ôàêòè÷åñêè è ÿâëÿþòñÿ òàêèìè ïðàâèëàìè. Íàïðèìåð, <ïðîãðàììà íà Ïàñêàëå> ::= [ <çàãîëîâîê> ] [ <îáúÿâëåíèÿ > ] begin [ <èíñòðóêöèè> ] end. <çàãîëîâîê> ::= program <èäåíòèôèêàòîð> ; ...... <òèï îáúåêòà> ::= <èìÿ òèïà> = object [(<èìÿ äðóãîãî òèïà>)] {<ñåêöèÿ îïèñàíèÿ>} end ; <ñåêöèÿ îïèñàíèÿ> ::= [private | protected | public] [<ïîëÿ>] [<ìåòîäû>] [<ñâîéñòâà>] <ïîëÿ> ::= {<èìåíà ïîëåé> : <òèï ïîëÿ> ;} <èìåíà ïîëåé> ::= [{<èäåíòèôèêàòîð> , }] <èäåíòèôèêàòîð> ...... 40 7.2. Ôîðìàëüíûå ãðàììàòèêè Ãðàììàòèêà ÿçûêà ýòî íàáîð ñðåäñòâ äëÿ åãî îïèñàíèÿ. Ðàçëè÷àþò ïîðîæäàþùèå è ðàñïîçíàþùèå ãðàììàòèêè ýòî çàâèñèò îò òîãî, êàêàÿ çàäà÷à ñòàâèòñÿ íà ïåðâûé ïëàí: ñòðîèòü íîâûå öåïî÷êè ñèìâîëîâ èëè îïðåäåëÿòü, ñîäåðæèòñÿ íåêîòîðàÿ öåïî÷êà â äàííîì ÿçûêå èëè íåò. Ôîðìàëüíóþ ãðàììàòèêó G = (T, N, S, P ) îáðàçóþò ÷åòûðå êîìïîíåíòà: òåðìèíàëüíûé ñëîâàðü T , ñîäåðæàùèé ñèìâîëû ÿçûêà a, b, c, . . .; íåòåðìèíàëüíûé ñëîâàðü N , ñîäåðæàùèé âñïîìîãàòåëüíûå ñèìâîëû A, B, C, . . .; íà÷àëüíûé ñèìâîë S èç ìíîæåñòâà N ; ìíîæåñòâî P ïðàâèë âûâîäà âèäà α → β, α, β ∈ V ∗ , ãäå V = T ∪ N . Ãðå÷åñêèìè áóêâàìè îáîçíà÷àþòñÿ öåïî÷êè ñèìâîëîâ òåðìèíàëüíûõ è íåòåðìèíàëüíûõ. Ïðè îïèñàíèè ôîðìàëüíûõ ÿçûêîâ (â òîì ÷èñëå ÿçûêîâ ïðîãðàììèðîâàíèÿ) ïðàâèëà âûâîäà ÷àñòî ñâîäÿòñÿ ê ñëåäóþùåìó: èç öåïî÷êè α âûâîäèòñÿ öåïî÷êà β â ðåçóëüòàòå çàìåíû íåêîòîðîãî íåòåðìèíàëüíîãî ñèìâîëà íà êàêóþ-òî äðóãóþ öåïî÷êó ñèìâîëîâ. Ýòîò ïðèíöèï íàãëÿäíî ïîêàçàí â ïðåäûäóùåì ïðèìåðå.  ñàìîì ïåðâîì ïðàâèëå âûâîäà íà÷àëüíûé íåòåðìèíàëüíûé ñèìâîë ãðàììàòèêè ÿçûêà <ïðîãðàììà íà Ïàñêàëå> (íàïîìíèì, ÷òî íåòåðìèíàëüíûì ñèìâîëîì ìîæåò áûòü äëèííîå âûðàæåíèå íà ìåòàÿçûêå) çàìåíÿåòñÿ íà ïðàâóþ ÷àñòü ÁÍÔ. Íåòåðìèíàëüíûé ñèìâîë <çàãîëîâîê> âî âòîðîì ïðàâèëå âûâîäà çàìåíÿåòñÿ íà . . . è òàê äàëåå. Èòàê, èñõîäÿ èç íà÷àëüíîãî ñèìâîëà ñ ïîìîùüþ ïðàâèë âûâîäà ìîãóò áûòü ïîëó÷åíû ðàçëè÷íûå öåïî÷êè ñèìâîëîâ (òåðìèíàëüíûõ è íåòåðìèíàëüíûõ). Òàêèå öåïî÷êè íàçûâàþò âûâîäèìûìè â äàííîé ãðàììàòèêå (èëè ñåíòåöèàëüíûìè ôîðìàìè). Ñåíòåöèàëüíûå ôîðìû èç òåðìèíàëüíûõ ñèìâîëîâ íàçûâàþò ïðåäëîæåíèÿìè. Ïðåäëîæåíèÿ è îáðàçóþò ÿçûê íàä ãðàììàòèêîé. Òàêèì îáðàçîì, ôîðìàëüíûé ÿçûê L(G) ýòî ìíîæåñòâî âñåõ öåïî÷åê èç òåðìèíàëüíûõ ñèìâîëîâ, âûâîäèìûõ â ãðàììàòèêå G. Íàïðèìåð, ïóñòü T = {a, b}, N = {S}, S = S , P = {S → ab; γ → aγb ∀γ ∈ V ∗ }. Ëåãêî âèäåòü, ÷òî â ÿçûêå, ïîðîæäàåìîì òàêîé ãðàììàòèêîé, ñîäåðæàòñÿ ïðåäëîæåíèÿ ab, aabb, aaabbb, . . . 7.3. Êëàññèôèêàöèÿ ôîðìàëüíûõ ãðàììàòèê Íîàì Õîìñêèé, èçâåñòíûé àìåðèêàíñêèé ëèíãâèñò, ïðåäëîæèë â 1956 ãîäó ââåñòè ñëåäóþùóþ êëàññèôèêàöèþ ôîðìàëüíûõ ãðàììàòèê G = (T, N, S, P ). Ãðàììàòèêè òèïà 0 (èëè ãðàììàòèêè îáùåãî âèäà) õàðàêòåðèçóþòñÿ òåì, ÷òî ïðàâèëà âûâîäà â íèõ èìåþò âèä α → β , ãäå α ∈ V ∗ N V ∗ , β ∈ V ∗ (ïðè îãðàíè÷åíèè α 6= ε). Ñ÷èòàåòñÿ, ÷òî òàêèå ãðàììàòèêè ñëèøêîì ñâîáîäíû äëÿ îïèñàíèÿ ÿçûêîâ ïðîãðàììèðîâàíèÿ, íî â òî æå âðåìÿ íåäîñòàòî÷íî ìîùíû äëÿ îïèñàíèÿ åñòåñòâåííûõ ÿçûêîâ. Ãðàììàòèêè òèïà 1 (èëè êîíòåêñòíî-çàâèñèìûå ãðàììàòèêè) èìåþò ïðàâèëà âûâîäà âèäà γ1 Aγ2 → γ1 βγ2 , ãäå γ1 , γ2 ∈ V ∗ , A ∈ N , β ∈ V ∗ (ïðè îãðàíè÷åíèè β 6= ε).  ýòîì ñëó÷àå çàìåíà A íà β âîçìîæíà òîëüêî â êîíòåêñòå γ1 γ2. ÊÇ-ãðàììàòèêè õîðîøè òåì, ÷òî äëÿ íèõ äîêàçàíî óòâåðæäåíèå: ïî íåêîòîðîìó àëãîðèòìó çà êîíå÷íîå ÷èñ41 ëî øàãîâ ìîæíî óñòàíîâèòü, ïðèíàäëåæèò öåïî÷êà òåðìèíàëüíûõ ñèìâîëîâ äàííîìó ÿçûêó èëè íåò. Ãðàììàòèêè òèïà 2 (èëè êîíòåêñòíî-ñâîáîäíûå ãðàììàòèêè) íàèáîëåå øèðîêî ïðèìåíÿþòñÿ ïðè îïèñàíèè ÿçûêîâ ïðîãðàììèðîâàíèÿ. Äëÿ íèõ ïðàâèëà âûâîäà èìåþò âèä A → β , ãäå A ∈ N , β ∈ V ∗ . Íîòàöèÿ ÁÍÔ ïðåäñòàâëÿåò ñîáîé ñïèñîê òàêèõ ïðàâèë. Êëàññè÷åñêèé ïðèìåð (êîòîðûé â äàëüíåéøåì áóäåò èñïîëüçîâàòüñÿ â ðàçëè÷íûõ ìîäèôèêàöèÿõ): {+, ∗, (, ), i}, {E, T, P }, E , {E → E + T, E → T, T → T ∗ P, T → P, P → i, P → (E)}. Ýòà ãðàììàòèêà ïîçâîëÿåò ñòðîèòü àðèôìåòè÷åñêèå ñêîáî÷íûå âûðàæåíèÿ ñ îïåðàöèÿìè òèïà ñëîæåíèÿ è óìíîæåíèÿ, ñèìâîë i ðàññìàòðèâàåòñÿ êàê íåêîòîðûé èäåíòèôèêàòîð. Ãðàììàòèêè òèïà 3 (èëè àâòîìàòíûå (ðåãóëÿðíûå) ãðàììàòèêè) îòëè÷àþòñÿ òåì, ÷òî ïðàâèëà âûâîäà â íèõ èìåþò âèä A → ε, A → a, A → aB , ãäå A, B ∈ N , a ∈ T . Òàêèå ãðàììàòèêè ÿâëÿþòñÿ êîíòåêñòíî-ñâîáîäíûìè, íî ñ îãðàíè÷åííûìè âîçìîæíîñòÿìè. 7.4. Ïðåäñòàâëåíèå âûâîäà öåïî÷åê ñèìâîëîâ Äëÿ öåïî÷åê ñèìâîëîâ ââîäèòñÿ îòíîøåíèå âûâîäà: α ⇒ β (èç öåïî÷êè α âûâîäèòñÿ öåïî÷êà β ). Èíîãäà â òàêèå îáîçíà÷åíèÿ âíîñÿòñÿ äîïîëíèòåëüíûå ýëåìåíòû: α ⇒G β öåïî÷êà β âûâîäèòñÿ èç öåïî÷êè α â ãðàììàòèêå G; α ⇒(m) β ñ ïîìîùüþ ïðàâèëà âûâîäà ñ íîìåðîì m (ðàçìå÷åííûé âûâîä); α ⇒∗ β β âûâîäèòñÿ èç α êàêèì-òî ñïîñîáîì; α ⇒+ β β âûâîäèòñÿ èç α íåòðèâèàëüíî, çà êîíå÷íîå ÷èñëî øàãîâ (≥ 1); α ⇒k β âûâîä äëèíû k , òî åñòü ïðè èñïîëüçîâàíèè k ïðàâèë âûâîäà è òàê äàëåå. Ñëåäîâàòåëüíî, ôîðìàëüíûé ÿçûê, ïîðîæäåííûé ãðàììàòèêîé G, L(G) = {α ∈ T ∗ | S ⇒∗G α}. Ïðèìåð. Ïóñòü T = {a, b, c}, N = {S}, S íà÷àëüíûé ñèìâîë è P = {(1) S → aSa, (2) S → bSb, (3) S → c}.  ÿçûêå, ïîðîæäàåìîì òàêîé ãðàììàòèêîé, ñîäåðæàòñÿ öåïî÷êè ñèìâîëîâ: S ⇒(3) c, S ⇒(1) aSa ⇒(3) aca, S ⇒(1) aSa ⇒(1) aaSaa ⇒(3) aacaa, S ⇒(2) bSb ⇒(1) baSab ⇒(2) babSbab ⇒(3) babcbab è òàê äàëåå. ×àñòî èñïîëüçóåòñÿ ãðàôè÷åñêîå ïðåäñòàâëåíèå âûâîäà öåïî÷åê ñèìâîëîâ â ãðàììàòèêàõ. Äåðåâî âûâîäà öåïî÷êè ñèìâîëîâ â ÊÑ-ãðàììàòèêå ýòî ðàçìå÷åííîå óïîðÿäî÷åííîå äåðåâî, êàæäàÿ âåðøèíà êîòîðîãî ïîìå÷åíà ñèìâîëîì èç ìíîæåñòâà T ∪ N ∪ {ε}. Ïðè ýòîì êîðåíü ïîìå÷åí íà÷àëüíûì ñèìâîëîì, âíóòðåííèå óçëû íåòåðìèíàëüíûìè ñèìâîëàìè, à ëèñòüÿ òåðìèíàëüíûìè ñèìâîëàìè. Ïðèìåð. Ðàññìîòðèì ìíîæåñòâî ïðàâèë âûâîäà â ãðàììàòèêå íåêîòîðîãî ïðèìè- òèâíîãî ÿçûêà ïðîãðàììèðîâàíèÿ. ÏÐ → begin ÑÎ end ÑÎ → ÎÏ | ÎÏ ; ÑÎ 42 ÎÏ → ÈÄ := À | for ÈÄ from ÊÎ to ÊÎ do ÑÎ endfor | if ÓÑ then ÑÎ endif | write À ÓÑ → À ÇÍ À ÇÍ → = | <> | > | < | >= | <= À → ÈÄ | ÊÎ | À + À | À - À | À * À | À / À | (ÀÂ) | read ÈÄ → ÁÓ | ÈÄ ÁÓ | ÈÄ ÖÈ ÊÎ → ÖÈ | ÊÎ ÖÈ ÁÓ → a | b | c | .......... ÖÈ → 0 | 1 | 2 | .......... Íåòðóäíî äîãàäàòüñÿ, ÷òî ïàðû ïðîïèñíûõ áóêâ îáîçíà÷àþò íåòåðìèíàëüíûå ñèìâîëû: <ïðîãðàììà>, <ñïèñîê îïåðàòîðîâ>, <îïåðàòîð>, <èäåíòèôèêàòîð>, <àðèôìåòè÷åñêîå âûðàæåíèå>, <êîíñòàíòà>, <óñëîâèå> . . . Ñìûñë îïåðàòîðîâ ÿçûêà ïðîãðàììèðîâàíèÿ òîæå ëåãêî ïîíÿòü. Ïóñòü ïîñòàâëåíà çàäà÷à: íàéòè íàèáîëüøåå èç äåñÿòè íàòóðàëüíûõ ÷èñåë. Ñîñòàâèì ïðîãðàììó, ðåàëèçóþùóþ ïðîñòîé àëãîðèòì ïîèñêà íàèáîëüøåãî ÷èñëà, êàê öåïî÷êó òåðìèíàëüíûõ ñèìâîëîâ. Äëÿ óäîáñòâà ÷òåíèÿ îòäåëüíûå êîíñòðóêöèè áóäåì ðàçäåëÿòü ïðîáåëàìè èëè ïåðåíîñèòü íà ñëåäóþùóþ ñòðîêó (íî ýòî âîâñå íå îáÿçàòåëüíî ñ ôîðìàëüíîé òî÷êè çðåíèÿ). begin k:=read; m:=k; for j from 2 to 10 do k:=read; if k>m then m:=k endif endfor write m end Ðàçìå÷åííûé âûâîä ïðîãðàììû íà÷èíàåòñÿ òàê: ÏÐ ⇒(1) begin ÑÎ end ⇒(2) begin ÎÏ; ÑÎ end ⇒(3) begin ÈÄ := ÀÂ; ÑÎ end . . . Îòìåòèì, ÷òî íà êàæäîì øàãå âûâîäà îäèí èç íåòåðìèíàëüíûõ ñèìâîëîâ çàìåíÿåòñÿ íà ñîîòâåòñòâóþùóþ öåïî÷êó ñèìâîëîâ. Ìîæíî íà÷èíàòü âñåãäà ñ ëåâîãî íåòåðìèíàëüíîãî ñèìâîëà, âñåãäà ñ ïðàâîãî íåòåðìèíàëüíîãî ñèìâîëà èëè ñ êàêîãî-òî ïðîèçâîëüíî âûáðàííîãî ñèìâîëà. Ïîýòîìó ðàçëè÷àþò òðè ñïîñîáà âûâîäà: ëåâûé, ïðàâûé è ïðîèçâîëüíûé. Ïîñòðîèì ôðàãìåíò äåðåâà âûâîäà ïðîãðàììû (îíî ñòðîèòñÿ îò êîðíÿ ê êðîíå, íî ðèñîâàòü ýòî óäîáíî ñâåðõó âíèç): 43 / begin / ÈÄ | ÁÓ | k / ÎÏ | := ÏÐ | ÑÎ | ; \ À | read \ end / ÎÏ | ÈÄ | ÁÓ | m \ ÑÎ \ \ ; ÑÎ \ := \ À | ÈÄ | ÁÓ | k Êàê óæå áûëî îòìå÷åíî, îäíà è òà æå öåïî÷êà ìîæåò áûòü âûâåäåíà â ãðàììàòèêå ðàçíûìè ñïîñîáàìè: ëåâûì âûâîäîì, ïðàâûì âûâîäîì èëè ïðîèçâîëüíûì âûâîäîì. Íàèáîëåå âàæíû ëåâîâûâîäèìûå è ïðàâîâûâîäèìûå öåïî÷êè ñèìâîëîâ. Íî äåðåâî âûâîäà äëÿ íèõ íå îáÿçàòåëüíî îäíî è òî æå! Ïðèìåð. Âûâîä öåïî÷êè x+x*x â ãðàììàòèêå (1) (2) (3) (4) A→A+A A→A*A A→B B→x 1) A ⇒ A+A ⇒ B +A ⇒ x+A ⇒ x+A∗A ⇒ x+B ∗A ⇒ x+x∗A ⇒ x+x∗B ⇒ x+x∗x 2) A ⇒ A ∗ A ⇒ A ∗ B ⇒ A ∗ x ⇒ A + A ∗ x ⇒ A + B ∗ x ⇒ A + x ∗ x ⇒ B + x ∗ x ⇒ x + x ∗ x Ñå÷åíèå äåðåâà âûâîäà ýòî òàêîå ìíîæåñòâî C åãî âåðøèí, ÷òî 1) íèêàêèå äâå âåðøèíû íå ëåæàò íà îäíîé âåòâè; 2) íåëüçÿ äîáàâèòü ê C âåðøèíó òàê, ÷òîáû íå íàðóøèòü óñëîâèå 1).  òåîðèè ôîðìàëüíûõ ÿçûêîâ è ôîðìàëüíûõ ãðàììàòèê äîêàçûâàþòñÿ äâà ñëåäóþùèõ âàæíûõ óòâåðæäåíèÿ. Åñëè S ⇒ α1 ⇒ . . . ⇒ αn âûâîä öåïî÷êè αn , òî ìîæíî ïîñòðîèòü äåðåâî âûâîäà, äëÿ êîòîðîãî αn êðîíà è α1 , . . . , αn−1 êðîíû íåêîòîðûõ ñå÷åíèé.  ÊÑ-ãðàììàòèêå ñóùåñòâóåò âûâîä S ⇒∗ α òîãäà è òîëüêî òîãäà, êîãäà ñóùåñòâóåò äåðåâî âûâîäà ñ êðîíîé α. Âòîðîå óòâåðæäåíèå ïðåäñòàâëÿåòñÿ î÷åíü åñòåñòâåííûì. Áóäåì èì ïîëüçîâàòüñÿ (áåç äîêàçàòåëüñòâà). 8. Ýêâèâàëåíòíûå ïðåîáðàçîâàíèÿ ãðàììàòèê ßñíî, ÷òî îäèí è òîò æå ôîðìàëüíûé ÿçûê ìîæåò áûòü ïîðîæäåí ðàçëè÷íûìè (íî ïîõîæèìè) ôîðìàëüíûìè ãðàììàòèêàìè. Îäíè èç íèõ, âîçìîæíî, èìåþò ïðåèìóùåñòâà 44 ïåðåä äðóãèìè. Ñóùåñòâóþò îòíîñèòåëüíî ïðîñòûå ïðèåìû óëó÷øåíèÿ ôîðìàëüíûõ ãðàììàòèê. 8.1. Íåîäíîçíà÷íûå ãðàììàòèêè Ãðàììàòèêà íàçûâàåòñÿ íåîäíîçíà÷íîé, åñëè â ÿçûêå ñóùåñòâóåò õîòÿ áû îäíà öåïî÷êà, êîòîðàÿ ÿâëÿåòñÿ êðîíîé áîëåå ÷åì îäíîãî äåðåâà âûâîäà. ßçûê íàçûâàåòñÿ íåîäíîçíà÷íûì, åñëè âñå ïîðîæäàþùèå åãî ãðàììàòèêè ÿâëÿþòñÿ íåîäíîçíà÷íûìè.  òåîðèè ôîðìàëüíûõ ÿçûêîâ è ôîðìàëüíûõ ãðàììàòèê ñòàâèòñÿ ðÿä ïðîáëåì ñóùåñòâåííî âàæíûõ âîïðîñîâ. Ïðîáëåìà íàçûâàåòñÿ àëãîðèòìè÷åñêè ðàçðåøèìîé, åñëè äëÿ îòâåòà íà ñîîòâåòñòâóþùèé âîïðîñ ìîæíî ïîñòðîèòü àëãîðèòì, ñîñòîÿùèé èç êîíå÷íîãî ÷èñëà øàãîâ. Äîêàçàíî, ÷òî ïðîáëåìà îäíîçíà÷íîñòè ïðîèçâîëüíîé ãðàììàòèêè àëãîðèòìè÷åñêè íå ðàçðåøèìà. Ïåðå÷èñëèì íåêîòîðûå äðóãèå ïðîáëåìû: * Ñîäåðæèò ëè ÿçûê õîòÿ áû îäíó öåïî÷êó? * Ñîäåðæèò ëè ÿçûê áåñêîíå÷íîå ÷èñëî öåïî÷åê? * Ñîäåðæèò ëè ÿçûê äàííóþ öåïî÷êó? * Ïîðîæäàþò ëè äâå ãðàììàòèêè îäèí è òîò æå ÿçûê? * Ïîðîæäàåò ëè ãðàììàòèêà ÿçûê, ñîäåðæàùèé âñå âîçìîæíûå òåðìèíàëüíûå öåïî÷êè? * Ïåðåñåêàþòñÿ ëè ÿçûêè, ïîðîæäàåìûå äâóìÿ ãðàììàòèêàìè? Ïðèìåð. Íåîäíîçíà÷íóþ ãðàììàòèêó ïîñòðîèòü äîñòàòî÷íî ïðîñòî. Ïóñòü (1) ÎÏ → if ÓÑ then ÎÏ else ÎÏ (2) ÎÏ → if ÓÑ then ÎÏ (3) ÎÏ → ÁÓ Öåïî÷êà if ÓÑ then if ÓÑ then ÁÓ else ÁÓ âûâîäèòñÿ ðàçëè÷íûìè ñïîñîáàìè è ìîæåò áûòü ïî-ðàçíîìó èñòîëêîâàíà: èëè if ÓÑ then (if ÓÑ then ÁÓ) else ÁÓ èëè if ÓÑ then (if ÓÑ then ÁÓ else ÁÓ) ×òîáû óñòðàíèòü íåîäíîçíà÷íîñòü, ìîæíî â ñåìàíòèêó ÿçûêà äîáàâèòü: êëþ÷åâîå ñëîâî else îòíîñèòñÿ ê áëèæàéøåìó ñëåâà êëþ÷åâîìó ñëîâó if Òàêæå ìîæíî èçìåíèòü ãðàììàòèêó. Åñëè óâåëè÷èòü ÷èñëî ïðàâèë âûâîäà, òî íåîäíîçíà÷íîñòè óæå íå áóäåò: (2) (3) (4) (5) (1) ÎÏ → if ÓÑ then ÎÏ ÎÏ → if ÓÑ then ÎÏ1 else ÎÏ ÎÏ → ÁÓ ÎÏ1 → if ÓÑ then ÎÏ1 else ÎÏ1 ÎÏ1 → ÁÓ 45 8.2. Ýêâèâàëåíòíûå ïðåîáðàçîâàíèÿ ãðàììàòèê Ãðàììàòèêè, ïîðîæäàþùèå îäèí è òîò æå ÿçûê, íàçûâàþòñÿ ýêâèâàëåíòíûìè. Èçâåñòíû àëãîðèòìû, ïîçâîëÿþùèå ýêâèâàëåíòíî ïåðåéòè îò îäíîé ãðàììàòèêè ê äðóãîé, íî òàê, ÷òîáû èçáàâèòüñÿ îò òåõ èëè èíûõ íåæåëàòåëüíûõ ñâîéñòâ. Íåòåðìèíàëüíûé ñèìâîë íàçûâàåòñÿ ïðîèçâîäÿùèì, åñëè èç íåãî ìîæíî âûâåñòè òåðìèíàëüíóþ öåïî÷êó. Ñèìâîë íàçûâàåòñÿ íåäîñòèæèìûì, åñëè îí íå ìîæåò ïîÿâèòüñÿ íè â îäíîé öåïî÷êå ÿçûêà. Ñèìâîë íàçûâàåòñÿ áåñïîëåçíûì, åñëè îí íåïðîèçâîäÿùèé èëè íåäîñòèæèìûé. Ðàññìîòðèì íåñêîëüêî ïîëåçíûõ àëãîðèòìîâ. Àëãîðèòì ïîñòðîåíèÿ ìíîæåñòâà Np ïðîèçâîäÿùèõ ñèìâîëîâ 1. Np0 := ∅, i := 1 2. Npi := Npi−1 ∪ {A | A → α, α ∈ (Npi−1 ∪ T )∗ } 3. Åñëè Npi <> Npi−1 , òî ( i := i + 1; ïåðåéòè ê 2) 4. Np := Npi Àëãîðèòì ïîñòðîåíèÿ ìíîæåñòâà Nr äîñòèæèìûõ ñèìâîëîâ 1. Nr0 := {S}, i := 1 2. Nri = Nri−1 ∪ {X | A → αXβ ∈ P è A ∈ Nri−1 } 3. Åñëè Nri <> Nri−1 , òî ( i := i + 1; ïåðåéòè ê 2) 4. Nr := Nri Àëãîðèòì óñòðàíåíèÿ áåñïîëåçíûõ ñèìâîëîâ 1. Ïîñòðîèòü Np äëÿ G 2. P1 := {ïðàâèëà èç P, ñîñòîÿùèå èç ñèìâîëîâ T ∪ Np }; G1 := (T, Np , S, P1 ) 3. Ïîñòðîèòü Nr äëÿ G1 4. P 0 := {ïðàâèëà èç P1 , ñîñòîÿùèå èç ñèìâîëîâ Nr }; T 0 := T ∩ Nr ; N 0 := Nr ∩ N ; G0 := (T 0 , N 0 , S, P 0 ) Çàäà÷à. Óñòðàíèòü áåñïîëåçíûå ñèìâîëû â ãðàììàòèêå T = {a, b, c}, N = {A, B, C, S}, S, P = {S → aC, S → A, A → cAB, B → b, C → a} Ýòà çàäà÷à ðåøàåòñÿ ñëåäóþùèì îáðàçîì. 1) Î÷åâèäíî, ìíîæåñòâî ïðîèçâîäÿùèõ ñèìâîëîâ Np = {B, C, S}. (Èç A öåïî÷êó èç òîëüêî òåðìèíàëüíûõ ñèìâîëîâ âûâåñòè íåëüçÿ: A âñåãäà çàìåíÿåòñÿ íà öåïî÷êó, îïÿòü ñîäåðæàùóþ A). 2) Òîãäà ïðàâèëà âûâîäà, â êîòîðûõ íå ñîäåðæèòñÿ íåòåðìèíàëüíûé ñèìâîë A, îáðàçóþò ìíîæåñòâî P1 = {S → aC, B → b, C → a}. 3)  íîâîé ãðàììàòèêå äîñòèæèìûå ñèìâîëû Nr = {a, C, S}. 46 4) Ïîýòîìó îêîí÷àòåëüíî T 0 = T ∩ Nr = {a}, N 0 = Nr ∩ N = {C, S}, P 0 = {S → aC, C → a}. Îêàçàëîñü, ÷òî ÿçûê, ïîðîæäàåìûé íîâîé ãðàììàòèêîé, ñîñòîèò òîëüêî èç îäíîé öåïî÷êè ñèìâîëîâ: L(G0 ) = {aa}. 8.3. Ïðåîáðàçîâàíèå ãðàììàòèêè â íåóêîðà÷èâàþùóþ Ãðàììàòèêà íàçûâàåòñÿ íåóêîðà÷èâàþùåé, åñëè â ìíîæåñòâå ïðàâèë âûâîäà èëè íå ñîäåðæèòñÿ ε-ïðàâèë, èëè ñîäåðæèòñÿ òîëüêî îäíî ïðàâèëî âûâîäà S → ε è íà÷àëüíûé ñèìâîë S íå ñîäåðæèòñÿ â ïðàâûõ ÷àñòÿõ îñòàëüíûõ ïðàâèë âûâîäà. Àëãîðèòì ïîñòðîåíèÿ ìíîæåñòâà Nε óêîðà÷èâàþùèõ íåòåðìèíàëüíûõ ñèìâîëîâ 1. Nε0 := {A ∈ N | A → ε ∈ P }, i := 1 2. Nεi := Nεi−1 ∪ {A ∈ N | A → α ∈ P, α ∈ (Nεi−1 )∗ } 3. Åñëè Nεi <> Nεi−1 , òî ( i := i + 1; ïåðåéòè ê 2) 4. Nε := Nεi Àëãîðèòì ïðåîáðàçîâàíèÿ ãðàììàòèêè G = (T, N, S, P ) â íåóêîðà÷èâàþùóþ ãðàììàòèêó G0 = (T, N 0 , S 0 , P 0 ) 1. Ïîñòðîèòü Nε 2. P 0 := ∅ 3. Åñëè A → α0 B1 α1 . . . Bk αk ∈ P , ãäå k ≥ 0, Bj ∈ Nε è â öåïî÷êàõ αj ∈ (T ∪ N )∗ íå ñîäåðæèòñÿ ñèìâîëîâ èç Nε , òî âêëþ÷èòü â P 0 âñå ïðàâèëà âûâîäà âèäà A → α0 C1 α1 . . . Ck αk , ãäå Cj = Bj èëè Cj = ε. (Ïðàâèëî âûâîäà A → ε â P 0 íå âêëþ÷àåòñÿ.) 4. Åñëè S ∈ Nε , òî N 0 := N ∪ {S 0 } è âêëþ÷èòü â P 0 ïðàâèëà âûâîäà S 0 → S è S 0 → ε, èíà÷å N 0 := N è S 0 := S . Çàäà÷à 1 [1]. Ïðåîáðàçîâàòü ãðàììàòèêó â íåóêîðà÷èâàþùóþ: T = {b, c}, N = {S, A}, P = {S → cA, S → ε, A → cA, A → bA, A → ε}. Îòâåò: N 0 = {S, A, S 0 }, P = {S → cA, S → c, A → cA, A → c, A → bA, A → b, S 0 → S, S 0 → ε}. 47 8.4. Èñêëþ÷åíèå öåïíûõ ïðàâèë Ïðàâèëî âûâîäà íàçûâàåòñÿ öåïíûì, åñëè åãî ïðàâàÿ ÷àñòü ñîñòîèò èç òîëüêî îäíîãî íåòåðìèíàëüíîãî ñèìâîëà (A → B ). Àëãîðèòì èñêëþ÷åíèÿ öåïíûõ ïðàâèë 1. Äëÿ êàæäîãî íåòåðìèíàëüíîãî ñèìâîëà A ïîñòðîèòü ìíîæåñòâî NA = {B | A ⇒∗ B}: 1.1. NA0 := {A}; i := 1. 1.2. NAi := NAi−1 ∪ {C | B → C ∈ P, B ∈ NAi−1 }. 1.3. Åñëè NAi <> NAi−1 , òî ...... , èíà÷å NA := NAi 2. Äëÿ êàæäîãî ñèìâîëà B èç NA , åñëè B → α ∈ P íå öåïíîå ïðàâèëî, òî âêëþ÷èòü â P 0 ïðàâèëà âûâîäà A → α. Åùå ðàç. Ïåðåáèðàþòñÿ âñå íåòåðìèíàëüíûå ñèìâîëû. Äëÿ ñèìâîëà A ïðîñìàòðèâàþòñÿ ýëåìåíòû B ìíîæåñòâà NA . Åñëè ïðàâèëî âûâîäà B → α íå öåïíîå, òî â P 0 äîáàâëÿåòñÿ A → α. Çàäà÷à 2 [1]. Èñêëþ÷èòü öåïíûå ïðàâèëà: P = {E → E + T, E → T, T → T ∗ P, T → P, P → i, P → (E)}. Îòâåò: P 0 = {E → E + T, E → T ∗ P, E → i, E → (E), T → T ∗ P, T → i, T → (E), P → i, P → (E)}. 8.5. Íîðìàëüíàÿ ôîðìà Õîìñêîãî Ñðåäè ìíîæåñòâà ýêâèâàëåíòíûõ ãðàììàòèê ìîæíî âûáèðàòü íàèáîëåå ïðîñòûå. Ãðàììàòèêà G = (T, N, S, P ) íàçûâàåòñÿ ãðàììàòèêîé â íîðìàëüíîé ôîðìå Õîìñêîãî, åñëè â ìíîæåñòâå P ñîäåðæàòñÿ òîëüêî ïðàâèëà âûâîäà âèäà: 1) A → BC , ãäå A, B, C ∈ N ; 2) A → a, ãäå A ∈ N, a ∈ T ; 3) åñëè ε ∈ G(L), òî S → ε; ïðè÷åì S íå âñòðå÷àåòñÿ â ïðàâûõ ÷àñòÿõ ïðàâèë. Àëãîðèòì ïðåîáðàçîâàíèÿ ãðàììàòèêè ê íîðìàëüíîé ôîðìå Õîìñêîãî 0. Óñòðàíèòü áåñïîëåçíûå ñèìâîëû; ïðåîáðàçîâàòü ãðàììàòèêó â íåóêîðà÷èâàþùóþ; óñòðàíèòü öåïíûå ïðàâèëà. 1. Åñëè S ñîäåðæèòñÿ â ïðàâûõ ÷àñòÿõ ïðàâèë âûâîäà, òî ââîäèòñÿ íîâûé íà÷àëüíûé ñèìâîë S 0 è â P âêëþ÷àåòñÿ ïðàâèëî âûâîäà S 0 → S . 2. Åñëè S → ε ∈ P , òî S → ε âêëþ÷àåòñÿ â P 0 . 3. Ïðàâèëà âûâîäà âèäà A → BC è A → a ïåðåíîñÿòñÿ èç P â P 0 . 4. Åñëè â P èìååòñÿ ïðàâèëî âûâîäà âèäà A → X1 . . . Xk , k > 2, òî â N 0 âíîñÿòñÿ íîâûå ñèìâîëû < X2 . . . Xk >, . . . ,< Xk−1 Xk > è â P 0 âíîñÿòñÿ ïðàâèëà âûâîäà A → X10 < X2 . . . Xk >, 0 X _k , < X2 . . . Xk >→ X20 < X3 . . . Xk >, < Xk−1 Xk >→ Xk−1 0 ãäå Xi = Xi , åñëè Xi ∈ N (íåòåðìèíàëüíûå ñèìâîëû îñòàþòñÿ ) èëè Xi0 =< Xi >, åñëè Xi ∈ T (âìåñòî òåðìèíàëüíûõ ââîäÿòñÿ íåòåðìèíàëüíûå ) 48 5. Åñëè â P èìååòñÿ ïðàâèëî âûâîäà âèäà A → X1 X2 , ãäå õîòÿ áû îäèí èç ñèìâîëîâ X1 , X2 òåðìèíàëüíûé, òî â P 0 âêëþ÷àåòñÿ ïðàâèëî âûâîäà A → X10 X20 , ãäå. . . 6. Äëÿ íîâûõ íåòåðìèíàëüíûõ ñèìâîëîâ < Xi > â P 0 âêëþ÷àþòñÿ ïðàâèëà âûâîäà < Xi >→ Xi . Çàäà÷à 3 [1]. Ïðåîáðàçîâàòü ãðàììàòèêó ê íîðìàëüíîé ôîðìå Õîìñêîãî: T = {a, b}, N = {S, A, B}, P = {S → A, S → ABA, A → aA, A → a, A → B, B → bB, B → b}. 8.6. Íîðìàëüíàÿ ôîðìà Ãðåéáàõ Ãðàììàòèêà G = (T, N, S, P ) íàçûâàåòñÿ ãðàììàòèêîé â íîðìàëüíîé ôîðìå Ãðåéáàõ, åñëè 1) â íåé íåò ε-ïðàâèë âûâîäà; 2) êàæäîå ïðàâèëî âûâîäà, îòëè÷íîå îò S → ε, èìååò âèä A → aα, ãäå a ∈ T, α ∈ N ∗ . Ïðè ïðèâåäåíèè ãðàììàòèêè ê íîðìàëüíîé ôîðìå Ãðåéáàõ íóæíî óñòðàíèòü ëåâóþ ðåêóðñèþ. Íåòåðìèíàëüíûé ñèìâîë A íàçûâàåòñÿ ðåêóðñèâíûì, åñëè â P ñîäåðæèòñÿ ïðàâèëî âûâîäà âèäà A → αAβ , ãäå α, β íåêîòîðûå öåïî÷êè. Àëãîðèòì óñòðàíåíèÿ ëåâîé ðåêóðñèè (ïóñòü N = {A1 , . . . , An }) 1. i := 1. 2. Ïðàâèëà âûâîäà Ai → Ai α1 , . . . , Ai → Ai αm , Ai → β1 , . . . , Ai → βn çàìåíÿþòñÿ íà Ai → β1 , . . . , Ai → βn , Ai → β1 A0i , . . . , Ai → βn A0i , A0i → α1 , . . . , A0i → αm , A0i → α1 A0i , . . . , A0i → αm A0i , ãäå A0i íîâûé íåòåðìèíàëüíûé ñèìâîë. 3. Åñëè i = n, òî àëãîðèòì çàâåðøåí, èíà÷å i := i + 1; j := 1. 4. Ïðàâèëà âûâîäà âèäà Ai → Aj α çàìåíÿþòñÿ íà Ai → β1 α, . . . , Ai → βm α, ãäå βk áåðóòñÿ èç ïðàâèë âûâîäà Aj → β1 , . . . , Aj → βm . 5. Åñëè j = i − 1, òî ïåðåõîäèì ê 2, èíà÷å j := j + 1 è ïåðåõîäèì ê 4. Áîëåå ïðîñòîé ñëó÷àé: â ìíîæåñòâå ïðàâèë âûâîäà ñîäåðæèòñÿ: A → Aα1 , . . . , A → Aαm è A → β1 , . . . , A → βn . ×òîáû èñêëþ÷èòü ëåâóþ ðåêóðñèþ, ââåäåì A0 è çàìåíèì ïðàâèëà âûâîäà íà A → β1 , . . . , A → βn , A → β1 A0 , . . . , A → βn A0 , A0 → α1 , . . . , A0 → αm , A0 → α1 A0 , . . . , A0 → αm A0 . Çàäà÷à 4 [1]. Óñòðàíèòü ëåâóþ ðåêóðñèþ: P = {E → E + T, E → T, T → T ∗ P, T → P, P → i, P → (E)}. Çàäà÷à 5 [1]. Óñòðàíèòü ëåâóþ ðåêóðñèþ â ãðàììàòèêå ñ ïðàâèëàìè âûâîäà: P = {S → AB, S → a, A → BS, A → Sb, B → SA, B → BB, B → a}. Ðåøàåòñÿ ýòà çàäà÷à òàê (çäåñü A1 = S, A2 = A, A3 = B ). 1) i = 1 : Äëÿ íåòåðìèíàëüíîãî ñèìâîëà S ïðàâèë âûâîäà âèäà S → Sα íåò (â P ñîõðàíÿþòñÿ ïðàâèëà S → AB, S → a). 49 2) i = 2; j = 1 : Äëÿ íåòåðìèíàëüíîãî ñèìâîëà A èìååòñÿ ïðàâèëî âûâîäà âèäà A → Sα, à èìåííî A → Sb. Íàõîäèì âñå ïðàâèëà âèäà S → β ýòî S → AB, S → a. Çàìåíÿåì A → Sb íà A → ABb, A → ab. Èòàê, ïîñëå ýòîãî øàãà â ìíîæåñòâå ïðàâèë âûâîäà ñîäåðæèòñÿ: S → AB, S → a, A → BS, A → ABb, A → ab, B → SA, B → BB, B → a. 3) Òàê êàê j = i − 1, òî ïåðåõîäèì ê øàãó 2 àëãîðèòìà. Äëÿ íåòåðìèíàëüíîãî ñèìâîëà A íàøëîñü ïðàâèëî âûâîäà âèäà A → Aα, à èìåííî A → ABb. Ââîäèì íîâûé íåòåðìèíàëüíûé ñèìâîë A0 è çàìåíÿåì ýòî ïðàâèëî (èñïîëüçóåì A → BS, A → ab ïðàâèëà âèäà A → β ) íà A → BSA0 , A → abA0 , A0 → Bb, A0 → BbA0 . Òåïåðü âñå ïðàâèëà âûâîäà: S → AB, S → a, A → BS, A → ab, A → BSA0 , A → abA0 , A0 → Bb, A0 → BbA0 , B → SA, B → BB, B → a. 4) i = 3; j = 1 : Åñòü ïðàâèëî âûâîäà âèäà B → Sα ýòî B → SA, à òàêæå ïðàâèëà âûâîäà âèäà S → β ýòî S → AB, S → a. Ïîýòîìó ýòî (ïåðâîå) ïðàâèëî çàìåíÿåì íà B → ABA, B → aA. 5) i = 3; j = 2 : Âìåñòî B → ABA ñ ó÷åòîì A → BS, A → ab, A → BSA0 , A → abA0 çàïèñûâàåì â P ïðàâèëà âûâîäà B → BSBA, B → abBA, B → BSA0 BA, B → abA0 BA. È òàê äàëåå, îñòàëîñü ñîâñåì íåìíîãî :-) 9. Ñèíòàêñè÷åñêè-îðèåíòèðîâàííàÿ òðàíñëÿöèÿ Íàïîìíèì õîðîøî èçâåñòíûå âñåì ïðîãðàììèñòàì òåðìèíû. Òðàíñëÿöèÿ ïðîöåññ ïåðåâîäà òåêñòà, íàïèñàííîãî íà îäíîì ÿçûêå (èñõîäíûé êîä ), â òåêñò íà äðóãîì ÿçûêå. Òðàíñëÿòîð êîìïüþòåðíàÿ ïðîãðàììà äëÿ ïåðåâîäà. Êîìïèëÿòîð ïåðåâîäèò ïðîãðàììó íà ÿçûêå âûñîêîãî óðîâíÿ öåëèêîì â ïðîãðàììó íà ÿçûêå áîëåå íèçêîãî óðîâíÿ (â ìàøèííûé, îáúåêòíûé èëè ïðîìåæóòî÷íûé êîä ). Èíòåðïðåòàòîð ïåðåâîäèò îòäåëüíûå îïåðàòîðû ïðîãðàììû â ìàøèííûé êîä è ñðàçó ïåðåäàåò åãî íà âûïîëíåíèå. Ïðåïðîöåññîð òðàíñëÿòîð, êîòîðûé ïðåîáðàçóåò ïðîãðàììó íà ÿçûêå âûñîêîãî óðîâíÿ ñ ðàñøèðåíèÿìè â ïðîãðàììó íà áàçîâîì ÿçûêå. Íåñêîëüêî ñëîâ î ïëàòôîðìå .NET . . . Îñíîâíàÿ èäåÿ ñèíòàêñè÷åñêè-îðèåíòèðîâàííîé òðàíñëÿöèè (àâòîð Íîàì Õîìñêèé): ïðè îáðàáîòêå èñõîäíîãî òåêñòà èñïîëüçîâàòü ñòðóêòóðó ïðåäëîæåíèÿ äëÿ âûÿâëåíèÿ åãî ñìûñëà.  ñîîòâåòñòâèè ñ ýòèì ïîëó÷àåòñÿ, ÷òî Ñèíòàêñèñ îïðåäåëÿåò ñåìàíòèêó. ×òî òàêîå ñòðóêòóðà ñëîæíîãî îáúåêòà? Ýòî ðàçáèåíèå åãî íà ñâÿçàííûå ìåæäó ñîáîé ÷àñòè, òî åñòü îïèñàíèå îòäåëüíûõ ÷àñòåé îáúåêòà è ñâÿçåé ìåæäó íèìè.  òåîðèè ôîðìàëüíûõ ÿçûêîâ ñòðóêòóðó öåïî÷êè ñèìâîëîâ îïðåäåëÿåò åå äåðåâî âûâîäà. Ïðèìåð. "Àðèôìåòè÷åñêîå" âûðàæåíèå a%b#c?d. Èíòóèòèâíî ÿñíî, ÷òî áóêâàìè îáîçíà÷åíû êàêèå-òî îïåðàíäû, à çíàêàìè íåêîòîðûå îïåðàöèè íàä íèìè (ñìûñë ýòèõ îïåðàöèé â äàííîì ñëó÷àå ñêðûò). 50 9.1. Àòðèáóòíûå ãðàììàòèêè Äîíàëüä Êíóò (ïðîôåññîð Ñòàíôîðäñêîãî óíèâåðñèòåòà) ïðåäëîæèë ðàñøèðèòü ïîíÿòèå êîíòåêñòíî-ñâîáîäíîé ãðàììàòèêè. Êàæäîìó ñèìâîëó (òåðìèíàëüíîìó è íåòåðìèíàëüíîìó) ïðèïèñûâàåòñÿ êîíå÷íîå ÷èñëî àòðèáóòîâ ñåìàíòè÷åñêèõ ïàðàìåòðîâ. Ê êàæäîìó ñèíòàêñè÷åñêîìó ïðàâèëó âûâîäà äîáàâëÿþòñÿ ñåìàíòè÷åñêèå ïðàâèëà, ïî êîòîðûì ïðåîáðàçóþòñÿ çíà÷åíèÿ àòðèáóòîâ. Ñìûñë öåïî÷êè ñèìâîëîâ (ïðåäëîæåíèÿ ÿçûêà) âû÷èñëÿåòñÿ ïî ïîñòðîåííîìó äåðåâó âûâîäà. Óäîáíî èñïîëüçîâàòü îáúåêòíóþ èäåîëîãèþ: êàæäûé ñèìâîë ãðàììàòèêè ðàññìàòðèâàåòñÿ êàê êëàññ, à ëþáîå èñïîëüçîâàíèå ýòîãî ñèìâîëà ïîðîæäàåò îáúåêò. Ïðèìåð. Âåùåñòâåííûå àðèôìåòè÷åñêèå âûðàæåíèÿ À → ÂÊ | (ÀÂ) | À + À | À − À | À ∗ À | ÀÂ/À Êëàññû ÂÊ (âåùåñòâåííàÿ êîíñòàíòà) è À (àðèôìåòè÷åñêîå âûðàæåíèå) èìåþò ïîëå V alue (çíà÷åíèå).  àòðèáóòíîé ãðàììàòèêå ïðàâèëà âûâîäà äîïîëíÿþòñÿ ñåìàíòè÷åñêèìè ïðàâèëàìè, êîòîðûå îïðåäåëÿþò äåéñòâèÿ íàä àòðèáóòàìè: À → ÂÊ ÀÂ.V alue := ÂÊ.V alue ÀÂ0 → (ÀÂ1 ) ÀÂ0 .V alue := ÀÂ1 .V alue ÀÂ0 → ÀÂ1 + ÀÂ2 ÀÂ0 .V alue := ÀÂ1 .V alue + ÀÂ2 .V alue è òàê äàëåå ... Ñåìàíòè÷åñêèå àòðèáóòû ïîäðàçäåëÿþòñÿ íà ñèíòåçèðîâàííûå è óíàñëåäîâàííûå. Ñèíòåçèðîâàííûå àòðèáóòû íåòåðìèíàëüíûõ ñèìâîëîâ âû÷èñëÿþòñÿ â äåðåâå âûâîäà ñíèçó ââåðõ. Óíàñëåäîâàííûå àòðèáóòû íåòåðìèíàëüíûõ ñèìâîëîâ âû÷èñëÿþòñÿ â äåðåâå âûâîäà ñâåðõó âíèç. Ïðèìåð. Îáúÿâëåíèå ïåðåìåííûõ â ÿçûêå ïðîãðàììèðîâàíèÿ. ÎÏ → ÒÏ ÑÈ | ÎÏ ; ÒÏ ÑÈ ÒÏ → real | int ÑÈ → ÈÄ | ÑÈ , ÈÄ ÈÄ → <áóêâà> (Îïèñàíèå Ïåðåìåííûõ, Òèï Ïåðåìåííîé, Ñïèñîê Èäåíòèôèêàòîðîâ, Èäåíòèôèêàòîð) Äëÿ ïðîãðàììèñòà ñìûñë öåïî÷êè ñèìâîëîâ real x, y; int k, l, m, ïîñòðîåííîé ïî ïðàâèëàì âûâîäà ãðàììàòèêè, âïîëíå ÿñåí. Âîïðîñ. Êàêèå ñåìàíòè÷åñêèå àòðèáóòû íóæíî ïðèïèñàòü íåòåðìèíàëüíîìó ñèìâîëó ÈÄ ? Ïðèìåð. Àòðèáóòíàÿ ãðàììàòèêà: äâîè÷íûå âåùåñòâåííûå ÷èñëà S → L.L L → B | LB B →0|1 Àòðèáóòû äëÿ íåòåðìèíàëüíûõ ñèìâîëîâ: 51 B L S Value Value Length Value bit word, byte real Ñåìàíòè÷åñêèå ïðàâèëà: B→1 B.V alue := 1 B→0 B.V alue := 0 L→B L.V alue := B.V alue; L.Length := 1 L0 → L1 B L0 .V alue := 2 × L1 .V alue + B.V alue; L0 .Length := L1 .Length + 1 S → L1 .L2 S.V alue := L1 .V alue + L2 .V alue / 2L2 .Length 9.2. Òðàíñëÿöèÿ àðèôìåòè÷åñêèõ âûðàæåíèé Äëÿ îïèñàíèÿ àðèôìåòè÷åñêèõ âûðàæåíèé ìîæíî èñïîëüçîâàòü ðàçëè÷íûå ãðàììàòèêè. Íàïðèìåð, 1. E → i | (E) | E + E | E − E | E ∗ E | E/E Ýòà ãðàììàòèêà ÿâëÿåòñÿ äâóñìûñëåííîé ïî îäíîé è òîé æå öåïî÷êå ìîæíî ïîñòðîèòü íåñêîëüêî ðàçëè÷íûõ äåðåâüåâ âûâîäà. Íî åñòü ïðîñòîé ñïîñîá óñòðàíåíèÿ äâóñìûñëåííîñòè. Íóæíî íàïèñàòü òàê: 2. E → E + T | T T →i Çäåñü ïîäðàçóìåâàåòñÿ, ÷òî ïîðÿäîê âûïîëíåíèÿ îïåðàöèé îáùåïðèíÿòûé ñëåâà íàïðàâî. Ñåìàíòè÷åñêèå ïðàâèëà: E0 → E1 + T E→T T →i E0 .V alue := E1 .V alue + T.V alue E.V alue := T.V alue T.V alue := i.V alue 3. E → E + T | E − T | T T →i Çäåñü âñå îïåðàöèè èìåþò îäèí è òîò æå ïðèîðèòåò. 4. E → E + T | E ∗ T | T T →i Ïîëó÷èëîñü íå î÷åíü õîðîøî ïðèîðèòåò íå ñîáëþäàåòñÿ :-( 5. E → E + T | T T →T ∗F |F F →i Äîáàâèì åùå âû÷èòàíèå, äåëåíèå, âîçâåäåíèå â ñòåïåíü è ñêîáêè: 6. E → E + T | E − T | T T → T ∗ P | T /P | P P →Q↑P |Q Q → i | (E) 52 9.3. Ïîëüñêàÿ èíâåðñíàÿ çàïèñü ÏÎËÈÇ áåññêîáî÷íàÿ ïîñòôèêñíàÿ ôîðìà çàïèñè àðèôìåòè÷åñêèõ âûðàæåíèé (ïðåäëîæèë ßí Ëóêàñåâè÷, 1925) x + y èíôèêñíàÿ ôîðìà (çíàê îïåðàöèè ïèøåòñÿ ìåæäó îïåðàíäàìè) +xy ïðåôèêñíàÿ ôîðìà (çíàê îïåðàöèè âïåðåäè) xy+ ïîñòôèêñíàÿ ôîðìà (çíàê îïåðàöèè ñòîèò ïîñëåäíèì)  ñîîòâåòñòâèè ñ ïðàâèëàìè ÏÎËÈÇ a + b ïðåîáðàçóåòñÿ â ab+ a + b ∗ c − d ïðåîáðàçóåòñÿ â abc ∗ +d− a + b ∗ (c − d) + (f − e) ïðåîáðàçóåòñÿ â abcd − ∗ + f e − + Öåïî÷êà ñèìâîëîâ, ïðåäñòàâëÿþùàÿ ñîáîé àðèôìåòè÷åñêîå âûðàæåíèå â ÏÎËÈÇ, îáðàáàòûâàåòñÿ ñëåâà íàïðàâî: îïåðàíäû çàïèñûâàþòñÿ â ñòåê, îïåðàöèè âûïîëíÿþòñÿ (îïåðàíäû áåðóòñÿ èç ñòåêà), è ðåçóëüòàò â ñòåê.  ïîëüñêîé èíâåðñíîé çàïèñè ìîæíî ïðåäñòàâèòü íå òîëüêî àðèôìåòè÷åñêèå âûðàæåíèÿ. Íàïðèìåð, îïåðàòîð ïðèñâàèâàíèÿ g := if a > c or d then e − f else q ïðåîáðàçóåòñÿ â gac > d or ef − q ite := Àòðèáóòíàÿ ãðàììàòèêà ïåðåâîäà àðèôìåòè÷åñêèõ âûðàæåíèé â ÏÎËÈÇ (îïåðàöèè òèïà ñëîæåíèÿ +, îïåðàöèè òèïà óìíîæåíèÿ ∗) çàäàåòñÿ ñ ïîìîùüþ ïðàâèë âûâîäà E →E+T |T T →T ∗F |F F → i | (E) Ñåìàíòè÷åñêèé àòðèáóò íåòåðìèíàëüíûõ ñèìâîëîâ E, T, F ñèìâîëüíàÿ ñòðîêà Str, îïåðàöèÿ íàä àòðèáóòàìè êîíêàòåíàöèÿ (åå çíàê íå ïèøåòñÿ). Âîò ñïèñîê ïðàâèë âûâîäà âìåñòå ñ îïåðàöèÿìè íàä ñåìàíòè÷åñêèìè àòðèáóòàìè: E → E1 + T E→T T → T1 ∗ F T →F F →i F → (E) E.Str := E1 .Str T.Str + E.Str := T.Str T.Str := T1 .Str F.Str ∗ T.Str := F.Str F.Str := i F.Str := E.Str Ñåìàíòèêà öåïî÷êè ñèìâîëîâ îïðåäåëÿåòñÿ òàê: ñíà÷àëà ñòðîèòñÿ äåðåâî âûâîäà (îò êðîíû ê êîðíþ), à çàòåì ýòî äåðåâî ïðîõîäèòñÿ â îáðàòíîì íàïðàâëåíèè (îò êîðíÿ ê êðîíå) è âûïèñûâàþòñÿ îïåðàöèè íàä ñåìàíòè÷åñêèìè àòðèáóòàìè. Ïðèìåð. (a + b) ∗ (c + d) çàìåíÿåòñÿ íà ab + cd + ∗ Åñëè äåðåâî âûâîäà ñòðîèòñÿ ñíèçó ââåðõ, òî ñåìàíòèêó ìîæíî óïðîñòèòü! 53 9.4. Èíòåðïðåòàöèÿ è êîìïèëÿöèÿ àðèôìåòè÷åñêèõ âûðàæåíèé Èíòåðïðåòàöèÿ àðèôìåòè÷åñêèõ âûðàæåíèé ìîæåò áûòü ïðîâåäåíà íà îñíîâå ñåìàíòè÷åñêèõ ïðàâèë èçìåíåíèÿ ïîëåé Value. Íàïðèìåð, E →E+T |T T →i E0 → E1 ∗ T E→T T →i E0 .V alue := E1 .V alue ∗ T.V alue E.V alue := T.V alue T.V alue := i.V alue Ïðè êîìïèëÿöèè ãåíåðèðóåòñÿ íåêîòîðîå ïðîìåæóòî÷íîå ïðåäñòàâëåíèå èñõîäíîãî êîäà. ×àñòî èñïîëüçóåòñÿ òàê íàçûâàåìûé p-êîä àíàëîã êîìàíä ÿçûêà Àññåìáëåðà. Ïðåäïîëîæèì, ÷òî êîìïüþòåð èìååò ïàìÿòü äëÿ êîäà, ïàìÿòü äëÿ äàííûõ è ñòåê. Êîìàíäû p-êîäà îáû÷íî âûãëÿäÿò òàê (îïåðàíäû èçâëåêàþòñÿ èç ñòåêà è ðåçóëüòàò îïåðàöèè çàïèñûâàåòñÿ â ñòåê): LD a ST a ADD SUB MUL DIV Ëåãêî ïîñòðîèòü àòðèáóòíóþ ãðàììàòèêó, îïèñûâàþùóþ ïðàâèëà ïðîãðàììèðîâàíèÿ â êîìàíäàõ p-êîäà. Ïðîãðàììèðîâàòü òàêæå ëåãêî. Íàïðèìåð, àðèôìåòè÷åñêîå âûðàæåíèå (a + b) ∗ (c + d) (åìó ñîîòâåòñòâóåò ïîñòôèêñíàÿ çàïèñü íà ab + cd + ∗) çàìåíÿåòñÿ íà ñëåäóþùèé êîä: LD a LD b ADD LD c LD d ADD MUL 10. Àâòîìàòû è ïðåîáðàçîâàòåëè Ïðîöåññ ðàñïîçíàâàíèÿ è ïåðåðàáîòêè öåïî÷êè ñèìâîëîâ ìîæíî ðàññìàòðèâàòü êàê ïðîöåññ ôóíêöèîíèðîâàíèÿ íåêîòîðîãî óñëîâíîãî ïðèáîðà. Àâòîìàòû è ïðåîáðàçîâàòåëè èñïîëüçóþòñÿ äëÿ ìîäåëèðîâàíèÿ àëãîðèòìîâ îáðàáîòêè öåïî÷åê ñèìâîëîâ. Ðàñïîçíàþùèé àâòîìàò èìååò: âõîäíóþ ëåíòó, óñòðîéñòâî ÷òåíèÿ, óñòðîéñòâî óïðàâëåíèÿ ñ êîíå÷íîé ïàìÿòüþ, âñïîìîãàòåëüíóþ ïàìÿòü. Òåêóùåå ñîñòîÿíèå ðàñïîçíàâàòåëÿ íàçûâàþò êîíôèãóðàöèåé. Äëÿ êàæäîé êîíôèãóðàöèè îïðåäåëåíû: 54 ñîñòîÿíèå óñòðîéñòâà óïðàâëåíèÿ (èõ êîíå÷íîå ìíîæåñòâî), ïîëîæåíèå óñòðîéñòâà ÷òåíèÿ (êàêîé ñèìâîë ÷èòàåòñÿ), ñîñòîÿíèå âñïîìîãàòåëüíîé ïàìÿòè (åñëè îíà åñòü).  ìíîæåñòâå êîíôèãóðàöèé âûäåëÿþòñÿ íà÷àëüíàÿ êîíôèãóðàöèÿ è êîíå÷íàÿ êîíôèãóðàöèÿ. Ïåðåõîä îò îäíîé êîíôèãóðàöèè ê äðóãîé îñóùåñòâëÿåòñÿ ïî òàêòàì. Ðàñïîçíàâàòåëü äîïóñêàåò âõîäíóþ öåïî÷êó, åñëè îí, îáðàáàòûâàÿ ýòó öåïî÷êó íà÷èíàÿ ñ íà÷àëüíîé êîíôèãóðàöèè, ïåðåõîäèò â êîíå÷íóþ êîíôèãóðàöèþ çà êîíå÷íîå ÷èñëî òàêòîâ. Êîíå÷íûé àâòîìàò ïðîñòåéøèé ðàñïîçíàâàòåëü áåç âñïîìîãàòåëüíîé ïàìÿòè. Èñïîëüçóþò ñëåäóþùåå îïðåäåëåíèå êîíå÷íîãî àâòîìàòà: K = (Q, T, δ, q0 , F ), ãäå Q êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé óñòðîéñòâà óïðàâëåíèÿ, T àëôàâèò âõîäíûõ ñèìâîëîâ, δ ôóíêöèÿ ïåðåõîäîâ (îòîáðàæåíèå Q × T → Q), q0 ∈ Q íà÷àëüíîå ñîñòîÿíèå, F ⊂ Q ìíîæåñòâî çàêëþ÷èòåëüíûõ ñîñòîÿíèé. Åñëè ôóíêöèÿ δ îäíîçíà÷íàÿ, òî ÊÀ íàçûâàþò äåòåðìèíèðîâàííûì. Åñëè ôóíêöèÿ δ ìíîãîçíà÷íàÿ, òî ÊÀ íàçûâàþò íåäåòåðìèíèðîâàííûì. Êîíôèãóðàöèÿ àâòîìàòà (q, w) ∈ Q × T ∗ , ïðè ýòîì íà÷àëüíàÿ êîíôèãóðàöèÿ (q0 , w) è êîíå÷íàÿ êîíôèãóðàöèÿ (q, ε) | q ∈ F . Çäåñü w öåïî÷êà ñèìâîëîâ, êîòîðûå åùå íå áûëè îáðàáîòàíû. Ïåðåõîäû îò êîíôèãóðàöèè ê êîíôèãóðàöèè îáîçíà÷àþòñÿ çíàêîì `. Ðàñïîçíàâàòåëü K = (Q, T, δ, q0 , F ) äîïóñêàåò âõîäíóþ öåïî÷êó w ∈ T ∗ , åñëè (q0 , w) ` (q, ε), q ∈ F . ßçûê, îïðåäåëÿåìûé êîíå÷íûì àâòîìàòîì K , L(K) = {w ∈ T ∗ | (q0 , w) ` (q, ε), q ∈ F } Ïðèìåð 1. Êîíå÷íûé àâòîìàò, äîïóñêàþùèé öåïî÷êè èç 0 è 1, â êîòîðûõ èìååòñÿ ïîäöåïî÷êà 11. K = ({q0 , q1 , q2 }, {0, 1}, δ, q0 , {q2 }) Ôóíêöèÿ ïåðåõîäîâ: δ(q0 , 0) = {q0 }, δ(q0 , 1) = {q1 }, δ(q1 , 0) = {q0 }, δ(q1 , 1) = {q2 }, δ(q2 , 0) = {q2 }, δ(q2 , 1) = {q2 } ×àñòî ôóíêöèÿ ïåðåõîäîâ çàäàåòñÿ êàê òàáëèöà ïåðåõîäîâ èëè êàê äèàãðàììà ïåðåõîäîâ. Ïðèìåð 2. Êîíå÷íûé àâòîìàò K = ({q0 , q1 , q2 , q3 }, {a, b}, δ, q0 , {q3 }) δ a b q0 q1 q0 q1 q1 q2 q2 q3 q0 q3 q3 q3 îïðåäåëÿåò, ñîäåðæèòñÿ ëè â öåïî÷êå ñèìâîëîâ ïîäöåïî÷êà aba. 55 Ïðèìåð 3. Ðàñïîçíàâàòåëü âåùåñòâåííîãî ÷èñëà áåç çíàêà âèäà zz.zz èìååò ïÿòü ñî- ñòîÿíèé, èç êîòîðûõ ÷åòûðå çàêëþ÷èòåëüíûå. Ïðàâèëüíûå öåïî÷êè ñèìâîëîâ èìåþò âèä: zz , zz., .zz è zz.zz . Ìîæíî ïðåäóñìîòðåòü â êîíñòðóêöèè òàêîãî àâòîìàòà âîçìîæíîñòü îòáðàñûâàíèÿ ëèøíèõ íóëåé (ñëåâà èëè ñïðàâà). Äîêàçàíî: ìíîæåñòâî ÿçûêîâ, äîïóñêàåìûõ êîíå÷íûìè àâòîìàòàìè, ñîâïà- äàåò ñ ìíîæåñòâîì ÿçûêîâ, ïîðîæäàåìûõ àâòîìàòíûìè ãðàììàòèêàìè. Êîíå÷íûé ïðåîáðàçîâàòåëü àíàëèçèðóåò öåïî÷êó ñèìâîëîâ íà âõîäíîé ëåíòå è çàïèñûâàåò äðóãóþ öåïî÷êó ñèìâîëîâ íà âûõîäíîé ëåíòå. Ïî îïðåäåëåíèþ M = (Q, T, D, δ, q0 , F ), ãäå Q êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé óñòðîéñòâà óïðàâëåíèÿ, T àëôàâèò âõîäíûõ ñèìâîëîâ, D àëôàâèò âûõîäíûõ ñèìâîëîâ, δ ôóíêöèÿ ïåðåõîäîâ (îòîáðàæåíèå Q × T → Q), q0 ∈ Q íà÷àëüíîå ñîñòîÿíèå, F ⊂ Q ìíîæåñòâî çàêëþ÷èòåëüíûõ ñîñòîÿíèé. Êîíôèãóðàöèÿ êîíå÷íîãî ïðåîáðàçîâàòåëÿ (q, x, y) ∈ Q × T ∗ × D∗ . Öåïî÷êà ñèìâîëîâ y ∈ D∗ íàçûâàåòñÿ âûõîäîì äëÿ öåïî÷êè ñèìâîëîâ x ∈ T ∗ , åñëè (q0 , x, ε) ` (q, ε, y) äëÿ íåêîòîðîãî q ∈ F . Àâòîìàò ñ ìàãàçèííîé ïàìÿòüþ (ÌÏ-àâòîìàò) ïðåäñòàâëÿåò ñîáîé êîíå÷íûé àâòîìàò, äîïîëíåííûé íåîãðàíè÷åííîé ïàìÿòüþ ñ äîñòóïîì òîëüêî ê êðàéíåìó ñèìâîëó. P = (Q, T, Γ, δ, q0 , Z0 , F ), ãäå Q êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé óñòðîéñòâà óïðàâëåíèÿ, T àëôàâèò âõîäíûõ ñèìâîëîâ, Γ àëôàâèò ñèìâîëîâ ìàãàçèíà, δ ôóíêöèÿ ïåðåõîäîâ (îòîáðàæåíèå Q × T × Γ → Q × Γ∗ ), q0 ∈ Q íà÷àëüíîå ñîñòîÿíèå óñòðîéñòâà óïðàâëåíèÿ, Z0 ∈ Γ íà÷àëüíûé ñèìâîë â ìàãàçèíå, F ⊂ Q ìíîæåñòâî çàêëþ÷èòåëüíûõ ñîñòîÿíèé. Êîíôèãóðàöèÿ ÌÏ-àâòîìàòà: q ñîñòîÿíèå óñòðîéñòâà óïðàâëåíèÿ, x íåîáðàáîòàííàÿ ÷àñòü âõîäíîé öåïî÷êè è α ñîäåðæèìîå ìàãàçèíà. Íà÷àëüíàÿ êîíôèãóðàöèÿ (q0 , w, Z0 ), çàêëþ÷èòåëüíàÿ êîíôèãóðàöèÿ (q, ε, α). Òàêò ðàáîòû (q, x, α) ` (q 0 , x0 , α0 ). ÌÏ-àâòîìàò äîïóñêàåò öåïî÷êó ñèìâîëîâ w ∈ T ∗ , åñëè (q0 , w, Z0 ) `∗ (q, ε, α) ïðè íåêîòîðûõ q ∈ F è α ∈ Γ∗ . ßçûê, îïðåäåëÿåìûé (äîïóñêàåìûé) ÌÏ-àâòîìàòîì, îáðàçóþò âñå ðàñïîçíàâàåìûå èì öåïî÷êè. Ïðèìåð 4. ÌÏ-àâòîìàò, äîïóñêàþùèé ÿçûê L = {an bn | n ≥ 0}: Q = {q0 , q1 , q2 }, T = {a, b}, Γ = {z, a}, 56 δ, , q0 , , z, F = {q0 } δ(q0 , a, z) = {(q1 , +a)}, δ(q1 , a, a) = {(q1 , +a)}, δ(q1 , b, a) = {(q2 , −)}, δ(q2 , b, a) = {(q2 , −)}, δ(q2 , ε, z) = {(q0 , ε)}, Èäåÿ ñëåäóþùàÿ: åñëè ÷èòàåòñÿ ñèìâîë a, òî îí âíîñèòñÿ â ìàãàçèí (çíàê +); åñëè ÷èòàåòñÿ ñèìâîë b, òî èç ìàãàçèíà èçûìàåòñÿ îäèí ñèìâîë. Êîãäà âñå ñèìâîëû ïðî÷èòàíû, à â ìàãàçèíå ïóñòî, ñèìâîëîâ b áûëî ðîâíî ñòîëüêî, ñêîëüêî ñèìâîëîâ a. Âî âðåìÿ ðàáîòû ÌÏ-àâòîìàòà îïåðàöèè íàä êðàéíèì ñèìâîëîì â ìàãàçèíå íå çàâèñÿò îò äðóãèõ ñèìâîëîâ â ìàãàçèíå! Ðàñøèðåííûå ÌÏ-àâòîìàòû äîïóñêàþò çàìåíó êîíå÷íîé öåïî÷êè êðàéíèõ ñèìâîëîâ â ìàãàçèíå íà äðóãóþ êîíå÷íóþ öåïî÷êó. Ìíîæåñòâî ÿçûêîâ, äîïóñêàåìûõ àâòîìàòàìè ñ ìàãàçèííîé ïàìÿòüþ, ñîâïàäàåò ñ ìíîæåñòâîì ÿçûêîâ, ïîðîæäàåìûõ êîíòåêñòíî ñâîáîäíûìè-ãðàììàòèêàìè. Ïðåîáðàçîâàòåëü ñ ìàãàçèííîé ïàìÿòüþ (ÌÏ-ïðåîáðàçîâàòåëü) ïðåäñòàâëÿåò ñîáîé ÌÏ-àâòîìàò, èìåþùèé óñòðîéñòâî çàïèñè ñèìâîëîâ íà âûõîäíóþ ëåíòó. D = (Q, T, D, Γ, δ, q0 , Z0 , F ), ãäå Q êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé óñòðîéñòâà óïðàâëåíèÿ, T àëôàâèò âõîäíûõ ñèìâîëîâ, D àëôàâèò âûõîäíûõ ñèìâîëîâ, Γ àëôàâèò ñèìâîëîâ ìàãàçèíà, δ ôóíêöèÿ ïåðåõîäîâ (îòîáðàæåíèå Q × T × Γ → Q × Γ∗ ), q0 ∈ Q íà÷àëüíîå ñîñòîÿíèå óñòðîéñòâà óïðàâëåíèÿ, Z0 ∈ Γ íà÷àëüíûé ñèìâîë â ìàãàçèíå, F ⊂ Q ìíîæåñòâî çàêëþ÷èòåëüíûõ ñîñòîÿíèé. Êîíôèãóðàöèÿ ÌÏ-ïðåîáðàçîâàòåëÿ: q ñîñòîÿíèå óñòðîéñòâà óïðàâëåíèÿ, x íåîáðàáîòàííàÿ ÷àñòü âõîäíîé öåïî÷êè, α ñîäåðæèìîå ìàãàçèíà è y öåïî÷êà ñèìâîëîâ íà âûõîäíîé ëåíòå. Ïðèìåð 5. Ïîñòðîèì ðàñøèðåííûé ÌÏ-ïðåîáðàçîâàòåëü, ïåðåâîäÿùèé àðèôìåòè- ÷åñêîå âûðàæåíèå â èíôèêñíîé ôîðìå â ýêâèâàëåíòíóþ ïðåôèêñíóþ ôîðìó. Êîíñòðóêöèÿ àâòîìàòà äîëæíà áûòü ñîãëàñîâàíà ñ ãðàììàòèêîé. Ïóñòü, êàê áûëî ðàíüøå, ãðàììàòèêà ñëåäóþùàÿ: {E, T, P }, {i, +, ∗, (, )}, E, {E → E + T, E → T, T → T ∗ P, T → P, P → (E), P → i} Ê ñîæàëåíèþ, àâòîìàò ïîëó÷èòñÿ íåäåòåðìèíèðîâàííûé çíà÷åíèÿ ôóíêöèè ïåðåõîäîâ âûáèðàþòñÿ èç íåêîòîðûõ äîïîëíèòåëüíûõ ñîîáðàæåíèé: δ(q, ε, E) = {(q, E + T, +), (q, T, ε)}, δ(q, ε, T ) = {(q, T ∗ P, ∗), (q, P, ε)}, δ(q, ε, P ) = {(q, (E), ε), (q, i, i)}, δ(q, a, a) = (q, ε, ε) ∀a ∈ T 57 Ïðåîáðàçîâàòåëü ðàñøèðåííûé â òîì ñìûñëå, ÷òî ñèìâîë â ìàãàçèíå ìîæåò áûòü çàìåíåí íà ïðàâóþ ÷àñòü îäíîãî èç ñîîòâåòñòâóþùèõ åìó ïðàâèë âûâîäà. Ñîñòîÿíèå àâòîìàòà âñåãäà îäíî è òî æå. Ïóñòü íà âõîäíîé ëåíòå i∗(i+i). Ïîñìîòðèì, êàê èäåò àíàëèç (ìàãàçèí çàïîëíÿåòñÿ âëåâî, âûõîäíûå ñèìâîëû äîïèñûâàþòñÿ ñïðàâà): âõîä ìàãàçèí i ∗ (i + i) E i ∗ (i + i) T i ∗ (i + i) T ∗P i ∗ (i + i) P ∗P i ∗ (i + i) i∗P ∗(i + i) ∗P (i + i) P (i + i) (E) i + i) E) i + i) E + T) i + i) T + T) i + i) P + T) i + i) i + T) +i) +T ) i) T) i) P) i) i) ) ) ε ε âûõîä ε ε ∗ ∗ ∗i ∗i ∗i ∗i ∗i ∗i+ ∗i+ ∗i+ ∗i + i ∗i + i ∗i + i ∗i + i ∗i + ii ∗i + ii ∗i + ii ßñíî, ÷òî äåéñòâèÿ áûëè òàêîâû: ñèìâîëû â ìàãàçèíå çàìåíÿþòñÿ íà ïðàâûå ÷àñòè ïðàâèë âûâîäà òàê, ÷òîáû â îêíå ìàãàçèíà áûë âèäåí òîò æå ñèìâîë, ÷òî íà âõîäíîé ëåíòå, ïîñëå ÷åãî ýòè îäèíàêîâûå ñèìâîëû êàê áû âû÷åðêèâàþòñÿ. 11. Ñòðàòåãèè ðàçáîðà öåïî÷åê ñèìâîëîâ Ïðè ðàñïîçíàâàíèè öåïî÷åê ñèìâîëîâ êîíñòðóèðóþòñÿ ñèíòàêñè÷åñêèå àíàëèçàòîðû óñòðîéñòâà (èëè êîìïüþòåðíûå ïðîãðàììû), ðàáîòàþùèå íà îñíîâå ïðàâèë ÊÑ-ãðàììàòèê. Ïðèìåì ñîãëàøåíèå: âõîäíàÿ öåïî÷êà àíàëèçèðóåòñÿ ñëåâà íàïðàâî. Öåïî÷êà ñ÷èòàåòñÿ ðàçîáðàííîé, åñëè ïîñòðîåíî åå äåðåâî âûâîäà â çàäàííîé ãðàììàòèêå. Ïóñòü âñå ïðàâèëà âûâîäà ãðàììàòèêè ïåðåíóìåðîâàíû. Òîãäà ðàçáîð öåïî÷êè ñâîäèòñÿ ê ñîñòàâëåíèþ ïîñëåäîâàòåëüíîñòè íîìåðîâ èñïîëüçóåìûõ ïðàâèë âûâîäà. Ïðè ðàçáîðå öåïî÷åê ñèìâîëîâ ñòðîÿòñÿ ÌÏ-ïðåîáðàçîâàòåëè, îòîáðàæàþùèå âõîäíûå öåïî÷êè â ïîñëåäîâàòåëüíîñòè ïðàâèë âûâîäà. Îñíîâíûå ñòðàòåãèè ðàçáîðà: íèñõîäÿùàÿ (ñâåðõó âíèç) ëåâûé âûâîä; âîñõîäÿùàÿ (ñíèçó ââåðõ) ïðàâûé âûâîä. 58 Ïðèìåð. Ãðàììàòèêà ñ ïðàâèëàìè âûâîäà (1) (2) (3) (4) (5) (6) E →E+T E→T T →T ∗P T →P P →i P → (E) Ïóñòü çàäàíà âõîäíàÿ öåïî÷êà ñèìâîëîâ i ∗ (i + i) Ëåâûé ðàçáîð 23456124545 (ëåâûé âûâîä, ñïèñîê íîìåðîâ ñëåâà íàïðàâî) E ⇒ T ⇒ T ∗ P ⇒ P ∗ P ⇒ i ∗ P ⇒ i ∗ (E) ⇒ i ∗ (E + T ) ⇒ i ∗ (T + T ) ⇒ ⇒ i ∗ (P + T ) ⇒ i ∗ (i + T ) ⇒ i ∗ (i + P ) ⇒ i ∗ (i + i) Ïðàâûé ðàçáîð 54542541632 (ïðàâûé âûâîä, ñïèñîê íîìåðîâ ñïðàâà íàëåâî) E ⇒ T ⇒ T ∗ P ⇒ T ∗ (E) ⇒ T ∗ (E + T ) ⇒ T ∗ (E + P ) ⇒ T ∗ (E + i) ⇒ ⇒ T ∗ (T + i) ⇒ T ∗ (P + i) ⇒ T ∗ (i + i) ⇒ P ∗ (i + i) ⇒ i ∗ (i + i) 11.1. Íèñõîäÿùèé ðàçáîð Ïóñòü G = (N, T, S, P ) ÊÑ-ãðàììàòèêà. Ëåâûé àíàëèçàòîð ïðåäñòàâëÿåò ñîáîé ÌÏ-ïðåîáðàçîâàòåëü Ml = ({q}, T, {1, 2, . . . , p}, T ∪ N, δ, q, S, {q}), ãäå 1) δ(q, a, a) = {(q, ε, ε)} äëÿ âñåõ a ∈ T ; 2) äëÿ ïðàâèëà âûâîäà A → α ñ íîìåðîì i â ìíîæåñòâå çíà÷åíèé δ(q, ε, A) ñîäåðæàòñÿ ýëåìåíòû (q, α, i). (Ìàãàçèí óäîáíî çàïîëíÿòü âëåâî.) Ïðèìåð. Äëÿ ãðàììàòèêè (1) E → E + T , (2) E → T , (3) T → T ∗ P , (4) T → P , (5) P → i, (6) P → (E) ëåâûé àíàëèçàòîð Ml = ({q}, {i, +, ∗, (, )}, {1, 2, 3, 4, 5, 6}, {i, +, ∗, (, ), E, T, P }, δ, q, E, {q}), δ(q, a, a) = (q, ε, ε) äëÿ âñåõ a ∈ {i, +, ∗, (, )}, δ(q, ε, E) = {(q, E + T, 1), (q, T, 2)}, δ(q, ε, T ) = {(q, T ∗ P, 3), (q, P, 4)}, δ(q, ε, P ) = {(q, i, 5), (q, (E), 6)}. 11.2. Âîñõîäÿùèé ðàçáîð Ïóñòü G = (N, T, S, P ) ÊÑ-ãðàììàòèêà. Ïðàâûé àíàëèçàòîð ïðåäñòàâëÿåò ñîáîé ðàñøèðåííûé ÌÏ-ïðåîáðàçîâàòåëü Mr = ({q}, T, {1, 2, . . . , p}, T ∪ N ∪ {z}, δ, q, z, {q}), ãäå 1) δ(q, a, ε) = {(q, a, ε)} äëÿ âñåõ a ∈ T ; 59 2) äëÿ ïðàâèëà âûâîäà A → α ñ íîìåðîì i â ìíîæåñòâå çíà÷åíèé δ(q, ε, α) ñîäåðæàòñÿ ýëåìåíòû (q, A, i); 3) δ(q, ε, Sz) = {(q, ε, ε}. (Ìàãàçèí óäîáíåå çàïîëíÿòü âïðàâî, íî áóäåì çàïîëíÿòü åãî âëåâî :-)) Ïðèìåð. Äëÿ ãðàììàòèêè (1) E → E + T , (2) E → T , (3) T → T ∗ P , (4) T → P , (5) P → i, (6) P → (E) ïðàâûé àíàëèçàòîð Mr = = ({q}, {1, 2, 3, 4, 5, 6}, {i, +, ∗, (, )}, {i, +, ∗, (, ), E, T, P, z}, δ, q, z, {q}), δ(q, a, ε) = (q, a, ε) äëÿ âñåõ a ∈ {i, +, ∗, (, )}, δ(q, ε, E + T ) = (q, E, 1), δ(q, ε, T ) = (q, E, 2), δ(q, ε, T ∗ P ) = (q, T, 3), δ(q, ε, P ) = (q, T, 4), δ(q, ε, i) = (q, P, 5), δ(q, ε, (E)) = (q, P, 6), δ(q, ε, Ez) = (q, ε, ε). 11.3. Íèñõîäÿùèé ðàçáîð ñ âîçâðàòàìè Ðàíüøå ðàññìàòðèâàëèñü íåäåòåðìèíèðîâàííûå ïðàâûé è ëåâûé ñèíòàêñè÷åñêèå àíàëèçàòîðû ôóíêöèÿ ïåðåõîäîâ áûëà ìíîãîçíà÷íîé. Åå çíà÷åíèå âûáèðàëîñü ñðåäè âñåõ âîçìîæíûõ èç êàêèõ-òî äîïîëíèòåëüíûõ ñîîáðàæåíèé. Ïðè ïîëíîì ðàçáîðå öåïî÷êè ñèìâîëîâ íóæíî ïðîñìàòðèâàòü âñå âîçìîæíûå ïåðåõîäû îò êîíôèãóðàöèè ê êîíôèãóðàöèè. Äîëæåí áûòü ïðåäóñìîòðåí âîçâðàò íàçàä, åñëè äàëüíåéøèå ïîñòðîåíèÿ íå èìåþò ñìûñëà.  îáùåì ñëó÷àå ïðè ïîñòðîåíèè äåðåâà âûâîäà âûáèðàþòñÿ àêòèâíûå âåðøèíû. Åñëè â àêòèâíîé âåðøèíå íàõîäèòñÿ íåòåðìèíàëüíûé ñèìâîë, òî îí ðàçâîðà÷èâàåòñÿ. Åñëè â àêòèâíîé âåðøèíå íàõîäèòñÿ òåðìèíàëüíûé ñèìâîë, òî îí ñðàâíèâàåòñÿ ñ òåêóùèì âõîäíûì ñèìâîëîì (öåïî÷êà ñèìâîëîâ àíàëèçèðóåòñÿ ñëåâà íàïðàâî). Ïðè ñîâïàäåíèè àêòèâíîãî òåðìèíàëüíîãî ñèìâîëà ñ òåêóùèì âõîäíûì ñèìâîëîì ïåðåõîäÿò ê ñëåäóþùåìó ñèìâîëó âõîäíîé öåïî÷êè (îí ñòàíîâèòñÿ òåêóùèì). Åñëè íåòåðìèíàëüíûå ñèìâîëû â àêòèâíûõ âåðøèíàõ ìîãóò áûòü ðàçâåðíóòû ðàçëè÷íûìè ñïîñîáàìè, òî ïðîáóþò ïîñëåäîâàòåëüíî âñå âàðèàíòû. Åñëè âîçíèêàåò îøèáêà, òî âîçâðàùàþòñÿ íàçàä è ïðîáóþò äðóãîé ñïîñîá. Ïðèìåð. Ðàçáîð öåïî÷êè ñèìâîëîâ aacbac â ãðàììàòèêå ñ ïðàâèëàìè âûâîäà (1) S → aSbS , (2) S → aS , (3) S → c Ïåðâàÿ àêòèâíàÿ âåðøèíà S . Ðàçâîðà÷èâàåì åå (âûáðàëè ïåðâîå ïðàâèëî âûâîäà èç P , ìîæåò áûòü, ïîëó÷èòñÿ): S | \ \ \ a S b S Ñëåäóþùàÿ àêòèâíàÿ âåðøèíà a. Òåðìèíàëüíûé ñèìâîë ñîâïàäàåò ñ òåêóùèì âõîäíûì ñèìâîëîì. Îáúÿâëÿåì àêòèâíîé âåðøèíîé S è ðàçâîðà÷èâàåì ýòîò íåòåðìèíàëüíûé 60 ñèìâîë (ïî ïåðâîìó ïðàâèëó âûâîäà): S | a \ \ \ S b S | \ \ \ a S b S Îïÿòü â àêòèâíîé âåðøèíå òåðìèíàëüíûé ñèìâîë a, îí ñîâïàäàåò ñî âòîðûì âõîäíûì ñèìâîëîì. Ïåðåõîäèì ê ñëåäóþùåé âåðøèíå S è ðàçâîðà÷èâàåì åå. ßñíî, ÷òî ïåðâûå äâà ïðàâèëà âûâîäà íå ïîäõîäÿò ðàçâîðà÷èâàåì ïî òðåòüåìó ïðàâèëó. Ïîëó÷èëîñü S | a \ S | a \ b \ S | c \ S \ b \ S ×òî òåïåðü íè äåëàé ñ ïîñëåäíåé àêòèâíîé âåðøèíîé S áóäåò îøèáêà. Íóæíî âåðíóòüñÿ íàçàä. Ïðàâèëüíîå äåðåâî âûâîäà S | a \ S | a \ \ b S \ | S a | c \ c Ìîæíî ïîêàçàòü, ÷òî íèñõîäÿùèé ðàçáîð âñåãäà áóäåò çàâåðøåí óñïåøíî, åñëè ãðàììàòèêà íå ñîäåðæèò ëåâîé ðåêóðñèè. ×òîáû àâòîìàò ìîã ìîäåëèðîâàòü àëãîðèòì íèñõîäÿùåãî ðàçáîðà ñ âîçâðàòàìè, íóæíî ïðåäóñìîòðåòü â åãî êîíñòðóêöèè äâà ìàãàçèíà è ñ÷åò÷èê.  ìàãàçèí L1 çàïèñûâàþòñÿ ïðîäåëàííûå âûáîðû è îáðàáîòàííûå âõîäíûå ñèìâîëû, â ìàãàçèí L2 âíîñÿòñÿ ñèìâîëû ëåâîâûâîäèìîé öåïî÷êè àêòèâíûå âåðøèíû, ñ÷åò÷èê i õðàíèò íîìåð îáðàáàòûâàåìîé ïîçèöèè âõîäíîé öåïî÷êè. Ïðåäóñìàòðèâàåòñÿ òðè ñîñòîÿíèÿ ëåâîãî àíàëèçàòîðà ñ âîçâðàòàìè: q íîðìàëüíîå ñîñòîÿíèå, b ñîñòîÿíèå âîçâðàòà è e çàêëþ÷èòåëüíîå ñîñòîÿíèå. Êîíôèãóðàöèþ àâòîìàòà îáðàçóþò ÷åòûðå ïàðàìåòðà: s ñîñòîÿíèå, i çíà÷åíèå ñ÷åò÷èêà, α ñîäåðæèìîå ìàãàçèíà L1 (óäîáíî ñ÷èòàòü, ÷òî âåðøèíà ýòîãî ìàãàçèíà ñïðàâà), β ñîäåðæèìîå ìàãàçèíà L2 (óäîáíî ñ÷èòàòü, ÷òî âåðøèíà ýòîãî ìàãàçèíà ñëåâà). Ðàññìîòðèì çíàêîìûé ïðèìåð. Ïóñòü ãðàììàòèêà ñîäåðæèò ïðàâèëà âûâîäà (1) E → E + T , (2) E → T , (3) T → T ∗ P , (4) T → P , (5) P → i Ïðîâåäåì àíàëèç öåïî÷êè ñèìâîëîâ i + i ∗ i. 61  ïåðâûé ìàãàçèí áóäåì çàïèñûâàòü àëüòåðíàòèâû óñëîâíûå îáîçíà÷åíèÿ ïðàâèë âûâîäà ãðàììàòèêè E1 , E2 , T1 , T2 , P1 .  ñòðîêàõ òàáëèöû çàïèñàíû ñîñòîÿíèÿ ëåâîãî àíàëèçàòîðà ñ âîçâðàòàìè. ñîñòîÿíèå s q q q q q b b b b ñ÷åò÷èê i 1 1 1 1 2 2 1 1 1 ìàãàçèí L1 ε E1 E1 T1 E1 T1 P1 E1 T1 P1 i E1 T1 P1 i E1 T1 P1 E1 T1 E1 T2 ìàãàçèí L2 E E+T E+T ∗P E+T ∗i E + T∗ E + T∗ E+T ∗i E+T ∗P E+P êîììåíòàðèé íà÷. êîíôèãóðàöèÿ ðàçðàñòàíèå äåðåâà ðàçðàñòàíèå äåðåâà ðàçðàñòàíèå äåðåâà ñðàâí. ñèìâ.: ñîâï. ñðàâí. ñèìâ.: íå ñîâï. âîçâðàò âîçâðàò ñìåíà àëüòåðíàòèâû è òàê äàëåå ... 11.4. Âîñõîäÿùèé ðàçáîð ñ âîçâðàòàìè Âîñõîäÿùèé ðàçáîð ñ âîçâðàòàìè âûïîëíÿåòñÿ â îáðàòíîì ïîðÿäêå: äåðåâî âûâîäà ñòðîèòñÿ îò ëèñòüåâ ê êîðíþ. Âñå íà÷èíàåòñÿ ñ ïðîñìîòðà âõîäíîé öåïî÷êè ñèìâîëîâ. Åñëè íàõîäèòñÿ ãðóïïà ñèìâîëîâ, ñîâïàäàþùàÿ ñ ïðàâîé ÷àñòüþ îäíîãî èç ïðàâèë âûâîäà, òî ïðîâîäèòñÿ ñâîðà÷èâàíèå äàííàÿ ãðóïïà ñèìâîëîâ çàìåíÿåòñÿ íà ëåâóþ ÷àñòü ýòîãî ïðàâèëà âûâîäà. Òàê äåëàåòñÿ äî òåõ ïîð, ïîêà íå áóäåò ïîëó÷åí íà÷àëüíûé íåòåðìèíàëüíûé ñèìâîë ãðàììàòèêè. Åñëè öåëü íå äîñòèãíóòà, òî íóæíî âåðíóòüñÿ íàçàä (îòìåíèòü ñâîðà÷èâàíèå) è ïîïðîáîâàòü ñâåðíóòü äðóãóþ ãðóïïó ñèìâîëîâ. Óñòàíîâëåíî, ÷òî äëÿ óñïåøíîãî çàâåðøåíèÿ ðàçáîðà: 1) â ãðàììàòèêå íå äîëæíî áûòü öèêëîâ, òî åñòü íåòðèâèàëüíûõ âûâîäîâ íåòåðìèíàëüíûõ ñèìâîëîâ èç ñàìèõ ñåáÿ; 2) â ãðàììàòèêå íå äîëæíî áûòü ïóñòûõ ïðàâèë âûâîäà (ñ ïóñòûìè öåïî÷êàìè â ïðàâîé ÷àñòè). Ðàññìîòðèì ïðîñòîé ïðèìåð. Ïóñòü â ãðàììàòèêå ñîäåðæàòñÿ ïðàâèëà âûâîäà: (1) S → AB , (2) A → ab, (3) B → aba Ïðîâåäåì âîñõîäÿùèé ðàçáîð ñ âîçâðàòàìè öåïî÷êè ñèìâîëîâ ababa. Çàìåíèì ãðóïïó ñèìâîëîâ ab íà íåòåðìèíàëüíûé ñèìâîë A, çàòåì âòîðóþ òàêóþ æå ãðóïïó ñíîâà íà A. Ïîëó÷èì AAa. Îøèáêà: â ýòîé öåïî÷êå ñèìâîëîâ íè÷åãî íå ñâîðà÷èâàåòñÿ, íà÷àëüíûé ñèìâîë íå äîñòèãíóò. Äåëàåì øàã íàçàä, ê öåïî÷êå: Aaba. Ïðîáóåì ïî-äðóãîìó òðè ïîñëåäíèõ ñèìâîëà çàìåíÿåì íà B . Âîò òåïåðü ïîëó÷èëîñü AB ñâîðà÷èâàåòñÿ â S . Ïðàâûé àíàëèçàòîð ñ âîçâðàòàìè êîíñòðóèðóåòñÿ òåì æå îáðàçîì, ÷òî è ëåâûé àíàëèçàòîð.  ìàãàçèí L1 ïîìåùàþòñÿ òåðìèíàëüíûå è íåòåðìèíàëüíûå ñèìâîëû, èç êîòîðûõ âûâîäèòñÿ ãðóïïà ñèìâîëîâ, ðàñïîëîæåííûõ â ëåâîé ÷àñòè âõîäíîé öåïî÷êè. Ñíà÷àëà ýòîò ìàãàçèí ïóñò, íî çàòåì òóäà ïåðåíîñÿòñÿ ïî îäíîìó ñèìâîëû èç âõîäíîé öåïî÷êè. Åñëè ìîæíî ñâåðíóòü òî, ÷òî â îêíå ìàãàçèíà ýòà ãðóïïà ñèìâîëîâ çàìåíÿåòñÿ íà èõ ñâåðòêó.  ìàãàçèíå L2 õðàíÿòñÿ íîìåðà ïðàâèë âûâîäà, èñïîëüçîâàííûõ ïðè ñâîðà÷èâàíèè, è òóäà æå ïîìåùàåòñÿ ñïåöèàëüíûé ñèìâîë s â çíàê òîãî, ÷òî â 62 ïåðâûé ìàãàçèí áûë ïåðåíåñåí ñèìâîë èç âõîäíîé öåïî÷êè. Ïðè âîçâðàòå âûïîëíÿþòñÿ î÷åâèäíûå äåéñòâèÿ .... Âñå ðàáîòàåò äîñòàòî÷íî ïðîñòî. Ðàññìîòðèì òîò æå ñàìûé ïðèìåð: (1) E → E + T , (2) E → T , (3) T → T ∗ P , (4) T → P , (5) P → i Ïðîâåäåì àíàëèç öåïî÷êè ñèìâîëîâ i + i ∗ i.  òàáëèöå îïèñàíû êîíôèãóðàöèè àâòîìàòà ïî òàêòàì: ñîñòîÿíèå s q q q q q q q q q q q q q q q ñ÷åò÷èê i 1 2 2 2 2 3 4 4 4 4 5 6 6 6 6 ìàãàçèí L1 ε i P T E E+ E+i E+P E+T E E∗ E∗i E∗P E∗T E∗E ìàãàçèí L2 ε s s5 s54 s542 s542s s542ss s542ss5 s542ss54 s542ss541 s542ss541s s542ss541ss s542ss541ss5 s542ss541ss54 s542ss541ss542 êîììåíòàðèé íà÷. êîíôèãóðàöèÿ ïåðåíîñ ñâîðà÷èâàíèå ñâîðà÷èâàíèå ñâîðà÷èâàíèå ïåðåíîñ ïåðåíîñ ñâîðà÷èâàíèå ñâîðà÷èâàíèå ñâîðà÷èâàíèå ïåðåíîñ ïåðåíîñ ñâîðà÷èâàíèå ñâîðà÷èâàíèå ñâîðà÷èâàíèå à äàëüøå íå ñâîðà÷èâàåòñÿ :-( Âîçâðàò! è òàê äàëåå ... :-) 11.5. Àëãîðèòì Ýðëè Ñóùåñòâóþò è äðóãèå àëãîðèòìû ðàçáîðà öåïî÷åê ñèìâîëîâ. Ðàññìîòðèì îäèí èç íèõ àëãîðèòì Ýðëè. Ïðîâåäåì ðàçáîð öåïî÷êè ñèìâîëîâ a1 a2 . . . an â ãðàììàòèêå G = (T, N, S, P ). Ñèòóàöèåé íàçûâàåòñÿ êîíñòðóêöèÿ âèäà [A → X1 . . . Xk • Xk+1 . . . Xm , i], åñëè â P åñòü ïðàâèëî âûâîäà A → X1 . . . Xm (k, i öåëûå ÷èñëà îò 0 äî m, • ìåòàñèìâîë "òîëñòàÿ òî÷êà"). Íóæíî ïîñòðîèòü ñïèñîê ðàçáîðà, ñîñòîÿùèé èç ñïèñêîâ ñèòóàöèé I0 , I1 , . . . In . Ïîñòðîåíèå ñïèñêà ðàçáîðà ñâîäèòñÿ ê äâóì ýòàïàì. I. Ñîñòàâëÿåòñÿ ñïèñîê I0 . II. Ïî ñïèñêàì I0 , . . . Ij−1 ñîñòàâëÿåòñÿ ñïèñîê Ij , j = 1..n. Ýòàï I. 1. Äëÿ êàæäîãî ïðàâèëà âûâîäà S → α ñèòóàöèÿ [S → •α, 0] âíîñèòñÿ â I0 . 63 2. Ýòî äåéñòâèå ïîâòîðÿåòñÿ, ïîêà ïîÿâëÿþòñÿ íîâûå ñèòóàöèè: 1) åñëè [B → γ•, 0] ∈ I0 è [A → α • Bβ, 0] ∈ I0 , òî ñèòóàöèÿ [A → αB • β, 0] âíîñèòñÿ â I0 ; 2) åñëè [A → α • Bβ, 0] ∈ I0 è B → γ ∈ P , òî ñèòóàöèÿ [B → •γ, 0] âíîñèòñÿ â I0 . Ýòàï II. 1. Äëÿ êàæäîé ñèòóàöèè [B → α • aj β, i] èç Ij−1 ñèòóàöèÿ [B → αaj • β, i] âíîñèòñÿ â Ij . 2. Ýòî äåéñòâèå ïîâòîðÿåòñÿ, ïîêà ïîÿâëÿþòñÿ íîâûå ñèòóàöèè: 1) åñëè [A → α•, i] ∈ Ij è [B → α • Aβ, k] ∈ Ii , òî ñèòóàöèÿ [B → αA • β, k] âíîñèòñÿ â Ij ; 2) åñëè [A → α • Bβ, i] ∈ Ij è B → γ ∈ P , òî ñèòóàöèÿ [B → •γ, j] âíîñèòñÿ â Ij . Ïî ñïèñêó ðàçáîðà ìîæíî ïîñòðîèòü ïðàâûé ðàçáîð öåïî÷êè ñèìâîëîâ ñëåäóþùèì îáðàçîì. Åñëè â In íåò ñèòóàöèè âèäà [S → α•, 0], òî âûäàåòñÿ ñîîáùåíèå îá îøèáêå; èíà÷å π := ε è âûïîëíÿåòñÿ ðåêóðñèâíî ïðîöåäóðà R([S → α•, 0], n). Ïðîöåäóðà R([A → β•, i], j) âïèñûâàåò ñëåâà â ãëîáàëüíóþ ïåðåìåííóþ π íîìåðà ïðàâèë âûâîäà: Äàëüíåéøèå øàãè àëãîðèòìà ñëåäóþùèå. 1. Åñëè A → β ïðàâèëî âûâîäà ñ íîìåðîì p, òî p âïèñûâàåòñÿ â π . 2. Åñëè β = X1 X2 . . . Xm , òî k := m è l := j . 3. Ïîâòîðÿåòñÿ, ïîêà k 6= 0: 1) åñëè Xk ∈ T , òî k := k − 1, l := l − 1; 2) åñëè Xk ∈ N , òî â ñïèñêå Il íóæíî íàéòè ñèòóàöèþ [Xk → γ•, r], äëÿ êîòîðîé â ñïèñêå Ir èìååòñÿ ñèòóàöèÿ âèäà [A → X1 X2 . . . Xk−1 • Xk . . . Xm , i]; 3) âûïîëíèòü R([Xk → γ•, r], l); 4) k := k − 1, l := r. Ðàññìîòðèì ïðèìåð. Ïóñòü ïðàâèëà âûâîäà ãðàììàòèêè (1) E → T + E , (2) E → T , (3) T → P ∗ T , (4) T → P , (5) P → a, (6) P → (E) (çäåñü ñèìâîë a èñïîëüçóåòñÿ âìåñòî ñòàðîãî i) Ýòàï I. Øàã 1. Ñîñòàâëÿåì ñïèñîê I0 . Òàê êàê E → T + E ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [E → •T + E, 0]; òàê êàê E → T ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [E → •T, 0]. Øàã 2. 1) Ñèòóàöèé âèäà [B → γ•, 0] â I0 íåò. 2) Òàê êàê [E → •T + E, 0] ∈ I0 è T → P ∗ T ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [T → •P ∗ T, 0]; òàê êàê [E → •T + E, 0] ∈ I0 è T → P ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [T → •P, 0].  I0 èìååòñÿ òàêæå ïîäõîäÿùàÿ ñèòóàöèÿ [E → •T, 0], íî ñïèñîê I0 íå ïîïîëíÿåòñÿ íîâûõ ñèòóàöèé íå îáðàçóåòñÿ. 64 2) Íà ïðåäûäóùåì ïîäøàãå â I0 ïîÿâèëèñü ñèòóàöèè, óäîâëåòâîðÿþùèå óñëîâèþ ïîäøàãà 2: òàê êàê [T → •P ∗ T, 0] ∈ I0 è P → a ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [P → •a, 0]; òàê êàê [T → •P ∗ T, 0] ∈ I0 è P → (E) ∈ P , òî â I0 âíîñèòñÿ ñèòóàöèÿ [P → •(E), 0]. Èç [T → •P, 0] ∈ I0 íè÷åãî íîâîãî íå ïîëó÷àåòñÿ. Èòàê, â ñïèñîê I0 áûëî âíåñåíî âñåãî 6 ñèòóàöèé. Ýòàï II. j = 1. Ñîñòàâëÿåì ñïèñîê I1 . Èìååì a1 = a. Øàã 1. Èùåì â I0 ñèòóàöèè ñ ñèìâîëîì a ïîñëå òîëñòîé òî÷êè. Òàê êàê [P → •a, 0] ∈ I0 , òî â I1 âíîñèì [P → a•, 0]. Øàã 2. 1) Òàê êàê [P → a•, 0] ∈ I1 è [T → •P ∗ T, 0] ∈ I0 , òî â I1 âíîñèòñÿ [T → P • ∗T, 0]; à â ñèëó [T → •P, 0] ∈ I0 åùå è [T → P •, 0]. 1)  I1 ïîÿâèëàñü ñèòóàöèÿ [T → P •, 0], ïîýòîìó ïîäøàã ïîâòîðÿåòñÿ.  I1 âíîñÿòñÿ ñèòóàöèè [E → T • +E, 0] è [E → T •, 0]. 1) Õîòÿ ïîäõîäÿùàÿ ñèòóàöèÿ [E → T •, 0] è áûëà âíåñåíà â I1 , íî â I0 íåò ñèòóàöèé, â êîòîðûõ âûâîäèòñÿ öåïî÷êà ñèìâîëîâ ñ ïàðîé •E . Ýòîò ïîäøàã íå äàåò íîâûõ ñèòóàöèé. 2) Óñëîâèÿ ýòîãî ïîäøàãà íå âûïîëíÿþòñÿ íîâûõ ñèòóàöèé íå âíîñèòñÿ â I1 . Ïîëó÷èëîñü, ÷òî â I1 ñîäåðæèòñÿ 5 ñèòóàöèé. Ýòàï II. j = 2. Ñîñòàâëÿåì ñïèñîê I2 . Èìååì a2 = ∗. Óêàæåì ñõåìàòè÷íî, êàê âûïîëíÿþòñÿ øàãè àëãîðèòìà. Øàã 1. [T → P • ∗T, 0] ∈ I1 → [T → P ∗ •T, 0] ∈ I2 ; Øàã 2. 1) 2) [T → P ∗ •T, 0] ∈ I2 : T → P ∗ T ∈ P → [T → •P ∗ T, 2] ∈ I2 , T → P ∈ P → [T → •P, 2] ∈ I2 ; 2) [T → •P ∗ T, 2] ∈ I2 (èëè [T → •P, 2] ∈ I2 ) : P → a ∈ P → [P → •a, 2] ∈ I2 , P → (E) ∈ P → [P → •(E), 2] ∈ I2 und so weiter :-) Ýòàï II. j = 3. Ñîñòàâëÿåì ñïèñîê I3 . . . Ýòàï II. j = 4. Ñîñòàâëÿåì ñïèñîê I4 . . . Ýòàï II. j = 5. Ñîñòàâëÿåì ñïèñîê I5 . . . Ýòàï II. j = 6. Ñîñòàâëÿåì ñïèñîê I6 . . . Ýòàï II. j = 7. Ñîñòàâëÿåì ñïèñîê I7 . . . 65