U N I W E R S Y T E T 艢 L 膭 S K I
WYDZIA艁 TECHNIKI
Instytut Informatyki
PRACA MAGISTERSKA
Grzegorz Pustelnik
Pakiet program贸w edukacyjnych z zakresu przedmiotu wprowadzenie do informatyki
Promotor:
Dr Urszula Boryczka
Sosnowiec 1998
Spis tre艣ci
Wst臋p ............................................................................................................................... 3
I. Zasady automatycznej translacji
1.1 Translacja i translatory ...............................................................................................4
1.2 Stos i odwrotna notacja polska (ONP) .......................................................................6
1.3 Translacja wyra偶e艅 arytmetycznych ..........................................................................6
II Automat sko艅czony
2.1 Deterministyczny automat sko艅czony .................................................................... 15
2.2 Niedeterministyczny automat sko艅czony ............................................................... 22
2.3 Automat sko艅czony z 蔚-ruchami ............................................................................. 24
2.4 Wyra偶enia regularne ................................................................................................ 25
2.5 Zastosowania automat贸w sko艅czonych .................................................................. 30
III Maszyna Turinga
3.1 Podstawowy model maszyny Turinga ..................................................................... 31
IV Gramatyki bezkontekstowe
4.1 Podstawowe poj臋cia gramatyk ................................................................................ 40
4.2 Gramatyki bezkontekstowe ..................................................................................... 44
4.3 Drzewa wyprowadze艅 ............................................................................................. 47
V. Opis program贸w
5.1 ONP ....................................................................................................................... 50
5.2 AS .......................................................................................................................... 55
5.3 MT .......................................................................................................................... 58
5.4 GR .......................................................................................................................... 62
5.5 Zawarto艣膰 dysku CD-ROM .................................................................................. 64
Literatura ...................................................................................................................... 65
WST臉P
Praca dydaktyczna „Pakiet program贸w edukacyjnych z zakresu przedmiotu wprowadzenie do informatyki” zawiera podstawy najog贸lniej rozumianej teorii automat贸w le偶膮cej u podstaw informatyki.
Ze wzgl臋du na rozleg艂o艣膰 tej dziedziny wiedzy, niniejsza praca przedstawia tylko zagadnienia zgodne z przedmiotem prowadzonym na I roku studi贸w : Wprowadzenie do informatyki.
Cz臋艣膰 teoretyczna zosta艂a napisana po k膮tem zagadnie艅 poruszanych przez prowadz膮cych ten przedmiot i mo偶e stanowi膰 form臋 skryptu uczelnianego.
Rozdzia艂 I dotyczy zasad automatycznej translacji. Opisuje dwustopniow膮 translacj臋 wyra偶e艅 arytmetycznych na drodze: wyra偶enie arytmetyczne posta膰 ONP , jak r贸wnie偶 posta膰 ONP j臋zyk symboliczny. Odwrotna notacja polska (ONP) to jeden z wariant贸w beznawiasowego zapisu wyra偶e艅 formalnych wynaleziony przez polskiego logika J.艁ukasiewicza.
W rozdziale II przedstawiono zagadnienia zwi膮zane z teori膮 automat贸w sko艅czonych, uwypuklaj膮c trzy podstawowe rodzaje: DAS- deterministyczny automat sko艅czony, NAS- niedeterministyczny automat sko艅czony i NAS z 蔚-ruchami oraz j臋zyki akceptowane przez automaty - zbiory regularne.
Rozdzia艂 III dotyczy maszyny Turinga. Przedstawia podstawowy model maszyny algorytmicznej Alana Turinga, b臋d膮cej prymitywnym modelem komputera. Przedstawiono w nim tak偶e liczne przyk艂ady , kt贸re pos艂u偶y艂y do przedstawienia zaskakuj膮cej tezy Churcha-Turinga.
W rozdziale IV opisano wybrane zagadnienia z szerokiej teorii j臋zyk贸w, skupiaj膮c swoj膮 uwag臋 na gramatykach bezkontekstowych, maj膮cych najszersze zastosowania w informatyce.
Cz臋艣膰 praktyczna- to cztery programy edukacyjne, kt贸re odzwierciedlaj膮 zagadnienia cz臋艣ci teoretycznej.
Dynamiczny rozw贸j informatyki w ostatnich latach sprawia, 偶e ta dziedzina wiedzy staje si臋 coraz bardziej popularna, st膮d warto czasami pozna膰 podstawy teoretyczne i pocz膮tkowe badania z tego zakresu. Niekt贸re z nich zawarte s膮 w niniejszej pracy teoretycznej, za艣 programy do niej do艂膮czone s膮 pewn膮 propozycj膮 przyswojenia wiadomo艣ci, z kt贸rych mo偶na skorzysta膰 u progu tajnik贸w informatyki.
I. ZASADY AUTOMATYCZNEJ TRANSLACJI
1.1 Translacja i translatory
Zagadnienia budowy translator贸w, jak i samego procesu translacji stanowi膮 jeden z najrozleglejszych dzia艂贸w informatyki, kt贸remu mo偶naby po艣wi臋ci膰 odr臋bn膮 prac臋, tote偶 niniejsze rozwa偶ania maj膮 na celu zaznaczenie pewnych poj臋膰 z tego zakresu, skupiaj膮c si臋 g艂贸wnie na procesie translacji wyra偶e艅 do postaci ONP. G艂贸wnym 藕r贸d艂em informacji wykorzystanym dla tego rozdzia艂u jest pozycja: W. M.Turskiego [TURS 77].
J臋zyki programowania niskiego czy te偶 wysokiego poziomu maj膮 na zadanie przetworzy膰 og贸艂 algorytm贸w w nich zapisanych na tak膮 posta膰 aby maszyna cyfrowa by艂a w stanie je wykona膰 tzn. da膰 takie efekty jakie programista zak艂ada tworz膮c dany program. Mi臋dzy tymi j臋zykami wyst臋puje jednak zasadnicza r贸偶nica : program zapisany w j臋zyku niskiego poziomu (w j臋zyku wewn臋trznym) stanowi ci膮g instrukcji dost臋pnych przez dany procesor czy te偶 maszyn臋 cyfrow膮 i jest wykonywany bezpo艣rednio; natomiast program zapisany w j臋zykach wysokiego poziomu takich jak Pascal czy C ( w j臋zykach zewn臋trznych) wymaga dodatkowo przet艂umaczenia na ci膮g instrukcji dost臋pnych przez maszyn臋 kt贸ra ma dany program wykona膰. Owo t艂umaczenie w pewnym stopniu przypomina t艂umaczenie j臋zyk贸w etnicznych, przy uwzgl臋dnieniu dodatkowych warunk贸w jak: znajomo艣膰 kultury, tradycji i historii danego j臋zyka. Podobnie t艂umacz膮c programy zewn臋trzne na wewn臋trzne nale偶y tak偶e uwzgl臋dni膰 dodatkowe elementy takie jak dane wej艣ciowe do programu, kt贸re tak偶e musz膮 by膰 przet艂umaczone do tego stopnia aby spodziewany efekt ko艅cowy programu zapisanego w j臋zyku zewn臋trznym niczym si臋 nie r贸偶ni艂 od efektu dzia艂ania samej maszyny.
Proces przek艂adu tekst贸w zapisanych w jednym j臋zyku na drugi nosi nazw臋 translacji. W przypadku gdy dany j臋zyk wysokiego poziomu ma stosunkowo 艂atw膮 gramatyk臋, translacja mo偶e by膰 wykonana samoczynnie przez maszyn臋 cyfrow膮 przy pomocy specjalnego programu translacji zwanego translatorem.
Wykorzystuj膮c translatory programi艣ci mog膮 pos艂ugiwa膰 si臋 zewn臋trznymi j臋zykami programowania, co znacznie u艂atwia tworzenie oprogramowania, gdy偶 czas stracony na 偶mudnym pisaniu instrukcji w j臋zyku wewn臋trznym zostaje ograniczony do wybrania odpowiednich procedur i funkcji z repertuaru danego j臋zyka wysokiego poziomu, a sam programista mo偶e skupi膰 si臋 na rozwi膮zywaniu powsta艂ych problem贸w implementacyjnych.
Translatory dzielimy zazwyczaj na dwie kategorie: kompilatory i interpretatory. Podzia艂 ten bardzo cz臋sto nie ma miejsca w praktyce, gdy偶 buduje si臋 translatory wykazuj膮ce jednocze艣nie cechy kompilator贸w i interpretator贸w.
Najog贸lniej, kompilator jest translatorem, operuj膮cym na ca艂ym tek艣cie programu 藕r贸d艂owego generuj膮c tekst przek艂adu jako ca艂o艣膰, podczas gdy interpreter operuje na poszczeg贸lnych jednostkach syntaktycznych programu 藕r贸d艂owego i generuje ich przek艂ady. Je艣li wi臋c wykonywamy program pocz膮tkowo zapisany w j臋zyku zewn臋trznym to:
-u偶ywaj膮c kompilatora, mo偶emy przyst膮pi膰 do wykonania programu w postaci docelowej dopiero po zako艅czeniu translacji. Oznacza to, 偶e uzyskany tekst b臋d膮cy przek艂adem tekstu 藕r贸d艂owego w ca艂o艣ci wprowadzany jest do maszyny cyfrowej;
-u偶ywaj膮c interpretatora, mo偶emy wykonywa膰 przek艂ady poszczeg贸lnych jednostek syntaktycznych, nie czekaj膮c na ca艂y proces translacji. Oznacza to, 偶e ca艂y czas operujemy na tek艣cie 藕r贸d艂owym t艂umacz膮c tylko te jednostki syntaktyczne, kt贸re s膮 potrzebne aby poszczeg贸lny fragment programu m贸g艂 zadzia艂a膰.
W praktyce rzadko dokonuje si臋 bezpo艣redniej translacji program贸w z j臋zyka zewn臋trznego na j臋zyk maszynowy. Najcz臋艣ciej stosuje si臋 proces po艣redni to znaczy, najpierw dokonuje si臋 translacji z j臋zyka zewn臋trznego na j臋zyk asemblerowy, a potem z j臋zyka asemblerowego na j臋zyk maszynowy. Zastosowanie takiej dwuetapowej translacji niesie za sob膮 wiele zalet, a g艂贸wna z nich jest mo偶liwo艣膰 艂膮czenia poszczeg贸lnych cz臋艣ci program贸w zapisanych w r贸偶nych j臋zykach zewn臋trznych.
1.2 Stos i odwrotna notacja polska (ONP)
Bardzo wa偶nymi poj臋ciami bez kt贸rych trudne by艂oby zrozumienie zasad jakiejkolwiek translacji s膮 : stos i odwrotna notacja polska (ONP).
STOS- jest to organizacja sekwencyjna pami臋ci operacyjnej maszyny cyfrowej. Stos dzia艂a jak pojemnik okre艣lonych jednostek, przy czym pobieranie element贸w w nim zgromadzonych odbywa si臋 w kolejno艣ci odwrotnej do magazynowania. Jest to tak zwana struktura LIFO (last-in-first-out co oznacza „ ten co ostatni przyszed艂 pierwszy odchodzi”). Dla stosu okre艣la si臋 dwie podstawowe operacje:
dos(a)- dopisz na stosie - w wyniku wykonania tej operacji jednostka a zostaje umieszczona na szczycie stosu (staje si臋 pierwszym elementem stosu)
ods(a)- odczytaj ze stosu - w wyniku wykonania tej operacji jednostka a zostaje wydana na zewn膮trz stosu.
ODWROTNA NOTACJA POLSKA (ONP)- mianem tym obdarzono jeden z wariant贸w beznawiasowego zapisu wyra偶e艅 formalnych, wynalezionego przez polskiego logika Jana 艁ukasiewicza (1878-1956). W tym beznawiasowym zapisie symbole operand贸w poprzedzaj膮 bezpo艣rednio symbol operatora, na przyk艂ad wyra偶enie a+b zapisujemy w ONP jako a b +.
1.3 Translacja wyra偶e艅 arytmetycznych
Wsp贸艂czesne podej艣cie translacji wyra偶e艅 arytmetycznych polega na wydzieleniu dwu etap贸w translacji:
- translacja do ONP
- translacja ONP na j臋zyk symboliczny
W celu zobrazowania translacji do ONP przyjmujemy, 偶e 藕r贸d艂owy zapis wyra偶e艅 arytmetycznych pojawia si臋 na wej艣ciu specjalnego automatu (Rys.1). Na wyj艣ciu uzyskamy zapis ONP tych wyra偶e艅, sam za艣 automat wyposa偶ony jest w pami臋膰 stosow膮.:
wyra偶enie Automat ze stosem ONP wyra偶enia
arytmetyczne arytmetycznego
Rys. 1. Model automatu ze stosem do translacji wyra偶e艅 arytmetycznych
Podczas translacji wyra偶e艅 arytmetycznych szczeg贸lnej analizie poddawane s膮 symbole operacji (+,-,*,itp.) zwane ogranicznikami ,st膮d wprowadza si臋 dodatkowo list臋 priorytet贸w ogranicznik贸w (Tab.1):
Ogranicznik |
Priorytet |
+ - |
0 |
* / 梅 |
1 |
鈫 |
2 |
Tab.1.Priorytety symbol贸w operacji (ogranicznik贸w)
Dzia艂anie automatu odbywa si臋 wed艂ug nast臋puj膮cego algorytmu post臋powania:
1. Pobierz kolejny element (nazw臋 zmiennej, sta艂膮 lub ogranicznik) 藕r贸d艂owego wyra偶enia arytmetycznego.
2. Je艣li ten element jest nazw膮 zmiennej lub sta艂膮, przeka偶 go natychmiast na wyj艣cie; w przeciwnym wypadku, je艣li priorytet ogranicznika jest wy偶szy od priorytetu ogranicznika zajmuj膮cego szczyt stosu lub je艣li stos jest pusty, dopisz go na stos, je艣li wreszcie na szczycie stosu znajduje si臋 ogranicznik o wy偶szym lub r贸wnym priorytecie - odczytaj go ze stosu i prze艣lij na wyj艣cie, a ogranicznik z wej艣cia dopisz na stosie, chyba, 偶e nowy ogranicznik zajmuj膮cy szczyt stosu w wyniku odczytania priorytetu ma priorytet nie mniejszy ni偶 ogranicznik z wej艣cia. w takim przypadku nale偶y kontynuowa膰 odczytywanie ze stosu i przesy艂anie na wyj艣cie a偶 do wyst膮pienia na szczycie stosu ogranicznika o priorytecie ni偶szym od priorytetu ogranicznika nadchodz膮cego z wej艣cia.
3. Je艣li wyra偶enie 藕r贸d艂owe zosta艂o wyczerpane, odczytaj wszystkie ograniczniki ze stosu na wyj艣cie automatu.
Przyk艂ad 1 przedstawia poszczeg贸lne takty procesu translacji do ONP dla wybranego wyra偶enia arytmetycznego.
Przyk艂ad 1:
Niech wyra偶enie 藕r贸d艂owe ma posta膰: x + 3 * z 梅 k
Poszczeg贸lne takty translacji s膮 nast臋puj膮ce:
Takt |
Wej艣cie |
Stos |
Wyj艣cie |
1 |
x |
|
x |
2 |
+ |
+ |
|
3 |
3 |
+ |
3 |
4 |
* |
+,* |
|
5 |
z |
+,* |
z |
6 |
梅 |
+,梅 |
* |
7 |
k |
+,梅 |
k |
8 |
koniec |
|
梅,+ |
Rys.2. Poszczeg贸lne takty procesu translacji wyra偶enia do ONP dla przyk艂adu 1
Na wyj艣ciu uzyskamy wyra偶enie ONP postaci: x, 3, z, *, k, 梅, +
Dla uzyskania prawid艂owej konwersji wyra偶e艅 arytmetycznych uzupe艂niamy list臋 ogranicznik贸w o nast臋puj膮ce symbole:
nawiasy ( )
operator negacji NEG (jako symbol operacji unarnej s艂u偶膮cy do zmiany znaku)
funkcje trygonometryczne (operatory jednoargumentowe)
Priorytety wy偶ej wymienionych ogranicznik贸w przedstawia tabela 2
Ogranicznik |
Priorytet |
( |
0 |
+ - ) |
1 |
* / 梅 NEG |
2 |
鈫 |
3 |
sin cos tg ctg |
4 |
Tab.2. Priorytety rozszerzonych symbol贸w operacji (ogranicznik贸w)
Dzia艂anie automatu uzupe艂niamy nast臋puj膮cymi regu艂ami:
1. Ogranicznik „(” jest dopisywany do stosu bez jakiegokolwiek odczytywania stosu.
2. Ogranicznik „)” nie jest dopisywany na stos, pojawienie si臋 jednak tego ogranicznika na wej艣ciu powoduje odczytanie ze stosu i przes艂anie na wyj艣cie wszystkich kolejnych ogranicznik贸w a偶 do pojawienia si臋 ogranicznika „(”.
3. Ogranicznik „(” ze szczytu stosu zostaje usuni臋ty bez przekazywania na wyj艣cie, je艣li aktualnym symbolem na wej艣ciu jest „)”.
Pojawienie si臋 nawiasu zamykaj膮cego „)” na wej艣ciu automatu powoduje wyprowadzenie na wej艣cie wszystkich ogranicznik贸w z wn臋trza pary nawias贸w a偶 do nawiasu otwieraj膮cego „(” oraz likwidacj臋 tego nawiasu.
Przyk艂ad 2 przedstawia proces translacji z uwzgl臋dnieniem powy偶szych regu艂:
Przyk艂ad 2:
Niech wyra偶enie 藕r贸d艂owe ma posta膰: b * c 鈫 ( d - e*k )
Poszczeg贸lne takty translacji s膮 nast臋puj膮ce:
Takt |
Wej艣cie |
Stos |
Wyj艣cie |
1 |
b |
|
b |
2 |
* |
* |
|
3 |
c |
* |
c |
4 |
鈫 |
*,鈫 |
|
5 |
( |
*,鈫,( |
|
6 |
d |
*,鈫,( |
d |
7 |
- |
*,鈫,(,- |
|
8 |
e |
*,鈫,(,- |
e |
9 |
* |
*,鈫,(,-,* |
|
10 |
k |
*,鈫,(,-,* |
k |
11 |
) |
*,鈫 |
*,- |
12 |
koniec |
|
鈫,* |
Rys.3. Poszczeg贸lne takty procesu translacji wyra偶enia do ONP dla przyk艂adu 2
Na wyj艣ciu uzyskamy wyra偶enie ONP postaci: b, c, d, e, k, *, -, 鈫 ,*
Przyk艂ad 3 przedstawia translacj臋 kr贸tkiego wyra偶enia arytmetycznego z funkcjami trygonometrycznymi.
Przyk艂ad 3:
Niech wyra偶enie 藕r贸d艂owe ma posta膰: sinx + cosy + tgz
Poszczeg贸lne takty translacji s膮 nast臋puj膮ce:
Takt |
Wej艣cie |
Stos |
Wyj艣cie |
1 |
sin |
sin |
|
2 |
x |
sin |
x |
3 |
+ |
+ |
sin |
4 |
cos |
+, cos |
|
5 |
y |
+, cos |
y |
6 |
+ |
+ |
cos, + |
7 |
tg |
+, tg |
|
8 |
z |
+, tg |
z |
9 |
koniec |
|
tg, + |
Rys.4. Poszczeg贸lne takty procesu translacji wyra偶enia do ONP dla przyk艂adu 3
Na wyj艣ciu uzyskamy wyra偶enie ONP postaci: x , sin, y, cos, +, z, tg, + ,
Nic nie stoi na przeszkodzie by procesowi translacji podda膰 wyra偶enia arytmetyczne zawieraj膮ce operacje logiczne i warunkowe. W tym celu nale偶y odpowiednio rozszerzy膰 ilo艣膰 priorytet贸w, a tak偶e chc膮c odzwierciedli膰 sk艂adnie: if..then..else nale偶y wprowadzi膰 odpowiednie oznaczenia, kt贸re b臋d膮 sygnalizowa艂y konieczno艣膰 wykonania skoku warunkowego lub bezwarunkowego. Operacje te zapisujemy w postaci SW (k) i SB (k), gdzie SW- oznacza then, a SB else. Dla translacji wyra偶e艅 arytmetycznych z elementami logicznymi koniecznym jest wprowadzenie dw贸ch r贸偶nych poj臋膰 priorytet贸w: priorytet por贸wnawczy (p.p) i priorytet stosowy (p.s.). gdzie: priorytet por贸wnawczy dla danego ogranicznika oznacza moc roz艂adowania stosu, a priorytet stosowy moc blokowania stosu. W praktyce oznacza to, 偶e je偶eli na wej艣ciu automatu pojawi si臋 symbol operacji (ogranicznik) to celem ewentualnego odczytania symboli ze stosu por贸wnujemy priorytet por贸wnawczy tego symbolu z priorytetem stosowym symboli operacji na stosie.
Uzupe艂niona tablica priorytet贸w ogranicznik贸w wraz z uwzgl臋dnieniem poj臋膰: priorytet stosowy i por贸wnawczy kszta艂tuje si臋 nast臋puj膮co:
Ogranicznik |
p. stosowy |
p. por贸wnawczy |
(, if |
0 |
nie dotyczy |
then |
0 |
1 |
else |
1 |
2 |
), ; |
nie dotyczy |
1 |
鈮 |
3 |
3 |
鈯 |
4 |
4 |
鈭 |
5 |
5 |
鈭 |
6 |
6 |
- |
7 |
7 |
> 鈮 鈮 < = 鈮 |
8 |
8 |
+- |
9 |
9 |
* / 梅NEG |
10 |
10 |
鈫 |
11 |
11 |
Tab.3. Uzupe艂niona lista ogranicznik贸w z uwzgl臋dnieniem element贸w logicznych
Algorytm konwersji zostaje uzupe艂niony o nowe regu艂y zwi膮zane z elementami logicznymi: if..then...else:
1. Gdy na wej艣ciu pojawi si臋 ogranicznik „then”, w贸wczas, opr贸cz wszystkich ogranicznik贸w wyprowadzanych ze stosu na wyj艣cie ze wzgl臋du na ich priorytety, zostaje tak偶e usuni臋ty ze szczytu stosu ogranicznik „if” ( konstrukcja if - then jest analogiczna do pary nawias贸w ( ) w wyra偶eniach arytmetycznych). Na wyj艣cie automatu zostaje wyprowadzona operacja SW z pustym nawiasem SW( ), za艣 ogranicznik „then” zostaje dopisany do stosu wraz z numerem, pod jakim wyst臋puje w zapisie ONP operacja SW( ).
2. Gdy na wej艣ciu pojawia si臋 ogranicznik „else”, powoduje on wyprowadzenie wszystkich symboli na wyj艣cie automatu a偶 do momentu pojawienia si臋 ma stosie ogranicznika „then”. Na wyj艣cie zostaje wpisana niekompletna operacja SB(), operacja SW( ) b臋d膮ca na wyj艣ciu zostaje uzupe艂niona przez wpisanie do nawiasu numeru pozycyjnego z zapisu ONP, a sam ogranicznik „else” zostaje dopisany do stosu wraz z numerem pozycyjnym SB( ) w zapisie ONP.
3. Gdy podczas wyprowadzania ogranicznik贸w ze stosu natrafimy na „else”, w贸wczas uzupe艂niamy odpowiedni nawias operacji SB( ) odpowiadaj膮cej danemu „else”, za艣 sam ogranicznik else zostaje zlikwidowany tzn. nie jest wyprowadzany na wyj艣cie automatu.
Przyk艂ad 4 obrazuje translacj臋 wyra偶e艅 zawieraj膮cych elementy logiczne.
Przyk艂ad 4:
Niech wyra偶enie na wej艣ciu ma posta膰: y + ( if a>0 then 3 else a )
Poszczeg贸lne takty konwersji przedstawia rysunek 5.
Takt |
Wej艣cie |
Stos |
Wyj艣cie |
Numer pozycyjny w ONP |
1 |
y |
|
y |
1 |
2 |
+9 |
+9 |
|
|
3 |
( |
+9 (0 |
|
|
4 |
if |
+9 (0 if0 |
|
|
5 |
a |
+9 (0 if0 |
a |
2 |
6 |
>8 |
+9 (0 if0 >8 |
|
|
7 |
0 |
+9 (0 if0 >8 |
0 |
3 |
8 |
then1 |
+9 (0 then50 |
> SW() po takcie 10 - SW(8) |
4 5 |
9 |
3 |
+9 (0 then50 |
3 |
6 |
10 |
else2 |
+9 (0 else71 |
SB() po takcie 12- SB(9) |
7 |
11 |
a |
+9 (0 else71 |
a |
8 |
12 |
)1 |
+9 |
|
|
13 |
; |
|
+ |
9 |
G贸rne indeksy przy then i else oznaczaj膮 numer pozycyjny instrukcji SW i SB w ONP, za艣 indeksy dolne oznaczaj膮 priorytet stosowy lub por贸wnawczy danego ogranicznika.
Rys.5. Poszczeg贸lne takty konwersji dla przyk艂adu 4
Etap drugi translacji wyra偶e艅 arytmetycznych polega na wygenerowaniu programu w j臋zyku symbolicznym (docelowym). Proces ten tak偶e korzysta z pami臋ci stosowej a sam algorytm post臋powania wymaga przyj臋cia pewnych oznacze艅 :
未i - i=0,1,.... s膮 to kolejne pozycje stosu; j臋zyk docelowy pozwala na wyst臋powanie dwu typ贸w instrukcji: 未i := Z i 未i : = 未i op 未i+1 gdzie Z jest nazw膮 zmiennej lub sta艂膮, a op jest symbolem operacji.
Proces translacji zapisu ONP na j臋zyk docelowy przebiega wed艂ug nast臋puj膮cego algorytmu:
1. Ustalamy i=0, k=1
2. Odczytujemy k-ty element ONP : Ek
3. Je艣li Ek jest nazw膮 zmiennej lub sta艂a, generuje si臋 operacja 未i:=Ek i nast臋puje zwi臋kszenie i o 1 鈫 i:= i +1; je艣li Ek jest symbolem operacji op 鈮 NEG, generuje si臋 operacja 未i-2 := 未i-2 op 未i-1 oraz nast臋puje zmniejszenie i o 1 鈫 i := i - 1; je艣li Ek = NEG, nast臋puje wygenerowanie operacji 未i-1 := - 未i-1
4. Je艣li Ek nie by艂 ostatnim symbolem wyra偶enia w ONP, to k:= k + 1 i przechodzimy do punktu 2.
Spos贸b translacji wyra偶enia ONP na j臋zyk symboliczny przedstawia przyk艂ad 5.
Przyk艂ad 5:
Niech wyra偶enie arytmetyczne ma posta膰: ( a + b ) / ( k 鈫 (-c) )
Posta膰 ONP tego wyra偶enia jest nast臋puj膮ca: a, b, +, k, c, NEG, 鈫 /
i k
0 1
1: 未0:= a 1 2
2: 未i:= b 2 3
3: 未0:= 未0 +未i 1 4
4: 未i:= k 2 5
5: 未2:= c 3 6
6: 未2:= -未2 3 7
7: 未i:= 未i 鈫 未2 2 8
8: 未0:= 未o / 未1 1 9
9: brak symboli w wyra偶eniu ONP -koniec algorytmu.
Wiadomo艣ci zawarte w tym rozdziale przedstawiaj膮 nam drog臋 od zrodzenia si臋 algorytmu, a偶 po wykonanie programu na maszynie cyfrowej co schematycznie przestawia rysunek 6
algorytm programowanie program w j臋zyku
wysokiego poziomu
kod maszynowy program w j臋zyku kompilacja
asemblerowym
Wykonanie na
komputerze
Rys.6. Schematyczny przebieg powstania programu
II. AUTOMAT SKO艃CZONY
2.1 Deterministyczny automat sko艅czony
W tym rozdziale tematem rozwa偶a艅 b臋d膮 zagadnienia z dziedziny automat贸w sko艅czonych i wyra偶e艅 regularnych. G艂贸wnym 藕r贸d艂em wiadomo艣ci teoretycznych przedstawionych w tym rozdziale jest praca J.E.Hopcrofta i J.D.Ullmana [HOPC 94].
Automat sko艅czony jest modelem matematycznym systemu o dyskretnych wej艣ciach i wyj艣ciach. System taki w danej chwili mo偶e znajdowa膰 si臋 w jednym ze sko艅czonej liczby stan贸w, kt贸ry to stan jest 艣ci艣le uzale偶niony od stanu poprzedniego. Jeden ze stan贸w pe艂ni rol臋 stanu pocz膮tkowego, od kt贸rego dany automat rozpoczyna dzia艂anie, z drugiej strony niekt贸re stany pe艂ni膮 rol臋 stan贸w ko艅cowych ko艅cz膮c prac臋 automatu. Praca automatu oparta jest na analizie symboli wej艣ciowych ze sko艅czonego alfabetu. Ka偶dy odczytany symbol wymusza przej艣cie do innego stanu ( w niekt贸rych przypadkach przej艣cie prowadzi do tego samego stanu). Po przeanalizowaniu wszystkich symboli automat sko艅czony mo偶e przyj膮膰 jeden z dwu stan贸w: akceptacji lub nieakceptacji. Bardzo cz臋sto automat sko艅czony, kt贸ry w dalszych rozwa偶aniach b臋dziemy oznacza膰 jako AS jest przedstawiany za pomoc膮 graf贸w skierowanych, w kt贸rych wierzcho艂ki obrazuj膮 stany automatu. Je偶eli istnieje przej艣cie z jednego stanu do nast臋pnego to takie przej艣cie przedstawione jest za pomoc膮 艂uku. Dla wyodr臋bnienia stanu pocz膮tkowego, wierzcho艂ek rozpoczynaj膮cy prac臋 automatu wzbogacony jest o strza艂k臋 z napisem START. W celu zaakcentowania stanu ko艅cowego wprowadza si臋 dwa odr臋bne wierzcho艂ki grafu opatrzone etykiet膮 A (s. akceptacji) N (s. nieakceptacji), b膮d藕 stan ko艅cowy oznacza si臋 podw贸jnym k贸艂kiem. Rysunek 7 przedstawia fragment grafu dla automatu sko艅czonego:
start q0 q1 q4
q2 q3
Rys. 7. Fragment grafu przej艣膰 dla automatu sko艅czonego
Automat sko艅czony przedstawiamy formalnie jako uporz膮dkowan膮 pi膮tk臋:
< Q, 危, 未, qo, F>
gdzie:
Q - jest sko艅czonym zbiorem stan贸w,
危 - jest sko艅czonym alfabetem symboli wej艣ciowych, q0 nale偶膮ce do Q jest stanem pocz膮tkowym od kt贸rego automat rozpoczyna dzia艂anie,
F鈯 Q - jest zbiorem stan贸w ko艅cowych (stan akceptacji lub nieakceptacji),
未 - jest funkcj膮 odwzorowuj膮c膮 Q x 危 w Q czyli 未 okre艣la ka偶demu stanowi q i ka偶demu symbolowi na wej艣ciu nowy stan automatu.
Automat sko艅czony mo偶emy sobie wyobrazi膰 jako g艂owic臋 steruj膮co-czytaj膮c膮, kt贸ra analizuje symbole zapisane na ta艣mie w spos贸b pokazany na rysunku 8.
g艂owica
steruj膮co-
czytaj膮ca
Rys. 8. Schemat pracy automatu sko艅czonego
W danej chwili automat odczytuje symbol wej艣ciowy i przechodzi do kolejnego stanu. Je偶eli stan ten jest stanem akceptacji to znaczy, 偶e dotychczasowy ci膮g symboli na ta艣mie jest zaakceptowany przez AS. Je偶eli g艂owica przesun臋艂a si臋 na koniec ta艣my, a ostatni stan jest stanem zaakceptowanym przez AS to AS zaakceptowa艂 ca艂y 艂a艅cuch.
Formalnie przyjmuje si臋, 偶e 艂a艅cuch jest akceptowany przez automat M, je偶eli 未 (qo,x)= p dla jakiego艣 p nale偶膮cego do F. J臋zyk akceptowany przez dany automat M oznaczany L(M), to zbi贸r {x | (qo,x) nale偶y do F}. J臋zyk nazywamy zbiorem regularnym, je偶eli jest on j臋zykiem akceptowanym przez pewien automat sko艅czony. Zbiory regularne zostan膮 szczeg贸艂owo om贸wione pod koniec tego rozdzia艂u.
W celu zobrazowania konstrukcji automatu sko艅czonego przeanalizujmy dwa przyk艂ady dotycz膮ce akceptacji liczb podzielnych przez wybran膮 liczb臋.
Przyk艂ad 6. Automat sko艅czony akceptuj膮cy liczby podzielne przez 2
Dla tego automatu zbi贸r symboli wej艣ciowych b臋dzie z艂o偶ony z cyfr od 0..9 czyli 危= {0,1,2,3,4,5,6,7,8,9}. Wiadomo te偶, 偶e liczba jest parzysta gdy ostatnia jej cyfra jest podzielna bez reszty przez 2.
Konstrukcj臋 automatu rozpoczynamy od wykre艣lenia wierzcho艂ka stanu q0, kt贸ry jest stanem wej艣ciowym (Rys. 8 )
Je偶eli pojawi si臋 na wej艣ciu cyfra podzielna przez 2 to zaznaczmy to na grafie jako przej艣cie do stanu q1, je偶eli pojawi si臋 na wej艣ciu cyfra niepodzielna przez 2 to zaznaczmy to jako przej艣cie do stanu q2 (Rys.9)
je偶eli AS jest w stanie q1 i kolejna cyfra na wej艣ciu jest podzielna przez dwa to automat pozostaje nadal w tym samym stanie co zaznaczamy na grafie 艂ukiem wychodz膮cym z stanu q1 opatrzonego etykiet膮 {0,2,4,6,8}, je偶eli pozostaj膮c w stanie q2 AS odczyta wszystkie symbole (co umownie oznaczamy pojawieniem si臋 symbolu 蠁 lub # ) w贸wczas AS przechodzi do stanu akceptacji A (Rys 10)
je偶eli AS jest w stanie q1 i kolejna cyfra na wej艣ciu jest nieparzysta to AS pozostaje nadal w tym samym stanie co zaznaczamy na grafie 艂ukiem wychodz膮cym i wchodz膮cym do stanu q2 opatrzonego etykiet膮 {1,3,5,7,9}, je偶eli pozostaj膮c w stanie q2 AS odczyta wszystkie symbole to w贸wczas AS przechodzi do stanu nieakceptacji N (Rys. 11 )
Oczywi艣cie istnieje mo偶liwo艣膰 pojawienia si臋 na wej艣ciu przemiennie liczb parzystych i nieparzystych a tym samym przej艣cia z stanu q1 do stanu q2 (Rys 12 - ostateczna konstrukcja automatu )
start q0
Rys. 8
{0,2,4,6,8} q1
start q0
{1,3,5,7,9} q2
Rys. 9
{0,2,4,6,8}
蠁 A
{0,2,4,6,8} q1
start q0
{1,3,5,7,9} q2
Rys. 10
{0,2,4,6,8}
蠁 A
{0,2,4,6,8} q1
start q0
{1,3,5,7,9} q2 蠁
N
{1,3,5,7,9}
Rys.11
{0,2,4,6,8}
蠁 A
{0,2,4,6,8} q1
start q0 { 1,3,5,7,9} { 0, 2,4,6,8}
{1,3,5,7,9} q2 蠁
N
{1,3,5,7,9}
Rys. 8-12. Konstrukcja automatu sko艅czonego akceptuj膮cego liczby podzielne przez 2
Pojawienie si臋 na wej艣ciu liczby np.123 dla rozpatrywanego automatu sprawi, 偶e automat przejdzie przez nast臋puj膮cy porz膮dek stan贸w: q0, q2, q1, q2, N - czyli liczba 123 nie zostanie zaakceptowana przez automat ( co jest zgodne z prawda gdy偶 123 nie jest liczb膮 parzyst膮); natomiast pojawienie si臋 liczby 36 wymusi przej艣cie przez stany: q0, q2, q1, A-czyli liczba zostanie zaakceptowana prze automat (co jest zgodne z prawd膮 gdy偶 36 - jest liczb膮 parzyst膮).
Przyk艂ad 7. Automat sko艅czony akceptuj膮cy liczby podzielne przez 3.
Dla tego automatu zbi贸r symboli wej艣ciowych b臋dzie z艂o偶ony z cyfr od 0..9 czyli 危= {0,1,2,3,4,5,6,7,8,9}. Wiadomo te偶, 偶e liczba jest podzielna bez reszty przez 3 gdy suma cyfr danej liczby jest podzielna przez 3. Musimy wi臋c rozpatrzy膰 nast臋puj膮ce przypadki tego zadania: po pierwsze je偶eli liczba z艂o偶ona jest z cyfr 0,3,6,9 to jest ona na pewno podzielna przez 3. Dla cyfr 1,4,7 i 2,5,8 rozpatrza si臋 dodatkowe warunki : pojawienie si臋 cyfr 1,4,7 musi wyst膮pi膰 trzykrotnie b膮d藕 musi wyst膮pi膰 cyfra 2,5,8 by liczba by艂a podzielna przez 3. Tak samo pojawienie si臋 cyfr 2,5,8 musi wyst膮pi膰 trzykrotnie b膮d藕 po pojawieniu si臋 jednej z nich musi wyst膮pi膰 cyfra 1,4,7. Diagram przej艣膰 takiego automatu przedstawia rysunek 13.
{0,3,6,9}
蠁
q1 N
{1,4,7}
{0,3,6,9}
{2,5,8}
qo {1,4,7} {2,5,8}
Start {2,5,8}
蠁
A {1,4,7} 蠁
q2 N
{0,3,6,9}
Rys. 13. Automat sko艅czony akceptuj膮cy liczby podzielne przez 3
Pojawienie si臋 na wej艣ciu liczby 126 spowoduje przej艣cie automatu przez stany: q0, q1, q2, A czyli cyfra jest podzielna przez trzy, natomiast 125 wymusi drog臋: q0, q1, q2, N czyli liczba nie jest podzielna przez 3.
W praktyce badanie czy dana liczba jest podzielna przez n sprowadza si臋 do operacji modulo (badanie reszty z dzielenia liczby przez n). W tym celu przed wykre艣leniem grafu automatu sko艅czonego tworzymy tabel臋 stan贸w, obrazuj膮c膮 przej艣cia mi臋dzy stanami w zale偶no艣ci od rozpatrywanej cyfry. Tabel臋 tak膮 tworzymy w nast臋puj膮cy spos贸b:
liczba kolumn jest r贸wna n, czyli liczbie przez kt贸r膮 dana liczba wej艣ciowa ma by膰 podzielna,
natomiast liczba wierszy jest r贸wna liczbie cyfr (0-9) uzupe艂niona o 1 dla symbolu pustego 蠁.
Przeanalizujmy tabel臋 4, kt贸ra dotyczy automatu sko艅czonego badaj膮cego czy liczba jest podzielna przez 3.
|
q1 |
q2 |
q3 |
蠁 |
T |
N |
N |
0 |
q1 |
q2 |
q3 |
1 |
q2 |
q3 |
q1 |
2 |
q3 |
q1 |
q2 |
3 |
q1 |
q2 |
q3 |
4 |
q2 |
q3 |
q1 |
5 |
q3 |
q1 |
q2 |
6 |
q1 |
q2 |
q3 |
7 |
q2 |
q3 |
q1 |
8 |
q3 |
q1 |
q2 |
9 |
q1 |
q2 |
q3 |
Tab.4.Tabela stan贸w dla automatu sko艅czonego akceptuj膮cego liczby podzielne przez 3
Chc膮c stworzy膰 automat sko艅czony badaj膮cy podzielno艣膰 liczb przez 4, do tabeli 4 dodajemy jedn膮 kolumn臋 z stanem q4, za艣 samo liczenie w pionie zwi臋kszamy do 4, czyli pierwsza kolumna b臋dzie mia艂a nast臋puj膮cy porz膮dek stan贸w: q1, q2, q3, q4, q1, q2, q3, q4, q1, q2. Na tej podstawie mo偶emy stworzy膰 automat badaj膮cy podzielno艣膰 przez dowoln膮 liczb臋.
Dla tego typu automat贸w pojawienie si臋 na wej艣ciu jakiegokolwiek symbolu powoduje ruch automatu 艣ci艣le okre艣lon膮 drog膮 bez mo偶liwo艣ci wyboru. Jak si臋 oka偶e w kolejnych podrozdzia艂ach wyb贸r drogi automatu wcale nie musi by膰 z g贸ry okre艣lony tzn. 偶e dany symbol wej艣ciowy mo偶e wymusi膰 przej艣cie do r贸偶nych stan贸w. Dlatego automaty sko艅czone gdzie istnieje tylko jedna droga przej艣cia ze stanu do stanu dla danego symbolu wej艣ciowego okre艣la si臋 jako deterministyczne automaty sko艅czone (DAS).
2.2 Niedeterministyczny automat sko艅czony
Jak ju偶 zosta艂o wspomniane w ko艅c贸wce poprzedniego podrozdzia艂u dany symbol wej艣ciowy mo偶e wymusi膰 przej艣cie do r贸偶nych stan贸w, st膮d wprowad藕my modyfikacj臋 modelu automatu sko艅czonego, polegaj膮c膮 na istnieniu kilku przej艣膰 ze stanu przy tym samym symbolu wej艣ciowym. Taka modyfikacja pozwala zdefiniowa膰 model niedeterministycznego automatu sko艅czonego (NAS), kt贸ry formalnie jest definiowany jako uporz膮dkowana pi膮tka:
<Q, 危, 未, qo, F>
gdzie:
Q - jest sko艅czonym zbiorem stan贸w,
危 - jest sko艅czonym alfabetem symboli wej艣ciowych, q0 nale偶膮ce do Q jest stanem pocz膮tkowym od kt贸rego automat rozpoczyna dzia艂anie,
F鈯 Q - jest zbiorem stan贸w ko艅cowych (stan akceptacji lub nieakceptacji),
未- jest odwzorowaniem Q x 危 w 2Q. (2Q - jest zbiorem pot臋gowym Q, czyli zbiorem wszystkich podzbior贸w Q), czyli 未 (q,a) jest zbiorem wszystkich stan贸w p, dla kt贸rych istnieje przej艣cie ze stanu q do p o etykiecie zwi膮zanej z symbolem wej艣ciowym a.
Rysunek 14 przedstawia konstrukcj臋 NAS akceptuj膮cego ci膮gi zerojedynkowe w kt贸rych przynajmniej raz wyst膮pi艂o podwojenie zer lub jedynek:
1 1
0 0 0 0
start q0 q3 q4
1
q1
1
q2
0
1
Rys.14. Niedeterministyczny automat sko艅czony akceptuj膮cy ci膮gi, w kt贸rych wyst膮pi艂o podwojenie zer lub jedynek.
Z rysunku 14 wida膰, 偶e ze stanu q0 wychodz膮 dwie kraw臋dzie (drogi) o etykiecie 0, czyli z chwil膮 pojawienia si臋 zera na wej艣ciu istnieje mo偶liwo艣膰 przej艣cia ze stanu q0 do stanu q1 lub q3 . Taka w艂a艣nie mo偶liwo艣膰 wyboru stan贸w przy tym samym symbolu wej艣ciowym wyr贸偶nia NAS od DAS. Ten typ automat贸w b臋dzie akceptowa艂 ci膮g symboli a1,a2...an, dla kt贸rego istnieje ci膮g przej艣膰 prowadz膮cy od stanu pocz膮tkowego do stanu ko艅cowego. Dla przyk艂adu ci膮g 101001 zostanie zaakceptowany przez powy偶szy NAS bo istnieje towarzysz膮cy mu ci膮g przej艣膰: q0, q0, q0, q3, q4, q4; natomiast dla ci膮gu 10101 nie istnieje 偶adne przej艣cie ze stanu pocz膮tkowego do ko艅cowego, gdy偶 automat w wyniku pojawienia si臋 symboli 10101 pozostanie w stanie q0 czyli wyra偶enie nie zostanie zaakceptowane.
Rysunek 15 przedstawia jeszcze jeden niedeterministyczny automat sko艅czony, kt贸ry akceptuje ci膮gi wyrazowe w kt贸rych wyst膮pi艂a przynajmniej raz sekwencja symboli a b c.
{ dowolny symbol }
{ dowolny symbol }
{ w tym a i b } b c
q1 q2 q3
a
Start q0
Rys. 15. NAS akceptuj膮cy ci膮g symboli, w kt贸rych przynajmniej raz wyst膮pi艂a sekwencja a,b,c
Deterministyczny automat sko艅czony z poprzedniego podrozdzia艂u jest szczeg贸lnym przypadkiem NAS, w kt贸rym dla ka偶dego stanu istnieje dok艂adnie jedno przej艣cie ze stanu do stanu czyli ka偶dy DAS jest NAS.
2.3 Automat sko艅czony z 蔚 -ruchami
Modyfikacj膮 niedeterministycznego automatu sko艅czonego jest automat sko艅czony z 蔚- ruchami. Model automatu w tym przypadku dopuszcza przej艣cie ze stanu do stanu przy pustym wej艣ciu 蔚. Formalnie niedeterministyczny automat sko艅czony z 蔚-ruchami jest definiowany jako uporz膮dkowana pi膮tka:
< Q, 危, 未, qo, F>
gdzie:
Q, 危, qo, F- takie same znaczenie jak w przypadku DAS i NAS
未- odwzorowuje Q x (危 鈭獅蔚}) w 2Q. Czyli 未 jest zbiorem wszystkich stan贸w p takich, 偶e istnieje przej艣cie o etykiecie a ze stanu q do p, natomiast a jest s艂owem pustym 蔚 lub symbolem ze zbioru 危.
Dla przyk艂adu rozpatrzmy diagram przej艣膰 AS z 蔚- ruchami z rysunku 16, kt贸ry akceptuje ci膮g symboli zawieraj膮cych dowolna liczb臋 zer, po kt贸rych nast臋puje dowolna liczba jedynek, a nast臋pnie dowolna liczba dw贸jek. Oczywi艣cie zgodnie z definicj膮 dowolna liczba poszczeg贸lnych symboli mo偶e wynosi膰 0 czyli nast膮pi przej艣cie przy pustym wej艣ciu 蔚:
0 1 2
蔚 蔚
start q0 q1 q2
Rys.16. NAS z 蔚-ruchami akceptuj膮cy ci膮g z艂o偶ony z kilu 0, potem kilku1, a potem kilku2
Dla powy偶szego diagramu s艂owo 002 zostanie zaakceptowane gdy偶 istnieje droga od stanu pocz膮tkowego do stanu ko艅cowego: q0, q0, q0, 蔚, 蔚, q2, o 艂ukach etykietowanych 0 ,0, 蔚, 蔚, 2.
Konstrukcja NAS 蔚- ruchami jest bardziej zrozumia艂a po zapoznaniu si臋 z wyra偶eniami regularnymi, kt贸re zosta艂y om贸wione w nast臋pnym rozdziale.
2.4 Wyra偶enia regularne
J臋zyki akceptowane przez automaty sko艅czone mo偶na 艂atwo opisa膰 prostymi wyra偶eniami zwanymi wyra偶eniami regularnymi. Celem przedstawienia zapisu j臋zyk贸w akceptowanych wprowad藕my poj臋cia: z艂o偶enia i domkni臋cia na zbiorach 艂a艅cuch贸w.
Niech 危 b臋dzie sko艅czonym zbiorem symboli i niech L, L1, L2 b臋d膮 zbiorami 艂a艅cuch贸w z 危*. Z艂o偶eniem L1 i L2, oznaczanym jako L1 L2, nazywamy {xy | x nale偶y do L1 i y nale偶y do L2}- oznacza to, 偶e 艂a艅cuchy nale偶膮ce do L1 L2 tworzone s膮 poprzez wypisanie 艂a艅cucha z L1 , a nast臋pnie 艂a艅cucha z L2, we wszystkich mo偶liwych kombinacjach np. niech L1 ={0,1}i L2={01,101} wtedy z艂o偶enie L1 L2 = {001,0101, 101,1101}. Niech L0={蔚} i Li =Lli-1 dla i 鈮 0. Domkni臋ciem Kleene'ego (domkni臋ciem) L, oznaczanym symbolem L*, nazywamy zbi贸r:
鈭
L* = Li,
i = 0
a domkni臋ciem dodatnim L, oznaczanym symbolem L+, zbi贸r
鈭
L+ = Li,
i = 1
Tak wi臋c L* jest zbiorem wszystkich s艂贸w otrzymanych w wyniku z艂o偶enia dowolnej liczby s艂贸w z L, za艣 L+ wyklucza przypadek zera s艂贸w, kt贸rych z艂o偶enie okre艣la si臋 - 蔚; np. domkni臋ciem Kleene'ego {1,0}* ={蔚, 1, 0, 11,10,01,00....} , za艣 domkni臋ciem dodatnim {1,0}+ = {1, 0, 11,10,01,00....}.
Wyra偶enia regularne i zbiory przez nie reprezentowane definiujemy w nast臋puj膮cy spos贸b:
0 jest wyra偶eniem regularnym reprezentuj膮cym zbi贸r pusty.
蔚 jest wyra偶eniem regularnym reprezentuj膮cym zbi贸r {蔚}.
Dla ka偶dego a z 危, a jest wyra偶eniem regularnym reprezentuj膮cym zbi贸r {a}.
Je偶eli r i s s膮 wyra偶eniami regularnymi reprezentuj膮cymi odpowiednio j臋zyki R i S, to (r+s), (rs) i (r*) s膮 wyra偶eniami regularnymi reprezentuj膮cymi odpowiednio zbiory R鈭猄, RS i R*.
Dla przyk艂adu:
00 jest wyra偶eniem regularnym, reprezentuj膮cym {00}
(0+1) opisuje zbi贸r wszystkich 艂a艅cuch贸w z艂o偶onych z zer i jedynek
(0+1)*00(0+1)* opisuje zbi贸r wszystkich zer i jedynek w kt贸rych przynajmniej raz wyst膮pi艂o podwojenie zer
(1+10)* reprezentuje zbi贸r wszystkich zer i jedynek rozpoczynaj膮cych si臋 od 1 i nie zawieraj臋cych podwojonych symboli 0.
(0+1)*011 opisuje wszystkie 艂a艅cuchy zer i jedynek ko艅cz膮ce si臋 sekwencj膮 011
0+ 1+ 2+ jest wyra偶eniem reprezentuj膮cym dowolna liczb臋 zer po kt贸rych nast臋puje dowolna liczba jedynek, a nast臋pnie dowolna liczba dw贸jek (domkni臋cie dodatnie- czyli 艂a艅cuchy ko艅cowe musz膮 zawiera膰 przynajmniej po jednym reprezentancie powy偶szych symboli).
Udowodniono, 偶e wyra偶enia regularne reprezentuj膮 j臋zyki akceptowane przez automaty sko艅czone co oznacza, 偶e dla dowolnego wyra偶enia regularnego istnieje odpowiadaj膮cy mu NAS z 蔚-ruchami, co wi臋cej wprowadzono gotowe konstruktory dla diagram贸w przej艣膰 pozwalaj膮ce dla dowolnego wyra偶enia regularnego stworzy膰 mechanicznie konstrukcj臋 automatu sko艅czonego. Wyr贸偶niono trzy podstawowe postacie wyra偶e艅 regularnych:
suma teoriomnogo艣ciowa r = r1 + r2
z艂o偶enie r = r1 r2
domkni臋cie r = r1*
konstruktor dla sumy teoriomnogo艣ciowej r= r1+r2
q1 M1 f1
蔚 蔚
start qo fo
蔚 q2 M2 f2 蔚
Ka偶da droga na powy偶szym diagramie automatu M musi rozpoczyna膰 si臋 od przej艣cia do stanu q1 lub do stanu q2 przy pustym wej艣ciu 蔚. Je偶eli droga prowadzi do q1, to nast臋pnie mo偶e dowolnie przebiega膰 w automacie M1, a偶 do osi膮gni臋cia stanu f1, potem nast臋puje przej艣cie do stanu fo, przy pustym wyj艣ciu 蔚. Podobnie, je偶eli droga rozpocz臋艂a si臋 przej艣ciem ze stanu q0 do q2 to nast臋pnie mo偶e przebiega膰 dowoln膮 tras膮 w automacie M2, a偶 do osi膮gni臋cia stanu f2, a nast臋pnie przej艣cie do stanu f0.
konstruktor dla z艂o偶enia r = r1r2
蔚
start q1 M1 f1 q2 M2 f2
Ka偶da droga z q1 do f2 w automacie M sk艂ada si臋 z drogi etykietowanej jakim艣 艂a艅cuchem x prowadz膮cej z q1 do f1, po kt贸rej nast臋puje przej艣cie ze stanu f1 do stanu q2 przy pustym wej艣ciu 蔚 a nast臋pnie nast臋puje droga z q2 do f2 etykietowana jakim艣 艂a艅cuchem y.
konstruktor dla domkni臋cia r = r1*
蔚
蔚 蔚
start q0 q1 M1 f1 f0
蔚
Dowolna droga prowadz膮ca z q0 do f2 sk艂ada si臋 albo z drogi z q0 do f0 o etykiecie 蔚, albo te偶 z drogi od q0 do q1 przy 蔚, po kt贸rych nast臋puje pewna liczba (w szczeg贸lnym przypadku 0) dr贸g z q1 do f1, potem znowu do q1 przy 蔚, nast臋pnie zn贸w droga z q1 do f1, a偶 w ko艅cu droga z f2 do f0 przy 蔚.
Powy偶sze konstruktory s膮 bardzo pomocne przy kre艣leniu diagram贸w przej艣膰 NAS dla wyra偶e艅 regularnych. Konstrukcj臋 takiego automatu rozpoczynamy wtedy od roz艂o偶enia wyra偶enia regularnego na elementarne sk艂adowe dla kt贸rych tworzymy automaty, te z kolei na podstawie konstruktor贸w 艂膮czymy w logiczn膮 ca艂o艣膰. Przeanalizujmy przyk艂ad automatu akceptuj膮cego wyra偶enie regularne postaci: 01*+1. To wyra偶enie jest postaci r = r1 + r2 gdzie: r1=01*; r2 = 1. Dla wyra偶enia r2 posta膰 automatu jest nast臋puj膮ca:
start q1 1 q2
wyra偶enie r1 mo偶emy zapisa膰 jako r1 = r3 + r4 gdzie r3= 0; r4=1*. Automat dla r3 ma prost膮 konstrukcj臋, kt贸ra przedstawia si臋 nast臋puj膮co:
start q3 0 q4
z kolei wyra偶enie r4 mo偶emy zapisa膰 jako r4 = r*5 gdzie r5 to 1, a NAS dla r5 to:
start q5 1 q6
Wykorzystuj膮 przedstawione konstruktory zaczniemy kre艣lenie automatu dla wyra偶enia r4 = 1* ( konstruktor domkni臋cia)
蔚
蔚 蔚
start q7 q5 1 q6 q8 rys. a
蔚
nast臋pnie dla r1 =r3r4 (r= 01*) wykorzystujemy konstruktor z艂o偶enia dok艂adaj膮c do rys. a nast臋puj膮c膮 konstrukcj臋:
0 蔚
start q3 q4 rys. a
Teraz tworzymy konstrukcj臋 dla wyra偶enia r= r1 + r2 (r=01*+1) wykorzystuj膮c konstruktor sumy teoriomnogo艣ciowej.
start q1 1 q2
蔚 蔚
q9 q10
蔚 蔚
0 蔚 蔚 蔚 蔚
q3 q4 q7 q5 1 q6 q8
蔚
Rys.17. NAS z 蔚 -ruchami dla wyra偶enia regularnego 01*+1.
2.5 Zastosowania automat贸w sko艅czonych
Istnieje ca艂a gama problem贸w z zakresu projektowania oprogramowania, kt贸re daj膮 si臋 upro艣ci膰 poprzez automatyczn膮 konwersj臋 symboliki wyra偶e艅 regularnych na efektywn膮 implementacj臋 komputerow膮 odpowiedniego automatu sko艅czonego. Teori臋 automat贸w sko艅czonych wykorzystano do:
Analizator贸w leksykalnych
Tokeny (czyli bazowe kategorie syntaktyczne) j臋zyka programowania daj膮 si臋 niemal bez wyj膮tku przedstawi膰 w postaci wyra偶e艅 regularnych. I tak na przyk艂ad, identyfikatory ALGOLu, b臋d膮ce ci膮gami liter i cyfr rozpoczynaj膮cymi si臋 od litery (ma艂ej czy du偶ej), bez ograniczenia co do d艂ugo艣ci ci膮gu, mo偶na wyrazi膰 w postaci
( litera ) ( litera + cyfra )*
gdzie litera oznacza A + B +... + Z + a + b + .. z, a cyfra - 0 + 1 + .. + 9
Identyfikatory w Fortlanie, kt贸rych d艂ugo艣膰 jest ograniczona do sze艣ciu znak贸w i kt贸re nie mog膮 zawiera膰 innych liter ni偶 du偶e oraz znak $ mog膮 by膰 przedstawione jako
( litera ) ( 蔚 + litera + cyfra )5
Niekt贸re generatory analizator贸w leksykalnych przyjmuj膮 jako wej艣cie ci膮g wyra偶e艅 regularnych opisuj膮cych tokeny i wytwarzaj膮 pojedynczy automat sko艅czony, rozpoznaj膮cy dowolny token. Zazwyczaj przekszta艂caj膮 one wyra偶enia regularne na NAS z 蔚-przej艣ciami, a nast臋pnie konstruuj膮 podzbiory zbioru stan贸w, aby otrzyma膰 DAS w spos贸b bezpo艣redni, zamiast wyeliminowa膰 najpierw 蔚-przej艣cia.
Edytor贸w tekstu
Pewne edytory tekstu oraz podobne do nich programy pozwalaj膮 na zast臋powanie dowolnego 艂a艅cucha pasuj膮cego do danego wyra偶enia regularnego pewnym innym 艂a艅cuchem.
Techniki
Wykorzystywane do projektowania uk艂ad贸w prze艂膮czaj膮cych na przyk艂ad dzia艂anie termostatu jest oparte na analizie temperatur i wybieraniu jednego z dw贸ch stan贸w : w艂膮czenie uk艂adu grzewczego i wy艂膮czenie.
III. MASZYNA TURINGA
3.1 Podstawowy model maszyny Turinga
Maszyna Turinga jest prostym modelem matematycznym komputera. Opieraj膮c si臋 na pozycji D.Harela [HARE 92] przedstawmy jej najprostszy model, natomiast pozycja J.E.Hopcrofta [HOPC 94] pos艂u偶y nam do opisu formalnego.
Podstawowy model przedstawiony na rysunku 18 ma sko艅czone sterowanie, ta艣m臋 wej艣ciow膮 podzielon膮 na kom贸rki (kwadraty) oraz g艂owic臋 ta艣my, mog膮c膮 obserwowa膰 w dowolnej chwili tylko jedna kom贸rk臋 ta艣my. Ta艣ma ma kom贸rk臋 po艂o偶on膮 najbardziej na lewo, ale jest prawowostronnie niesko艅czona. Ka偶da z kom贸rek ta艣my mo偶e zawiera膰 dok艂adnie jeden symbol z sko艅czonego alfabetu symboli. Przyjmuje si臋 umownie, 偶e ci膮g symboli wej艣ciowych umieszczony jest na ta艣mie pocz膮wszy od lewej, pozosta艂e kom贸rki ( na prawo od symboli wej艣ciowych) s膮 wype艂nione specjalnym symbolem ta艣mowym nosz膮cym nazw臋 symbolu pustego.
a1 a2 ... ai ... an B B ...
sterowanie
sko艅czone
Rys.18. Podstawowy model Maszyny Turinga
W zale偶no艣ci od obserwowanego symbolu przez g艂owic臋 ta艣my oraz stanu sterowania sko艅czonego, maszyna Turinga w pojedynczym ruchu:
zmienia stan,
wpisuje symbol w obserwowanej kom贸rce ta艣my, zast臋puj膮c symbol tam wpisany,
przesuwa g艂owic臋 o jedn膮 kom贸rk臋 w prawo lub w lewo.
Formalnie maszyn臋 Turinga (MT) nazywamy:
M = <Q, 危, 螕, 未, q0, B, F >
gdzie:
Q- jest sko艅czonym zbiorem stan贸w,
螕 - sko艅czony zbi贸r dopuszczalnych symboli ta艣mowych,
B- symbol pusty nale偶膮cy do 螕,
危- podzbi贸r 螕 nie zawieraj膮cy B, zwany zbiorem symboli wej艣ciowych,
未- funkcja nast臋pnego ruchu, b臋d膮ca odwzorowaniem Q x 螕 w Q x 螕 x { L, P }
gdzie:
L- oznacza ruch w lewo
P- ruch w prawo,
q0- stan pocz膮tkowy,
F鈯Q - zbi贸r stan贸w ko艅cowych
Dzia艂anie maszyny Turinga przedstawia si臋 jako diagram przej艣膰 mi臋dzy stanami lub jako tabel臋 stan贸w, kt贸re to poj臋cia zosta艂y om贸wione poni偶ej.
Diagram przej艣膰 jest po prostu grafem skierowanym, kt贸rego wierzcho艂ki reprezentuj膮 stany. Kraw臋d藕 prowadz膮ca ze stanu s do stanu t nazywa si臋 przej艣ciem i etykietuje si臋 j膮 kodem postaci (a/b, kierunek) gdzie a i b s膮 symbolami , a kierunek okre艣la ruch g艂owicy w prawo b膮d藕 w lewo. Cz臋艣膰 a etykiety jest wyzwalaczem przej艣cia, a cz臋艣膰 <b,kierunek> akcj膮:
(a / b , kierunek)
wyzwalacz akcja
W czasie swego dzia艂ania maszyna Turinga, kiedy znajdzie si臋 w stanie s i odczytywanym symbolem b臋dzie a to nast膮pi wpisanie w to miejsce b i przesuni臋cie o jedno pole w kierunku kierunek. Fragment przyk艂adowego diagramu przej艣膰 przedstawia rysunek 19.
start q1 # / #, L q4
a / #, P
qo # / #, L q2
b / #, P
q3 # / # , L
Rys.19. Fragment grafu przej艣膰 mi臋dzy stanami dla maszyny Turinga
Tabela stan贸w - kt贸ra r贸wnie偶 obrazuje przej艣cia mi臋dzy stanami maszyny Turinga zawiera wszystkie symbole z sko艅czonego alfabetu wej艣ciowego jak r贸wnie偶 wszystkie stany w kt贸rych mo偶e znale藕膰 si臋 maszyna Turinga (rysunek 20). Ka偶de pole tabeli okre艣la:
dla danego stanu qi kolejny stan qi+1
symbol, kt贸ry ma by膰 zapisany na ta艣mie
kierunek (L / P) dla ruchu g艂owicy
q0 q1 q2 q3
蠁 q0 q2 q3 q5
蠁 P a P c L
a q1 q2 q4
b L c P a L
b q5 q0 q5
蠁 P c L 蠁
c q7 q2
a P b L
Rys.20. Fragment tabeli stan贸w maszyny Turinga
Zar贸wno dla tabeli stan贸w jak i grafu przej艣膰 wyr贸偶nia si臋 specyficzne stany b臋d膮ce odpowiednio stanem pocz膮tkowym i stanem (b膮d藕 stanami ) ko艅cowym, zwane te偶 stanami biernymi. Zak艂ada si臋 , 偶e maszyna rozpoczyna swoje dzia艂anie od swego stanu pocz膮tkowego na pierwszym od lewej niepustym kwadracie ta艣my i post臋puje krok po kroku zgodnie z narzuconym ruchem, za艣 ko艅czy dzia艂anie po osi膮gni臋ciu stanu ko艅cowego.
W celu zobrazowania konstrukcji tabeli stan贸w przeanalizujmy maszyn臋 Turinga, kt贸ra dla alfabetu wej艣ciowego 危 ={a, b} podwaja symbole w s艂owie.
Przyk艂ad 8: Maszyna Turinga podwajaj膮ca symbole w s艂owie.
危 ={a, b}
螕= { 蠁 , a , b}
Przed wypisaniem tabeli stan贸w przeanalizujmy jak podana maszyna Turinga ma dzia艂a膰. Dla s艂owa:
ab otrzymujemy aabb
aba otrzymujemy aabbaa
S艂owo na ta艣mie zapisane jest jako ci膮g symboli postaci na przyk艂ad 蠁 蠁 蠁 a b 蠁 蠁 蠁
Na pocz膮tku w kolumnie wypisujemy wszystkie symbole 螕= { 蠁 , a , b} i stan pocz膮tkowy q0
q0
蠁 q0 je偶eli b臋d膮c w stanie q0 odczytanym
蠁, P symbolem b臋dzie 蠁 to pozostajemy
a nadal w tym stanie i wykonujemy
b ruch o jedno pole w prawo.
q0
蠁 q0 je偶eli b臋d膮c w stanie q0 odczytanym symbolem b臋dzie a
蠁, P to wpisujemy w jego miejsce 蠁 i przechodzimy w prawo
a q1 do stanu q1.
蠁, P
B臋d膮c w stanie q1 musimy i艣膰 tak d艂ugo w prawo a偶 pominiemy wszystkie symbole 艂膮cznie z pierwszym symbolem 蠁. Wtedy w miejsce drugiego 蠁 (mo偶e si臋 ono znajdowa膰 po kilku symbolach z alfabety wej艣ciowego) wpisujemy a i przechodzimy do stanu q3. Jedynym s艂usznym symbolem napotkanym w tym stanie jest 蠁, w miejsce kt贸rego wpisujemy drugie a i przechodzimy do stanu q4 (stan powrotu). Je偶eli b臋d膮c w tym stanie przejdziemy nad wszystkimi symbolami i napotkamy symbol 蠁, to sprawdzamy, czy s膮 jeszcze jakie艣 symbole wej艣ciowe na ta艣mie. Je偶eli tak to zaczynamy algorytm od pocz膮tku, w przeciwnym razie przechodzimy do stanu ko艅cowego q15
q0 q1 q2 q3 q4 q5 q6
蠁 q0 q2 q3 q4 q5 q15 q0
蠁, P 蠁, P a, P a, L 蠁, L 蠁, P 蠁, P
a q1 q1 q2 q15 q4 q6 q6
蠁, P a, P a, P a, P a, L a, L a,L
Dla symbolu b pola w tabeli stan贸w b臋d膮 tworzone analogicznie. Ostateczny wygl膮d tabeli stan贸w przedstawia rysunek 21.
q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13
蠁 q0 q2 q3 q4 q5 q13 q0 q8 q9 q10 q11 q13 q0
蠁, P 蠁, P a, P a, L 蠁, L 蠁, P 蠁, P 蠁, P b, P b, L 蠁, L 蠁, P 蠁 , P K
a q1 q1 q2 q13 q4 q6 q6 q7 q8 q13 q10 q12 q12
蠁, P a, P a, P a, P a, L a, L a, L a, P a, P a, P a, L a, L a, L K
b q7 q1 q2 q13 q4 q6 q6 q7 q8 q13 q10 q12 q12
蠁, P b, P b, P b, P b, L b, L b, L b , P b, P b, P b, L b, L a, L K
Rys. 21. Tabela stan贸w maszyny Turinga podwajaj膮ca symbole w s艂owie dla alfabetu wej艣ciowego 危 ={a, b}
Przeanalizujmy kilka pocz膮tkowych takt贸w pracy powy偶szej maszyny Turinga dla ci膮gu wej艣ciowego: a b
Ci膮g ten zapisany jest na ta艣mie w postaci 蠁 蠁 蠁 a b 蠁 蠁 蠁 蠁 .....
蠁 蠁 蠁 a b 蠁 蠁 蠁 .... / pozostajemy w stanie q0 i przechodzimy w prawo
蠁 蠁 蠁 蠁 b 蠁 蠁 蠁 .. / napotkali艣my a, wpisujemy 蠁 i przechodzimy w prawo do stanu q1
蠁 蠁 蠁 蠁 b 蠁 蠁 蠁 .. / pozostajemy nadal w stanie q1 a偶 dojdziemy do pierwszego znaku 蠁
蠁 蠁 蠁 蠁 b 蠁 蠁 蠁.../ po napotkaniu pierwszego 蠁 przechodzimy w prawo do stanu q2
蠁 蠁 蠁 蠁 b 蠁 a 蠁 蠁.../ po napotkaniu 蠁 wpisujemy a i przechodzimy do stanu q3
蠁 蠁 蠁 蠁 b 蠁 a a 蠁.../ w stanie q3 wpisujemy drugie a i przechodzimy do stanu q4, kt贸ry to stan powoduje powr贸t na pocz膮tek s艂owa i rozpocz臋cie pracy od nowa o ile s膮 jeszcze na ta艣mie symbole wej艣ciowe
Po przeanalizowaniu wszystkich symboli wej艣ciowych przechodzimy do stanu q13, kt贸ry to stan jest stanem ko艅cowym (stan bierny ).
Dla rozpatrywanego ci膮gu wej艣ciowego mo偶na okre艣li膰 trzy elementy w tabeli stan贸w:
stan warunkowy - kt贸ry powoduje przej艣cie do okre艣lonej sekcji manipulowania danym symbolem,
sekcja manipulowania - stany odpowiadaj膮ce za przepisywanie symboli,
powr贸t- stan powoduj膮cy przej艣cie do pocz膮tku i rozpocz臋cie pracy od nowa
Jak zosta艂o wcze艣niej wspomniane, alternatywne do tabeli stan贸w stosuje si臋 graf przej艣膰 mi臋dzy stanami. Konstrukcj臋 przyk艂adowego grafu ilustruje przyk艂ad 9.
Przyk艂ad: 9
Maszyna Turinga dodaj膮c膮 1 do danej liczby w zapisie dw贸jkowym ( inkrementacja liczby binarnej bez znaku). Analiz臋 liczby rozpoczynamy z prawej strony.
q0 q1 q2
蠁 q0 q2 K q2
蠁, L 1, L 0/1, L
0 q2 q2 K start q0 蠁 /1 L 0 / 1, L
1, L 1, L
1 q1 q1 K 1/0, L
0, L 0, L q1
1/0, L
Rys.22. Graf i tabela stan贸w maszyny Turinga dodaj膮cej 1 do liczby binarnej
Maszyny Turinga z przyk艂ad贸w: 8 i 9 rozwi膮zuj膮 problemy algorytmiczne zwi膮zane z manipulacj膮 danych wej艣ciowych. Odmian臋 stanowi膮 maszyny Turinga rozwi膮zuj膮ce problemy decyzyjne i tak pokazana w przyk艂adzie 10 maszyna Turinga bada czy dane s艂owo jest palidromem.
Przyk艂ad 10:
Maszyna Turinga badaj膮ca czy dane s艂owo z alfabetu wej艣ciowego 危 ={a, b, c} jest palindromem (to znaczy s艂owem, kt贸re czyta si臋 tak samo z obu stron). Dodatkowo przyjmuje si臋, 偶e pojedynczy symbol jest palindromem. Wprowadza si臋 dodatkowo 2 stany akceptacji SA i nieakceptacji SN. Przej艣cie do stanu akceptacji oznacza, 偶e dane s艂owo jest palindromem, za艣 przej艣cie do stanu nieakceptacji oznacza, 偶e s艂owo nie jest palindromem. Tabel臋 przej艣膰 miedzy stanami pokazuje rysunek 22.
q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11
蠁 q0 q2 q10 q0 q5 q10 q0 q8 q10 q0
蠁, P 蠁, L 蠁 , P 蠁, P 蠁, L 蠁, P 蠁, P 蠁, L 蠁, P 蠁, P SA SN
a q1 q1 q3 q3 q4 q11 q6 q7 q11 q9
蠁, P a, P 蠁, L a, L a, P a, P a, L a, P a, P a, L SA SN
b q4 q1 q11 q3 q4 q6 q6 q7 q11 q9
蠁, P b, P b, P b, L b, P 蠁, L b, L b , P b, P b, L SA SN
c q7 q1 q11 q3 q4 q11 q6 q7 q9 q9
蠁, P c, P c, P c, L c, P c, P c, L c , P 蠁, L c, L SA SN
Rys. 22. Tabela stan贸w maszyny Turinga, badaj膮cej czy dane s艂owo jest palindromem
R贸偶norodno艣膰 zada艅 stawianych przed maszyn膮 Turinga postawi艂o pytanie : jakie problemy mo偶na rozwi膮za膰 za jej pomoc膮 (oczywi艣cie pomijaj膮c czas) ? Ot贸偶 okazuje si臋 偶e : Maszyny Turinga potrafi膮 rozwi膮za膰 ka偶dy efektywnie rozwi膮zywalny problem algorytmiczny. M贸wi膮c inaczej, ka偶dy problem algorytmiczny dla kt贸rego mo偶emy znale藕膰 algorytm daj膮cy si臋 zaprogramowa膰 w pewnym dowolnym j臋zyku, wykonuj膮cy si臋 na pewnym dowolnym komputerze, nawet na takim, kt贸rego jeszcze nie zbudowano, ale mo偶na zbudowa膰. To stwierdzenie jest jedn膮 z wersji tzw. tezy Churcha-Turinga, kt贸rzy doszli do niej niezale偶nie w po艂owie lat trzydziestych. Istotn膮 spraw膮 jest aby u艣wiadomi膰 sobie, 偶e teza Churcha-Turinga jest tez膮 a nie twierdzeniem, zatem nie mo偶e by膰 dowiedziona w matematycznym tego s艂owa znaczeniu. Jedno z poj臋膰, do kt贸rej si臋 odwo艂uje, jest bowiem nieformalnym i nieprecyzyjnym, poj臋ciem „efektywnej obliczalno艣ci”. Dlaczego jednak powinni艣my wierzy膰 tej tezie, szczeg贸lnie, je艣li nie mo偶na jej udowodni膰?
Ju偶 od wczesnych lat trzydziestych badacze proponowali r贸偶ne modele komputera absolutnego, wszechpot臋偶nego, lub uniwersalnego. Chciano bowiem sprecyzowa膰 ulotne poj臋cie „efektywnej obliczalno艣ci”. Na d艂ugo przedtem nim wymy艣lono pierwszy komputer, Turing zaproponowa艂 swoj膮 maszyn臋, a Church wymy艣li艂 matematyczny formalizm funkcji zwany rachunkiem lambda (jako podstawa j臋zyka programowania Lisp). Mniej wi臋cej w tym samym czasie Emil Post zdefiniowa艂 pewien typ systemu produkcji do manipulowania symbolami, a Stephen Kleene zdefiniowa艂 klas臋 obiekt贸w zwanych funkcjami rekurencyjnymi.
Wszyscy oni pr贸bowali u偶y膰 tych modeli do rozwi膮zania wielu problem贸w algorytmicznych, do kt贸rych znane by艂y „efektywnie wykonalne” algorytmy.
Prze艂omowym zdarzeniem istotnym dla wszystkich tych modeli sta艂o si臋 udowodnienie, i偶 s膮 one r贸wnowa偶ne w kategoriach problem贸w algorytmicznych, kt贸re rozwi膮zuj膮. I ten fakt jest dzi艣 nadal prawdziwy nawet dla najsilniejszych modeli, jakie mo偶na sobie wyobrazi膰.
Z tezy Churcha-Turinga wynika, 偶e najpot臋偶niejszy superkomputer z wieloma najwymy艣lniejszymi j臋zykami programowania, interpretatorami, kompilatorami i wszelkimi zachciankami, nie jest pot臋偶niejszy od domowego komputera z jego uproszczonym j臋zykiem programowania. Maj膮c ograniczon膮 ilo艣膰 czasu i pami臋ci mog膮 obydwa rozwi膮za膰 te same problemy algorytmiczne, jak r贸wnie偶 偶aden z nich nie mo偶e rozwi膮za膰 problem贸w nierozstrzygalnych (nieobliczalnych). Schematycznie rozstrzygalno艣膰 problem贸w przedstawia rysunek 23.
Problemy wcale nie
problemy maj膮ce algorytm贸w
nierozstrzygalne
teza Churcha-Turinga
problemy trudno Problemy nie maj膮ce
rozwi膮zywalne rozs膮dnych algorytm贸w
Problemy 艂atwo Problemy maj膮ce rozs膮dne
Rozwi膮zywalne algorytmy
Rys. 23. Sfera problem贸w algorytmicznych
IV. GRAMATYKI BEZKONTEKSTOWE
4.1 Podstawowe poj臋cia gramatyk
Przez gramatyk臋 rozumie si臋 pewien uk艂ad regu艂 zadaj膮cy zbi贸r s艂贸w utworzonych z symboli j臋zyka. S艂owa te mog膮 by膰 interpretowane jako obiekty j臋zykowe r贸偶nych szczebli, np. jako formy wyrazowe, grupy wyraz贸w i zdania. Opieraj膮c si臋 na pracach: Z.A艂fierowej [A艁FI 77] oraz J.E.Hopcrofta [HOPC 94] spr贸bujemy wykaza膰 w tym przydatno艣膰 gramatyk w teorii informatyki skupiaj膮c swoje rozwa偶ania na gramatykach bezkontekstowych.
Gramatyk臋 j臋zyka mo偶na rozpatrywa膰 jako teori臋 powtarzaj膮cych si臋 prawid艂owo艣ci budowy zda艅 zwanych syntaktyczn膮 struktur膮 j臋zyka.
Syntaktyka (sk艂adnia) j臋zyka s膮 to regu艂y budowy zda艅 w j臋zyku lub regu艂y budowy konstrukcji j臋zykowych. Semantyka j臋zyka jest to interpretacja tych regu艂, zasady stosowania sk艂adni.
Gramatyki formalne zajmuj膮 si臋 poj臋ciami abstrakcyjnymi powstaj膮cymi droga uog贸lnienia poj臋cia formy wyrazowej, grupy wyraz贸w, zdania. O ile zwyk艂e gramatyki pozwalaj膮 okre艣li膰 zbiory regu艂 budowy zda艅, o tyle gramatyki formalne stanowi膮 pewien spos贸b badania i opisu zbioru regu艂. rozr贸偶nia si臋 trzy typy gramatyk formalnych:
rozpoznaj膮ca- je偶eli dla dowolnego rozpatrywanego s艂owa potrafi rozstrzygn膮膰, czy s艂owo to jest poprawne czy nie, a w przypadku odpowiedzi pozytywnej potrafi poda膰 wskaz贸wki dotycz膮ce budowy tego s艂owa,
generacyjna- je偶eli potrafi zbudowa膰 dowolne s艂owo poprawne, podaj膮c przy tym wskaz贸wki dotycz膮ce jego budowy oraz nie tworzy ani jednego s艂owa niepoprawnego,
przetwarzaj膮ca- je偶eli dla dowolnie poprawnie zbudowanego s艂owa potrafi ona zbudowa膰 jego odwzorowania r贸wnie偶 w postaci s艂owa poprawnego, okre艣laj膮c przy tym wskaz贸wki dotycz膮ce kolejno艣ci stosowania odwzorowa艅.
Formalnie gramatyk臋 G okre艣lamy jako:
G= <V, T, P, S >
gdzie:
V- zbi贸r symboli terminalnych- sko艅czony niepusty zbi贸r symboli zwany tak偶e alfabetem ko艅cowym (zasadniczym ) gramatyki G. alfabet ko艅cowy jest to zbi贸r element贸w pierwotnych, z kt贸rych budowane s膮 s艂owa generowane przez gramatyk臋.
T- zbi贸r symboli nieterminalnych- sko艅czony niepusty zbi贸r symboli zwany tak偶e alfabetem pomocniczym. Alfabet pomocniczy jest to zbi贸r symboli, kt贸rymi oznacza si臋 klasy lub s艂owa z艂o偶one z element贸w pierwotnych, czyli inaczej jest to s艂ownik typ贸w syntaktycznych.
P- lista produkcji- s膮 to regu艂y gramatyki, czyli sko艅czony zbi贸r regu艂
S- g艂owa- symbol pocz膮tkowy. Jest to wyr贸偶niony symbol pomocniczy oznaczaj膮cy klas臋 tych wszystkich obiekt贸w j臋zykowych, dla kt贸rych opisu przeznaczona jest gramatyka.
Podstawowym obiektem zastosowa艅 teorii gramatyk s膮 nie dowolne gramatyki, lecz gramatyki pewnych szczeg贸lnych typ贸w, najwa偶niejsze zar贸wno z teoretycznego jaki i praktycznego punktu widzenia. Wyr贸偶nienia tych typ贸w dokonuje si臋 na podstawie postaci regu艂. W teorii Chomskiego wyr贸偶nia si臋 cztery typy gramatyk. Gramatyki te wyodr臋bnia si臋 przez nak艂adanie kolejno coraz silniejszych ogranicze艅 na uk艂ad regu艂 P:
gramatyka klasy 0 - charakteryzuje si臋 tym , 偶e wszystkie produkcje maj膮 posta膰: u鈫w, u鈭圴*\ {蔚}, w 鈭圴*,
gramatyka klasy 1- zwana kontekstow膮, nazywa si臋 gramatyk臋 charakteryzuj膮c膮 si臋 tym, 偶e wszystkie produkcje maj膮 posta膰: uAw 鈫 ubw, u,w鈭圴*, A鈭圫 , b鈭圴*\ {蔚},
gramatyka typu 2- zwana gramatyk膮 bezkontekstow膮, kt贸ra w uk艂adzie regu艂 P dopuszcza jedynie regu艂y postaci A鈫b, A鈭圫 , b鈭圴*\ {蔚},
gramatyka klasy 3- (regularna), kt贸ra w uk艂adzie regu艂 P dopuszcza regu艂y postaci A鈫抌B (gramatyki prawostronnie regularne) albo A鈫払b (gramatyki lewostronnie regularne), A鈭圫, B鈭圫鈭 {蔚}, b鈭圱*\ {蔚}.
Mo偶na si臋 艂atwo przekona膰, 偶e ka偶da gramatyka klasy i jest jednocze艣nie gramatyk膮 klasy j, dla 0 鈮 j 鈮 i. Wynika to st膮d, 偶e ka偶dy zbi贸r ci膮g贸w wywodliwych zgodnie z gramatyk膮 klasy i jest jednocze艣nie zbiorem ci膮g贸w wywodliwych zgodnie z gramatyk膮 ni偶szych klas. Odwrotne stwierdzenie nie jest jednak prawdziwe. Mo偶na bowiem poda膰 przyk艂ady zbior贸w ci膮g贸w wywodliwych zgodnie z gramatyk膮 i, dla kt贸rych nie spos贸b skonstruowa膰 gramatyki wy偶szej klasy. Og贸lnie powiedziawszy, im wy偶sza klasa gramatyki, tym mniej precyzyjnie okre艣la si臋 rozmaito艣膰 wywodliwych ci膮g贸w.
Jako ilustracj臋 do poszczeg贸lnych gramatyk rozpatrzmy klasyczny przyk艂ad ci膮g贸w: aa.......bb........cc......, kt贸re w skr贸cie b臋dziemy zapisywa膰: akblcm.
k razy l razy m razy
Je艣li nie nak艂adamy 偶adnych ogranicze艅 na warto艣ci k, l, m, to bez trudu mo偶emy znale藕膰 prawostronnie regularn膮 gramatyk臋:
G3= (V3, T3, P3, S)
gdzie
V3={a,b,c}, T3={S,V,U}, za艣 lista produkcji
P3={ S鈫抋S,
S鈫抋V,
V鈫抌V,
V鈫抌U,
U鈫抍U,
U鈫抍}
Je艣li jednak chcemy otrzyma膰 nieco bardziej ograniczone ci膮gi, w kt贸rych k=m to nie mo偶na ju偶 dla nich zbudowa膰 gramatyki regularnej, natomiast mo偶na je okre艣li膰 przez gramatyk臋 bezkontekstow膮
G2= (V2, T2, P2, S)
gdzie
V2={a,b,c}, T2={S,V}, za艣 lista produkcji
P2= { S鈫抋Sc,
S鈫抋Vc,
V鈫扸b,
V鈫抌 }
Zdefiniowanie ci膮g贸w o jednakowej liczbie wyst膮pie艅 ka偶dej z liter (k=l=m) wymaga ju偶 u偶ycia gramatyki kontekstowej lub gramatyki klasy 0, na przyk艂ad
G1= (V1, T1, P1, S)
gdzie
V1={a,b,c}, T1={S,U}, za艣 lista produkcji
P1={ S鈫抋bc,
S鈫抋SUc,
cU鈫扷c,
bU鈫抌b}
4.2 Gramatyki bezkontekstowe
Gramatyki bezkontekstowe, podobnie jak omawiane wcze艣niej zbiory regularne maj膮 szerokie zastosowanie praktyczne. S膮 one wykorzystywane do definiowania j臋zyk贸w programowania, do formalizacji poj臋cia analizy syntaktycznej, do upraszczania translacji j臋zyk贸w programowania.
Gramatyka bezkontekstowa to sko艅czony zbi贸r zmiennych (zwanych te偶 symbolami nieko艅cowymi, symbolami pomocniczymi lub kategoriami syntaktycznymi), z kt贸rych ka偶da reprezentuje pewien j臋zyk. J臋zyki reprezentowane przez zmienne opisywane za pomoc膮 wzajemnej rekursji, z zastosowaniem pewnych symboli pierwotnych, zwanych symbolami ko艅cowymi. Regu艂y wi膮偶膮ce ze sob膮 zmienne zwane s膮 produkcjami.
Pierwotn膮 motywacj膮 wprowadzenia poj臋cia gramatyk bezkontekstowych by艂 opis j臋zyk贸w naturalnych. W ich kontek艣cie mo偶emy pisa膰 regu艂y:
<zdanie> <fraza rzeczownikowa> <fraza czasownikowa>
<fraza rzeczownikowa> <przymiotnik > <fraza rzeczownikowa>
<fraza rzeczownikowa> <rzeczownik>
<rzeczownik> ch艂opiec
<przymiotnik> ma艂y,
gdzie kategorie syntaktyczne s膮 uj臋te w nawiasy k膮towe, a symbole ko艅cowe s膮 reprezentowane za pomoc膮 s艂贸w nie uj臋tych w nawiasy np.: „ch艂opiec”
Rozwa偶ania ligwist贸w pos艂u偶y艂y w informatyce do opisu j臋zyk贸w programowania za pomoc膮 notacji zwanej notacj膮 Backusa-Naura (NBN), b臋d膮cej notacj膮 gramatyki bezkontekstowej z pewnymi drobnymi zmianami dotycz膮cymi formatu oraz kilkoma skr贸tami notacyjnymi. Takie u偶ycie gramatyk bezkontekstowych bardzo upro艣ci艂o definicje j臋zyk贸w programowania oraz konstrukcj臋 kompilator贸w. Dla przyk艂adu we藕my nast臋puj膮cy zbi贸r produkcji:
1. <wyra偶enie> <wyra偶enie> + <wyra偶enie>
2. <wyra偶enie> <wyra偶enie> * <wyra偶enie>
3. <wyra偶enie> (<wyra偶enie>)
4. <wyra偶enie> id
kt贸ry definiuje wyra偶enie arytmetyczne z operatorami + i * oraz argumentami reprezentowanymi przez symbol id. Pierwsze dwie produkcje m贸wi膮, 偶e wyra偶enie mo偶e by膰 z艂o偶one z dw贸ch wyra偶e艅 po艂膮czonych znakiem dodawania lub mno偶enia. trzecia produkcja m贸wi, 偶e wyra偶enie mo偶e by膰 innym wyra偶eniem uj臋tym w nawiasy. Ostatnia za艣 m贸wi, 偶e pojedynczy argument jest wyra偶eniem.
Stosuj膮c te produkcje wielokrotnie, mo偶emy otrzyma膰 coraz bardziej z艂o偶one wyra偶enia. Dla przyk艂adu:
<wyra偶enie> 鈬 <wyra偶enie> * <wyra偶enie>
鈬 ( <wyra偶enie>) * <wyra偶enie>
鈬 <wyra偶enie> * id
鈬 ( <wyra偶enie> + <wyra偶enie> ) *id
鈬 <wyra偶enie> + id) * id
鈬 (id +id) * id
Symbol 鈬 oznacza tu akt wyprowadzenia, to jest zast臋powania zmiennej praw膮 stron膮 produkcji dla tej zmiennej.
Formalnie gramatyk臋 bezkontekstow膮 definiujemy jako:
G=<V, T, P,S>
gdzie:
V i T- odpowiednio sko艅czone zbiory zmiennych i symboli ko艅cowych,
P - jest sko艅czonym zbiorem produkcji (ka偶da produkcja ma posta膰 A->伪, gdzie A jest zmienn膮, a 伪 jest 艂a艅cuchem symboli z (V鈭猅)* ),
S- jest specjaln膮 zmienn膮, zwan膮 symbolem pocz膮tkowych.
Dla zdefiniowania j臋zyka generowanego przez gramatyk臋 G=<V, T, P, S> wprowad藕my notacj臋 do reprezentowania wyprowadze艅. Najpierw definiujemy dwie relacje: 鈬 i 鈬
pomi臋dzy 艂a艅cuchami z (V鈭猅)*. Je艣li A 尾 jest produkcj膮 z P, a 伪 i 纬 s膮 dowolnymi 艂a艅cuchami z (V鈭猅)*, to 伪A纬 鈬 伪尾纬.
M贸wimy, 偶e produkcja A 尾 zastosowana do 艂a艅cucha 伪A纬 daje w wyniku 伪尾纬, lub 偶e 伪尾纬 jest bezpo艣rednio wyprowadzalny z 伪A纬 w gramatyce G. Dwa 艂a艅cuchy s膮 zwi膮zane relacja 鈬 dok艂adnie wtedy, gdy drugi z nich mo偶na otrzyma膰, z pierwszego poprzez zastosowanie jakiej艣 produkcji.
Przypu艣膰my, 偶e 伪1 ,伪2, .....伪m s膮 艂a艅cuchami z (V鈭猅)*, , m 鈮 1, oraz
伪1鈬 伪2, 伪2 鈬 伪3, .....伪m-1鈬捨m
wtedy piszemy:
伪1 鈬 伪m
i m贸wimy, 偶e 伪m jest wyprowadzalny z 伪1 w gramatyce G.
J臋zyk generowany przez gramatyk臋 G to L(G) = {w|w nale偶y do T* i S 鈬 w}.
A zatem 艂a艅cuch w nale偶y do L(G), je艣li spe艂nione s膮 dwa nast臋puj膮ce warunki:
1. w sk艂ada si臋 wy艂膮cznie z symboli ko艅cowych.
2. w jest wyprowadzalny z S.
J臋zyk L nazywamy j臋zykiem bezkontekstowych (JBK), je艣li jest on to偶samy z L(G) dla pewnej gramatyki G. 艁a艅cuch 伪 z艂o偶ony z symboli ko艅cowych i zmiennych nazywamy form膮 zdaniow膮 je艣li S鈬捨. m贸wimy, 偶e gramatyki G1 i G2 s膮 r贸wnowa偶ne, je偶eli: L(G1) = (G2)
Przyk艂ad 11:
Mamy gramatyk臋 G=<V,T,P,S>, gdzie V={S}, T={a,b}, i P={S aSb, S ab}. Jedyn膮 zmienn膮 jest tu S, a i b s膮 symbolami ko艅cowymi. Istniej膮 dwie produkcje S aSb, S ab. Stosuj膮c pierwsz膮 z nich n-1 razy, a nast臋pnie jeden raz drug膮 otrzymujemy:
S鈬 aSb 鈬 aaSbb 鈬 a3Sb3 鈬...鈬 an-1Sbn-1 鈬 anbn
4.3 Drzewa wyprowadzenia
U偶yteczne jest przedstawienie wyprowadze艅 w postaci drzew (znacznik struktury frazowej). Wierzcho艂ki drzewa wyprowadzenia (lub rozk艂adu) s膮 etykietowane symbolami ko艅cowymi lub zmiennymi gramatyki, ewentualnie symbolem 蔚. Je艣li wierzcho艂ek wewn臋trzny n jest opatrzony etykiet膮 A, a synowie n s膮 opatrzeni etykietami X1,X2...,Xk w kolejno艣ci od lewej do prawej, to A X1X2...Xk musi by膰 produkcj膮 rozpatrywanej gramatyki. Rysunek 24 pokazuje drzewo wyprowadzenia dla przytoczonych wcze艣niej regu艂:
1. <wyra偶enie> <wyra偶enie> + <wyra偶enie>
2. <wyra偶enie> <wyra偶enie> * <wyra偶enie>
3. <wyra偶enie> (<wyra偶enie>)
4. <wyra偶enie> id
< wyra偶enie>
< wyra偶enie> * < wyra偶enie>
( < wyra偶enie> ) id
< wyra偶enie> + < wyra偶enie>
id id
Rys.24. Drzewo wyprowadzenia
Bardziej formalnie, niech G= (V,T,P,S ) b臋dzie gramatyk膮 bezkontekstow膮. Drzewo D jest drzewem wyprowadzenia (lub rozk艂adu) dla G, je艣li:
ka偶dy wierzcho艂ek drzewa D ma etykiet臋, b臋d膮c膮 symbolem z V 鈭 T鈭 {蔚},
etykiet膮 wierzcho艂ka drzewa D jest S,
je艣li wierzcho艂ek wewn臋trzny drzewa S jest opatrzony etykiet膮 A, to A musi nale偶e膰 do V,
je偶eli wierzcho艂ek n drzewa D ma etykiet臋 A, a wierzcho艂ki n1,n2.....nk s膮 synami wierzcho艂ka n uszeregowanymi od lewej do prawej i opatrzonymi odpowiednio etykietami X1,X2......,Xk to A X1X2......Xk musi by膰 produkcj膮 z P,
je偶eli wierzcho艂ek n drzewa D ma etykiet臋 蔚, to n jest li艣ciem drzewa D oraz jedynym synem swego ojca.
Przyk艂ad 12:
Rozpatrzmy gramatyk臋 G=({S,A},{a,b}, {P,S}), gdzie P sk艂ada si臋 z nast臋puj膮cych produkcji:
S aAS | a
A SbA | SS | ba
Wyw贸d dla tej gramatyki S 鈬 aAS 鈬 aSbAS 鈬 aabAS 鈬 aabbaS 鈬 aabbaa, za艣 drzewo wyprowadzenia pokazane zosta艂o na rysunku 25.
S
a A S
S b A a
a b a
Rys.25. Drzewo wyprowadzenia dla przyk艂adu 12
Dwa znaczniki struktury frazowej (drzewa wyprowadze艅) s膮 uwa偶ane za to偶samo艣ciowo r贸wne, je偶eli posiadaj膮 one jednakow膮 struktur臋 ga艂臋zi i jednakowe etykiety przy odpowiednich w臋z艂ach.
Poniewa偶 liczba regu艂 jest sko艅czona, natomiast liczba znacznik贸w mo偶e by膰 niesko艅czona, to mog膮 istnie膰 takie symbole alfabetu pomocniczego, kt贸re powtarzaj膮 si臋 w znacznikach struktury dowoln膮 ilo艣膰 razy. Co wi臋cej, mog膮 istnie膰 takie 艂a艅cuchy drzewa, kt贸re zawieraj膮 pewien symbol wi臋cej ni偶 n razy dla dowolnego z g贸ry ustalonego n.
Element syntaktyczny nazywa si臋 elementem rekursywnym, je偶eli dla pewnego z g贸ry ustalonego n istnieje takie drzewo struktury, kt贸rego 艂a艅cuch zawiera ten symbol jako nazw臋 w臋z艂a wi臋cej ni偶 n razy. Wyodr臋bnia si臋 trzy rodzaje element贸w rekursywnych:
element A nazywa si臋 leworekursywnym, je偶eli podporz膮dkowane jemu drzewo zawiera A tylko w 艂a艅cuchu wysuni臋tym najbardziej w lewo,
element A nazywa si臋 praworekursywnym, je偶eli podporz膮dkowane mu drzewo zawiera A tylko w 艂a艅cuchu wysuni臋tym najbardziej w prawo,
element A nazywa si臋 samozanurzaj膮cym, je偶eli podporz膮dkowane mu drzewo zawiera A w pewnym 艂a艅cuchu wewn臋trznym.
a) A b) A c) A
B C B C B C
A A A
Rys.26. elementy rekursywne: a) leworekursywny, b) samozanurzaj膮cy
c) praworekursywny
Teoria gramatyk formalnych, stanowi bardzo rozleg艂膮 dziedzin臋 wiedzy, tote偶 w niniejszym rozdziale zosta艂a przedstawiona gramatyka bezkontekstowa maj膮ca najszersze zastosowanie w informatyce.
V. OPIS PROGRAM脫W
Rozdzia艂 V jest opisem program贸w ilustruj膮cych zagadnienia om贸wione w cz臋艣ci teoretycznej. Zosta艂y one napisane przy u偶yciu j臋zyka programowania C++ w wersji 4.0 z wykorzystaniem biblioteki OWL. Jedynym wymogiem dla uruchomienia program贸w jest 艣rodowisko graficzne WINDOWS (pocz膮wszy od wersji 3.0). Wersje 藕r贸d艂owe program贸w s膮 do艂膮czone do niniejszej pracy i mog膮 by膰 w pe艂ni wykorzystywane przez osoby kontynuuj膮ce prac臋: „Pakiet program贸w edukacyjnych z zakresy przedmiotu wprowadzenie do informatyki”.
5.1. ONP
Program ONP jest ilustracj膮 graficzn膮 do rozdzia艂u pierwszego: „Zasady automatycznej translacji”. Menu programu zosta艂o podzielone na trzy cz臋艣ci:
Zadania- opcja pozwala na wybranie jednego z pi臋ciu zada艅 do procesu translacji bez mo偶liwo艣ci definiowana w艂asnych zada艅,
Praktyka- opcja pozwalaj膮ca wpisanie w艂asnych zada艅 do procesu translacji,
Teoria-opcja pozwalaj膮ca na zapoznanie si臋 z podstawowymi wiadomo艣ciami teoretycznymi,
Menu g艂贸wne programu ONP
Po wybraniu opcji zadania, mamy mo偶liwo艣膰 wybrania jednego z pi臋ciu przyk艂adowych zada艅 obrazuj膮cych proces translacji. Dodatkowo wybieramy stopie艅 translacji:
Do ONP- przedstawia proces translacji wyra偶e艅 arytmetycznych do postaci ONP,
ONP j臋zyk symboliczny - przedstawia proces translacji z ONP na j臋zyk symboliczny.
Po wybraniu opcji do ONP uka偶e si臋 nam nast臋puj膮ce okienko dialogowe:
Przycisk KROK pozwala 艣ledzi膰 poszczeg贸lne takty translacji, natomiast przycisk WYJ艢CIE ko艅czy analiz臋 danego zadania. W polu komentarz na bie偶膮co jest komentowany ka偶dy krok procesu translacji, a pola WEJ艢CIE, STOS, WYJ艢CIE odzwierciedlaj膮 aktualny stan rozpatrywanego zadania. Zadania zosta艂y tak dobrane aby u偶ytkownik mia艂 mo偶liwo艣膰 pozna膰 wszystkie aspekty procesu translacji wyra偶e艅 do postaci ONP.
Po wybraniu opcji ONP j.symboliczny uka偶e si臋 nam nast臋puj膮ce okienko dialogowe:
Przyciski KROK i WYJ艢CIE maj膮 takie samo znaczenie jak poprzednio, natomiast przycisk ALGORYTM wy艣wietla algorytm translacji na drodze ONP j臋zyk symboliczny. Program zosta艂 tak skonstruowany, 偶e je偶eli wybrano zadanie n do procesu translacji to automatycznie jest wypisywane w okienku wyra偶enie w ONP odpowiednio przekszta艂cone wyra偶enie arytmetyczne z pierwszej fazy translacji.
Opcja teoria uruchamia plik pomocy do WINDOWS wdihelp.hlp, kt贸ry jest wsp贸lny dla wszystkich program贸w. Przyk艂adowe okienko dla ONP pokazane zosta艂o poni偶ej:
5.2. AS
Program AS jest programem edukacyjnym do rozdzia艂u drugiego : „Automat sko艅czony”. Menu programu zosta艂o podzielone na trzy cz臋艣ci:
Wyra偶enia regularne- opcja pozwala na wybranie zada艅 zwi膮zanych z wyra偶eniami regularnymi.
Automaty- opcja pozwalaj膮ca na wybranie zada艅 zwi膮zanych z automatami sko艅czonymi,
Teoria-opcja pozwalaj膮ca na zapoznanie si臋 z podstawowymi wiadomo艣ciami teoretycznymi,
Po wybraniu opcji wyra偶enia regularne uka偶e si臋 nast臋puj膮ce okienko dialogowe:
Pierwsze trzy zadania s膮 oparte na tej samej zasadzie to znaczy dla podanego ci膮gu wej艣ciowego nale偶y wskaza膰 odpowiadaj膮ce temu ci膮gowi wyra偶enie regularne.
Dwa nast臋pne zadania polegaj膮 na wpisaniu odpowiedniego ci膮gu znakowego dla wybranego wyra偶enia regularnego co przedstawia poni偶szy rysunek :
Po wybraniu opcji automaty u偶ytkownik spotka si臋 z przyk艂adowym okienkiem dialogowym w kt贸rym nale偶y poda膰 odpowiedni ci膮g celem zobrazowania dalszej pracy automatu sko艅czonego.
Przycisk KROK powoduje wczytanie podanego ci膮gu, a zarazem krokowo przedstawia przej艣cia automatu sko艅czonego pomi臋dzy stanami. Dodatkowo po ka偶dym wczytaniu ci膮gu jest sprawdzana poprawno艣膰 zadania to znaczy, 偶e w przypadku analizy cyfr nie mog膮 zosta膰 wpisane inne znaki i u偶ytkownik mo偶e spotka膰 si臋 z komunikatem o b艂臋dnym wprowadzeniu zadania. Przycisk WYJ艢CIE podobnie jak to ma miejsce we wszystkich innych programach powoduje opuszczenie analizy przej艣膰 automatu sko艅czonego.
Po wczytaniu zadania w kolejnym okienku dialogowym zostanie wyrysowany konkretny automat sko艅czony.
Aktywny stan w jakim si臋 znajduje automat sko艅czony jest zaznaczany kolorem czerwonym, za艣 stany nieaktywne kolorem bia艂ym. Dodatkowo u do艂u ekranu jest wypisywany aktualnie analizowany symbol i aktywny w danej chwili stan automatu.
5.3. MT
Program MT jest programem edukacyjnym do rozdzia艂u trzeciego : „Maszyna Turinga”. Menu programu zosta艂o podzielone na dwie cz臋艣ci:
Zadania- opcja pozwala na wybranie jednego z pi臋ciu zada艅 zwi膮zanych z maszyn膮 Turinga,
Teoria-opcja pozwalaj膮ca na zapoznanie si臋 z podstawowymi wiadomo艣ciami teoretycznymi,
Po wybraniu opcji zadania i wyborze konkretnego zadania u偶ytkownik powinien wpisa膰 odpowiedni ci膮g do dalszej analizy zadania.
Przycisk KROK pozwala na krokow膮 analiz臋 dzia艂ania wybranej maszyny Turinga, za艣 przycisk AUTOMAT w odst臋pach sekundowych symuluje prac臋 maszyny Turinga. Analogicznie jak w pozosta艂ych programach przycisk WYJ艢膯IE ko艅czy prac臋 z wybran膮 maszyn膮 Turinga.
Po wybraniu konkretnego zadania i wpisaniu s艂owa pocz膮tkowego u偶ytkownik mo偶e spotka膰 si臋 z jednym z nast臋puj膮cych okien dialogowych:
Konstrukcja tego okienka w cz臋艣ci pierwszej pokazuje tabel臋 przej艣膰 mi臋dzy stanami, za艣 u do艂u okienka symulowana jest ta艣ma, z umieszczonymi na niej symbolami. Analizowany symbol na ta艣mie jest oznaczony znakiem ” ! ” , a w niekt贸rych zadaniach aktywne stany dodatkowo wyr贸偶nione s膮 innym kolorem.
Przyk艂adowe okienka z zadaniami w programie MT
5.4. GR
Program GR jest programem edukacyjnym do rozdzia艂u czwartego : „Gramatyki bezkontekstowe”. Menu programu zosta艂o podzielone na dwie cz臋艣ci:
Test- opcja pozwala na wybranie okienka dialogowego obs艂uguj膮cego test z zakresu gramatyk formalnych,
Teoria-opcja pozwalaj膮ca na zapoznanie si臋 z podstawowymi wiadomo艣ciami teoretycznymi,
Przyk艂adowe ekrany pyta艅 testowych s膮 przedstawione poni偶ej
5.5. Zawarto艣膰 dysku CD-ROM
P艂yta kompaktowa do艂膮czona do pracy posiada nast臋puj膮c膮 struktur臋:
..
PROGRAMY
onp.exe
as.exe programy om贸wione w rozdziale 5
mt.exe
gr.exe
wdihelp.hlp
ZRODLA
ONP
AS pliki 藕r贸d艂owe *.cpp, *.rc, *.h,
MT
GR
HLP
DOC
dyplom.doc dokumentacja bez opisu program贸w - skrypt
dyplom2.doc pe艂ny tekst pracy magisterskiej
Na dyskietce do艂膮czonej do pracy znajduj膮 si臋 cztery programy : onp.exe, as.exe, mt.exe, gr.exe oraz plik pomocy dla Widows wdihelp.hlp.
LITERATURA
1. [A艁FI 77] Zoja A艂fierowa: Teoria algorytm贸w. PWN, Warszawa, 1977.
2. [BANA 96] L. Banachowski, K.Diks, W.Rytter: Algorytmy i struktury danych. WNT, Warszawa, 1996.
3. [GNI艁 89] Marian Gni艂ka, Juliusz Haschka: Istota informatyki. IWZZ, Warszawa 1989.
4. [HARE 92] Dawid Harel: Rzecz o istocie informatyki. WNT, Warszawa, 1992.
5. [HOPC 94] John E. Hopcroft, Jefrey D. Ullman :Wprowadzenie do teorii automat贸w, j臋zyk贸w i oblicze艅. PWN, Warszawa, 1994.
6. [KOZI 94] Stanis艂aw Kozielski: Zbi贸r zada艅 z podstaw informatyki. Politechnika 艢l膮ska-Skrypt uczelniany nr 1842, Gliwice, 1994
7. [MAJC 94] Adam K. Majczak: Praktyczne programowanie w C++. INTERSOFTLAND, Warszawa, 1994.
8. [TURS 77] W艂adys艂aw M.Turski: Propedeutyka informatyki. PWN, Warszawa, 1977.
9. [WR脫B 97] Piotr Wr贸blewski: Programowanie w Windows dla praktyk贸w. Helion, Gliwice, 1997 .
10.[ZALE 95] Andrzej Zalewski: Programowanie w j臋zykach C i C++ z wykorzystaniem pakietu Borland C++. Nakom, Pozna艅 1995.
65