Pakiet program贸w韚kacyjnych z zakresu przedmiotu wprowadzenie do informatyki


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.

0x08 graphic
0x08 graphic
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:

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膮.:

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
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:

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 opi+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 opi-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

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
algorytm programowanie program w j臋zyku

wysokiego poziomu

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
kod maszynowy program w j臋zyku kompilacja

0x08 graphic
asemblerowym

0x08 graphic

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:

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
start q0 q1 q4

0x08 graphic
0x08 graphic

0x08 graphic
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.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
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.

0x08 graphic

0x08 graphic
start q0

Rys. 8

0x08 graphic

{0,2,4,6,8} q1

0x08 graphic
0x08 graphic

0x08 graphic
start q0

0x08 graphic
0x08 graphic

{1,3,5,7,9} q2

Rys. 9

0x08 graphic
{0,2,4,6,8}

0x08 graphic
0x08 graphic
0x08 graphic
A

{0,2,4,6,8} q1

0x08 graphic
0x08 graphic

0x08 graphic
start q0

0x08 graphic
0x08 graphic

{1,3,5,7,9} q2

Rys. 10

0x08 graphic
{0,2,4,6,8}

0x08 graphic
0x08 graphic
0x08 graphic
A

0x08 graphic
{0,2,4,6,8} q1

0x08 graphic

0x08 graphic
start q0

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
{1,3,5,7,9} q2

N

{1,3,5,7,9}

Rys.11

0x08 graphic
{0,2,4,6,8}

0x08 graphic
0x08 graphic
0x08 graphic
A

{0,2,4,6,8} q1

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
start q0 { 1,3,5,7,9} { 0, 2,4,6,8}

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
{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}

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
q1 N

0x08 graphic
0x08 graphic
0x08 graphic

{1,4,7}

0x08 graphic
{0,3,6,9}

0x08 graphic
{2,5,8}

0x08 graphic
qo {1,4,7} {2,5,8}

0x08 graphic
0x08 graphic
0x08 graphic
Start {2,5,8}

0x08 graphic

0x08 graphic
0x08 graphic
A {1,4,7} 蠁

0x08 graphic
0x08 graphic
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:

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:

0x08 graphic
0x08 graphic
0x08 graphic
1 1

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0 0 0 0

0x08 graphic
0x08 graphic
0x08 graphic
start q0 q3 q4

0x08 graphic

0x08 graphic
1

q1

0x08 graphic

0x08 graphic
1

0x08 graphic
0x08 graphic
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 }

0x08 graphic
{ dowolny symbol }

0x08 graphic
0x08 graphic
0x08 graphic
{ w tym a i b } b c

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q1 q2 q3

0x08 graphic
a

0x08 graphic
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 蔚:

0x08 graphic
0x08 graphic
0x08 graphic
0 1 2

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
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:

0x08 graphic
0x08 graphic

L* = Li,

i = 0

a domkni臋ciem dodatnim L, oznaczanym symbolem L+, zbi贸r

0x08 graphic
0x08 graphic

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:

Dla przyk艂adu:

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:

konstruktor dla sumy teoriomnogo艣ciowej r= r1+r2

0x08 graphic

0x08 graphic
0x08 graphic
q1 M1 f1

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
蔚 蔚

0x08 graphic
0x08 graphic
start qo fo

0x08 graphic
0x08 graphic

蔚 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

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
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*

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
蔚 蔚

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
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:

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
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:

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
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:

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
start q5 1 q6

Wykorzystuj膮 przedstawione konstruktory zaczniemy kre艣lenie automatu dla wyra偶enia r4 = 1* ( konstruktor domkni臋cia)

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
蔚 蔚

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
start q7 q5 1 q6 q8 rys. a

0x08 graphic
0x08 graphic

nast臋pnie dla r1 =r3r4 (r= 01*) wykorzystujemy konstruktor z艂o偶enia dok艂adaj膮c do rys. a nast臋puj膮c膮 konstrukcj臋:

0x08 graphic
0x08 graphic
0x08 graphic
0 蔚

0x08 graphic
0x08 graphic
0x08 graphic
start q3 q4 rys. a

Teraz tworzymy konstrukcj臋 dla wyra偶enia r= r1 + r2 (r=01*+1) wykorzystuj膮c konstruktor sumy teoriomnogo艣ciowej.

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
start q1 1 q2

0x08 graphic
0x08 graphic
蔚 蔚

0x08 graphic
q9 q10

0x08 graphic
蔚 蔚

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0 蔚 蔚 蔚 蔚

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
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.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
a1 a2 ... ai ... an B B ...

0x08 graphic
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:

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,

FQ - 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膮:

0x08 graphic

