7. Формальные языки и формальные грамматики

реклама
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
Скачать