(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.

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
start q1 # / #, L q4

a / #, P

0x08 graphic
0x08 graphic

0x08 graphic
qo # / #, L q2

0x08 graphic

0x08 graphic
b / #, P

0x08 graphic
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:

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q0 q1 q2 q3

0x08 graphic
q0 q2 q3 q5

蠁 P a P c L

0x08 graphic
a q1 q2 q4

b L c P a L

0x08 graphic
b q5 q0 q5

蠁 P c L 蠁

0x08 graphic
c q7 q2

0x08 graphic
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

0x08 graphic
0x08 graphic
q0

蠁 q0 je偶eli b臋d膮c w stanie q0 odczytanym

0x08 graphic
0x08 graphic
蠁, P symbolem b臋dzie 蠁 to pozostajemy

0x08 graphic
a nadal w tym stanie i wykonujemy

0x08 graphic
b ruch o jedno pole w prawo.

0x08 graphic
0x08 graphic
q0

蠁 q0 je偶eli b臋d膮c w stanie q0 odczytanym symbolem b臋dzie a

0x08 graphic
蠁, P to wpisujemy w jego miejsce 蠁 i przechodzimy w prawo

0x08 graphic
a q1 do stanu q1.

0x08 graphic
蠁, 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

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q0 q1 q2 q3 q4 q5 q6

蠁 q0 q2 q3 q4 q5 q15 q0

0x08 graphic
蠁, P 蠁, P a, P a, L 蠁, L 蠁, P 蠁, P

a q1 q1 q2 q15 q4 q6 q6

0x08 graphic
蠁, 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.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13

0x08 graphic
蠁 q0 q2 q3 q4 q5 q13 q0 q8 q9 q10 q11 q13 q0

0x08 graphic
蠁, 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

0x08 graphic
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

0x08 graphic

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 蠁 蠁 蠁 蠁 .....

0x08 graphic

蠁 蠁 蠁 a b 蠁 蠁 蠁 .... / pozostajemy w stanie q0 i przechodzimy w prawo

0x08 graphic

蠁 蠁 蠁 蠁 b 蠁 蠁 蠁 .. / napotkali艣my a, wpisujemy 蠁 i przechodzimy w prawo do stanu q1

0x08 graphic

蠁 蠁 蠁 蠁 b 蠁 蠁 蠁 .. / pozostajemy nadal w stanie q1 a偶 dojdziemy do pierwszego znaku 蠁

0x08 graphic

蠁 蠁 蠁 蠁 b 蠁 蠁 蠁.../ po napotkaniu pierwszego 蠁 przechodzimy w prawo do stanu q2

0x08 graphic

蠁 蠁 蠁 蠁 b 蠁 a 蠁 蠁.../ po napotkaniu 蠁 wpisujemy a i przechodzimy do stanu q3

0x08 graphic

蠁 蠁 蠁 蠁 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:

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.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q0 q1 q2

0x08 graphic
0x08 graphic
0x08 graphic
蠁 q0 q2 K q2

0x08 graphic
0x08 graphic
0x08 graphic
蠁, L 1, L 0/1, L

0x08 graphic
0x08 graphic
0 q2 q2 K start q0 蠁 /1 L 0 / 1, L

0x08 graphic
0x08 graphic
1, L 1, L

0x08 graphic
1 q1 q1 K 1/0, L

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0, L 0, L q1

0x08 graphic
0x08 graphic

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.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11

0x08 graphic
蠁 q0 q2 q10 q0 q5 q10 q0 q8 q10 q0

蠁, P 蠁, L 蠁 , P 蠁, P 蠁, L 蠁, P 蠁, P 蠁, L 蠁, P 蠁, P SA SN

0x08 graphic
a q1 q1 q3 q3 q4 q11 q6 q7 q11 q9

0x08 graphic
蠁, 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

0x08 graphic
c q7 q1 q11 q3 q4 q11 q6 q7 q9 q9

0x08 graphic
蠁, 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.

0x08 graphic

0x08 graphic
Problemy wcale nie

problemy maj膮ce algorytm贸w

nierozstrzygalne

0x08 graphic
0x08 graphic
0x08 graphic
teza Churcha-Turinga

0x08 graphic
problemy trudno Problemy nie maj膮ce

rozwi膮zywalne rozs膮dnych algorytm贸w

0x08 graphic

0x08 graphic
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:

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:

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:

0x08 graphic
<zdanie> <fraza rzeczownikowa> <fraza czasownikowa>

0x08 graphic
<fraza rzeczownikowa> <przymiotnik > <fraza rzeczownikowa>

0x08 graphic
<fraza rzeczownikowa> <rzeczownik>

0x08 graphic
<rzeczownik> ch艂opiec

0x08 graphic
<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:

0x08 graphic
1. <wyra偶enie> <wyra偶enie> + <wyra偶enie>

0x08 graphic
2. <wyra偶enie> <wyra偶enie> * <wyra偶enie>

0x08 graphic
3. <wyra偶enie> (<wyra偶enie>)

0x08 graphic
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 鈬

0x08 graphic
pomi臋dzy 艂a艅cuchami z (V鈭猅)*. Je艣li A 尾 jest produkcj膮 z P, a 伪 i 纬 s膮 dowolnymi 艂a艅cuchami z (V鈭猅)*, to 伪A纬 鈬 伪尾纬.

0x08 graphic

0x08 graphic
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:

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
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

0x08 graphic
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艂:

0x08 graphic
1. <wyra偶enie> <wyra偶enie> + <wyra偶enie>

0x08 graphic
2. <wyra偶enie> <wyra偶enie> * <wyra偶enie>

0x08 graphic
3. <wyra偶enie> (<wyra偶enie>)

0x08 graphic
4. <wyra偶enie> id

0x08 graphic
0x08 graphic
0x08 graphic
< wyra偶enie>

0x08 graphic
0x08 graphic
< wyra偶enie> * < wyra偶enie>

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
( < wyra偶enie> ) id

0x08 graphic

< wyra偶enie> + < wyra偶enie>

0x08 graphic
0x08 graphic

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:

Przyk艂ad 12:

Rozpatrzmy gramatyk臋 G=({S,A},{a,b}, {P,S}), gdzie P sk艂ada si臋 z nast臋puj膮cych produkcji:

0x08 graphic
S aAS | a

0x08 graphic
A SbA | SS | ba

Wyw贸d dla tej gramatyki S 鈬 aAS 鈬 aSbAS 鈬 aabAS 鈬 aabbaS 鈬 aabbaa, za艣 drzewo wyprowadzenia pokazane zosta艂o na rysunku 25.

0x08 graphic
0x08 graphic
S

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
a A S

0x08 graphic
0x08 graphic
0x08 graphic
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:

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
a) A b) A c) A

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
B C B C B C

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
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:

0x08 graphic
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:

Po wybraniu opcji do ONP uka偶e si臋 nam nast臋puj膮ce okienko dialogowe:

0x08 graphic

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.

0x08 graphic
Po wybraniu opcji ONP j.symboliczny uka偶e si臋 nam nast臋puj膮ce okienko dialogowe:

0x08 graphic

0x08 graphic
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:

0x08 graphic

5.2. AS

Program AS jest programem edukacyjnym do rozdzia艂u drugiego : „Automat sko艅czony”. Menu programu zosta艂o podzielone na trzy cz臋艣ci:

0x08 graphic
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 :

0x08 graphic

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.

0x08 graphic

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.

0x08 graphic

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:

Po wybraniu opcji zadania i wyborze konkretnego zadania u偶ytkownik powinien wpisa膰 odpowiedni ci膮g do dalszej analizy zadania.

0x08 graphic

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:

0x08 graphic

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

0x08 graphic
0x08 graphic

5.4. GR

Program GR jest programem edukacyjnym do rozdzia艂u czwartego : „Gramatyki bezkontekstowe”. Menu programu zosta艂o podzielone na dwie cz臋艣ci:

Przyk艂adowe ekrany pyta艅 testowych s膮 przedstawione poni偶ej

0x08 graphic

0x08 graphic

5.5. Zawarto艣膰 dysku CD-ROM

P艂yta kompaktowa do艂膮czona do pracy posiada nast臋puj膮c膮 struktur臋:

..

0x08 graphic
0x08 graphic
0x08 graphic
PROGRAMY

0x08 graphic
0x08 graphic
onp.exe

0x08 graphic
as.exe programy om贸wione w rozdziale 5

0x08 graphic
mt.exe

0x08 graphic
gr.exe

0x08 graphic
wdihelp.hlp

0x08 graphic
0x08 graphic
ZRODLA

0x08 graphic
ONP

0x08 graphic
AS pliki 藕r贸d艂owe *.cpp, *.rc, *.h,

0x08 graphic
MT

0x08 graphic
GR

0x08 graphic
HLP

0x08 graphic
0x08 graphic
DOC

0x08 graphic
dyplom.doc dokumentacja bez opisu program贸w - skrypt

0x08 graphic
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



Wyszukiwarka

Podobne podstrony:
W jaki spos贸b tre艣ci programowe zawarte w przedmiocie wprowadzenie do psychologii wykorzystam w swoj
Egzamin z przedmiotu- wprowadzeni do pedagogiki sciagi, Edukacjaprzedszkolna i wczesnoszkolna, Pedag
Zagadnienia na zaliczenie, Wprowadzenie do informatyki
Informatyka Wprowadzenie Do Informatyki Ver 0 95
Podstawowy zestaw pyta艅 z przedmiotu Wprowadzenie do?zy?nych
Wprowadzenie do informatyki
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela 2
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela wpinpo
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela wpinpo 2
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela wpinpo
wprowadzenie do informatyki poradnik dla ucznia i nauczyciela
Wprowadzenie do informatyki wprinf 2
Wprowadzenie do informatyki 2
Wprowadzenie do informatyki wprinf
ebook Andrzej Kisielewicz Wprowadzenie do informatyki
Wprowadzenie do informatyki wprinf
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela
Wprowadzenie do informatyki Poradnik dla ucznia i nauczyciela wpinpo

wi臋cej podobnych podstron