1ognjen/programski prevodioci... · web viewsintaksna analiza 5.1 namena sintaksnog analizatora...

23
5. Sintaksna analiza 5.1 Namena sintaksnog analizatora Sintaksni analizator prima niz tokena od leksičkog analizatora i proverava da li taj niz pripada jeziku koji je opisan zadatom gramatikom. Cilj sintaksnog analizatora je da generiše sintaksno stablo za ulazni niz tokena. Levo i desno izvođenje Da bi se generisalo sintaksno stablo potrebno je odrediti koja se pravila i u kom redosledu primenjuju prilikom preslikavanja startnog simbola u analizirani niz. Generalno gledano postoje dva osnovna principa po kojima se određuje redosled pravila. Kako se za opis jezika obično koriste beskonteksne gramatike onda se u svakom koraku izvođenja jedan neterminalni simbol preslikava u neku reč pa redosled primene pravila može da bude: 1 sleva u desno – kada se zamenjuje prvi neterminalni simbol sa leve strane 2 sa desma na levo – kada se zamenjuje prvi 71

Upload: others

Post on 26-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

1

5. Sintaksna analiza

5.1 Namena sintaksnog analizatora

Sintaksni analizator prima niz tokena od leksičkog analizatora i proverava da li taj niz pripada jeziku koji je opisan zadatom gramatikom. Cilj sintaksnog analizatora je da generiše sintaksno stablo za ulazni niz tokena.

Levo i desno izvođenje

Da bi se generisalo sintaksno stablo potrebno je odrediti koja se pravila i u kom redosledu primenjuju prilikom preslikavanja startnog simbola u analizirani niz. Generalno gledano postoje dva osnovna principa po kojima se određuje redosled pravila. Kako se za opis jezika obično koriste beskonteksne gramatike onda se u svakom koraku izvođenja jedan neterminalni simbol preslikava u neku reč pa redosled primene pravila može da bude:

1 sleva u desno – kada se zamenjuje prvi neterminalni simbol sa leve strane

2 sa desma na levo – kada se zamenjuje prvi neterminalni simbil sa desne strane.

Sledeći primer ilustruje ova dva principa izvođenja:

Primer 5.1 Levo i desno izvođenje

Neka je data gramatika

gde je P sledeći skup pravila :

Razmotrićemo generisanje reči: b11

Levo izvođenje reči daje:

Desnim izvođenjem dobija se:

Na Slici 5.1prestavljeno je sintaksno stablo koje odgovara jednom i drugom izvođenju.

Slika 5.1 Sintaksno stablo za reč b11

Sintaksno stablo koje se dobija jednim ili drugim postupkom izvođenja mora da bude jednoznačno definisano. Sintaksno stablo je osnova za generisanje objektnog koda, tako da bi dobijanje različitog stabla značilo da se za isti ulazni kod dobija različiti skup asemblerskih naredbi, odnosno kod bi bio višeznačno definisan što je nedopustivo. Sledeći primer to ilustuje.

Primer 5.2 Nejednosznačno definisane gramatike

Data je gramatika G=({,}, {+, *}, , P} gde je

P:

Posmatramo izvođenje reči: * +

Levo izvođenje za ovu reč je:

Sintaksno stablo koje odgovara ovom izvođenju dato je na Slici 5.2. U ovom slučaju bi najpre bila generisana naredba sabiranja a zatim množenja. (Pri generisanju naredbi se prolazi kroz sintaksno stablo odozdo naviše.)

Slika 5.2

Desno izvođenje za posmetrani niz daje:

Ovom izvođenju odgovara sintaksno stablo prikazano na Slici 5.3. U ovom slučaju prvo bi bila generisana naredba množenja, a zatim naredba sabiranja.

Slika 5.3

Očigledno je da ova gramatika za posmatranu reč, primenom levog i desnog izvođenja daje različita sintaksna stabla. Što znači da rezultat analize nije jednoznačno definisan, pa bi se generisao različit skup naredbi zavisno od toga koje se izvođenje primenjuje.

Kako bi se izbegla ova višeznačnost potrebno je bolje definisati gramatiku. Na primer sledeća gramatika je ekvivalentna gore datoj, a pri tome je i jednoznačna.

G = ({,, , }, {+, *}, , P)

P:

Za posmatranu reč sada se dobija sledeće levo izvođenje:

Desno izvođenje za istu reč bi bilo:

Oba ova izvođenja generišu isto sintaksno stablo prikazano na slici 5.4.

Slika 5.4

U odnosu na to kako obavljaju sintaksnu analizu postoje dva tipa sintaksnih analizatora:

· Top-down analizatori koji vrše analizu odozgo naniže i

· Bottom-up analizatori koji vrše analizu odozdo naviše.

U slučaju Top-down analize polazi se od startnog simbola i nastoji se da se odrede pravila koja treba primeniti da bi se generisala reč čija se analiza vrši. To znači da se pravila otkrivaju u redosledu u kom se i primenjuju prilikom generisanja reči, odnosno odozgo naniže ako se to posmatra na sintaksnom stablu.

U slučaju Bottom-up analize preimenjuje se postupak redukcije. Kreće se od reči čija se analiza vrši i nastoji se da se ta reč redukuje na startni simbol. Pravila se određuju u redosledu koji je suproten redosledu njihove primene kod generisanja reči i sintaksnog stabla, odnosno odozdo naviđe ako se to gleda na sintaksnom stablu.

U principu Bottom-up analizatori su efikasniji i na njima se uglavnom zasnivaju komercijalna rešenja kompilatora.

Postoje veoma efikasni algoritmi za sintaksnu analizu i u jednoj i u drugoj klasi i mi ćemo proučiti neke od njih. Kako bi uočili razliku u pristupu analizi najpre ćemo objsniti osnovne algoritme za analizu iz obe ove klase analizatora.

5.2 Osnovni algoritam za Top down sintaksnu analizu

Kreće se od startnog simbola i bira se jedno pravilo kojim se startni simbol preslikava u neku frazu. Posle toga u svakom koraku se nastoji da se prvi neterminalni simbol sa leve strane zameni desnom stranom odgovarajućeg pravila. Praktično nastoji se da se generiše analizirani niz levim izvođenjem. Ukoliko na nekom koraku ne postoji odgovarajuća smena vraćamo se natrag do nivoa na kome je moguće primeniti neku novu alternativu. Analiza je uspešna ako se kao rezultat ovog postupka dobije niz koji se analizira. Ako na nekom nivou nema novih alternativa analiza je neuspešna.

Prilikom implementacije ovog algoritma obično se koriste dva pokazivača, Pulaz koji pokazuje na znak u ulaznom nizu koje se, u određenom trenutku, prepoznaje i Pradni koji pokazuje na tekući znak u nizu koji se izvodi.

prilikom analize se obizno koristi neki specijalni znak kao završni, granični znak niza. U našem slučaju će to biti simbol #.

Formalno algoritam se može formulisati na sledeći način:

1. U izvedenu sekvencu upisati niz S#, gde je S startni simbol, a # granični. Postaviti Pradni na prvi znak u izvedenom nizu (na statni simbol) a pokazivač Pulaz na prvi simbol ulaznog niza.

2. Ukoliko je slovo na koje pokazuje Pradni u izvedenoj sekvenci neterminalni simbol, zameniti ga desnom stranom prve smene na čijoj je levoj strani taj neterminalni simbol i postaviti Pradni na prvi simbol unete reči.

3. Ukoliko je tekuci simbol na koji pokazuje Pradni u izvedenoj sekvenci terminalni simbol i ukoliko je on jednak ulaznom simbolu na koji pokazuje Pulaz taj simbol se prihvata, oba pokazivača se pomeraju za jedno mesto udesno i postupak se nastavlja (prelazi se na analizu sledećeg slova).

4. Ukoliko je tekuci simbol u izvedenoj sekvenci terminalni simbol i različit od tekućeg ulaznog simbola, poništiti dejstvo poslednje primenjene smene. Vratiti se na stanje pre primene te smene i pokušati na tom nivou sa primenom nove smene. Ukoliko na tom nivou nema alternativa vratiti se nazad.. Poništiti poslednju primenjenu smenu, vratiti se na stanje pre primene te smene i pokušati sa novom alternativom na tom nivou.

5. Ukoliko se vraćanjem dodje do startnog simbola i ne postoji više smena za njegovo preslikavanje, ulazni kod sadrži sintaksnu grešku.

6. Postupak analize je uspešan kada se oba pokazivača (Pulaz i Pradni) nađu na graničnom simbolu.

Primer 5.3Osnovni algoritam za Top-down analizu

Neka je data gramatika

Primenu algoritma pokazaćemo na primeru reči a c c d #

Ulazni niz Izvedeni niz Akcija

1. a c c d #S#(1)

2. a c c d #a A d #Prepoznaje se a

3. a c c da A d #(3)

4. a c c da b d #Greška vraćanje unatrag

5.a c c da A d #(4)

6. a c c da c d #Prepoznaje se c

7. a c c da c d #Greška vraćanje unatrag.

8. a c c da A d # Nema novih pravila vraćanje unatrag

9.a c c d #S #(2).

10a c c d #a B #Prepoznaje se a

11a c c d #a B #(5)

12a c c d #a c c d #Prepoznaje se c

13. a c c d #a c c d #Prepoznaje se c

14.a c c d #a c c d #Prepoznaje se d

15. a c c d #a c c d #Uspešan kraj analize

Napomena: Posebno su oznalena slova na koja pokazuju ulazni i radni pokazivač, koja se posmatraju u određenom koraku.

Za generisanje reči a c c d #, potrebno je primenti smene 2 i 5. Na slici 5.5 prikazano je sintaksno stablo za analiziranu reć-

Slika 5.5

Problem leve rekurzije

Top-down sintaksnom analizom se generiše skup smena čiji redosled primene odgovara levom izvođenju. Zbog toga ovaj postupak analze ne može da se primeni kod tz. levo rekurzivnih gramatika. Levo rekurzivne gramatike su gramtike kod kojih postoje levo rekurzivna pravila, odnosno pravila oblika:

AAr, gde je AVn, a r V*

Kod ovakvih pravila preslikavanjem neterminala A dobija se reč koja opet počinje istim neterminalom, i to se iz koraka u korak ponavlja, odnosno ulazi se u jednu beskonačnu petlju, tako da analzu nije moguće završiti.

Primer 5.4 Levo rekurzivna gramatika

Neka je data gramatika G=({S, A}, {a, c}, S, P) gde je P slede’i skup smena:

Ova gramatika će u postuprku sintaksne analize uvek ući u petlju prikazanu na Slici 5.6.

Slika 5.6

Pored ove direktne rekurzije gramatika može da ima i indirektna rekurzivan pravila koja je teško otkriti.

Primer 5.5 Levo rekurzivna gramatika sa indirektnim rekurzivnim pravilima

Sledeći skup pravila sadrži rekurziju po dubini:

Neterminal S generiše neterminal A, a ovaj opet neterminal S. Sa druge strane i pravilo AAc je takođe rekurzivno.

Eliminisanje leve rekurzije

Svaku levu rekurzivnu gramatiku moguće je transformisati u ekvivalentnu nerekurzivnu gramatiku. navešćemo dve mogućnosti za to.

Ako gramatika sadrži skup pravila za isti neterminalni simbol, među kojima su neka levo rekurzivna, a neka ne:

Ovaj skup pravila moguće je zameniti sledećim skupom nerekurzivnih pravila:

Moguća je i sledeća transformacija:

Primer 5.6 Eliminisanje leve rekurzije

Neka je data levo rekurzivna gramatika:

Ekvivalentna ne rekurzivna gramatika bila bi:

Eliminisanje indirektne rekurzije moguće je sledećom trenaformacijom:

Sve skupove pravila oblika:

X → Y

Y → 1 2 … 3

treba zameniti pravilima:

X → 1 2 … 3

Posle ove transformacije treba se osloboditi svih direktnih levo-rekurzivnih smena, ukoliko postoje.

Primer 5.7 Eliminisanje leve rekurzije

Gramatika iz primera 5.5. može da se transformiše u nerekurzivnu gramatiku na sledeći način:

Najpre ćemo razdvojiti smene da bi bolje videli indirektnu rekurziju.:

(1)

SAa

(2)

Sb

(3)

ASd

(4)

AAc

(5)

A

Prvo eliminišemo indirektna levo rekurzivna pravila. U datoj gramatici pravilo (1) i (3) su indirektno rekurzivna. Njihovom transformacijom se dobija pravilo: SSda tako da se skup pravila svodi na:

(1)

SSda

(2)

Sb

(3)

AAc

(4)

A

U sledećem koraku se eliminišu direktno levo rekurzivna pravila (1) i (3), tako da je gramatika sada definisana skupom smena:

(1)

Sb | bS’

(2)

S’da | daS’

(3)

A| A’

(4)

A’c | cA’

Primer 5.8 Top-down analiza

Blok naredbi u jeziku Pascal definisan je sledećom gramatikom

G=({Blok, NizNar, Naredba, Dodela, Izraz}, {begin, end, ID, CONST, ; , +, :=}, Blok, P} gde je P sledeći skup pravila:

Blok → begin NizNar end

NizNar → NizNar ; Naredba | Naredba

Naredba → Dodela | Blok

Dodela → ID := Izraz

Izraz → Izraz + CONST | CONST

Pproveriti da li je sledeći blok:

begin

ID := CONST

end

sintaksno korektno napisan.

Rešenje:

Najpre eliminišemo levo rekurzivna pravila:

1. Skup smena:

NizNar → NizNar ; Naredba | Naredba

zamenjujemo smenama:

NizNar → Naredba NizNar’

NizNar’ → ; Naredba NizNar’ | ε

2. Skup smena:

Izraz → Izraz + CONST | CONST

zamenjujemo smenama:

Izraz → CONST Izraz’

Izraz’ → + CONST Izraz’ | ε

Transformisana gramatika sadrži sledeći skup smena:

(1)Blok → begin NizNar end

(2)NizNar → Naredba NizNar’

(3) NizNar’ → ; Naredba NizNar’

(4)NizNar’ → ε

(5)Naredba → Dodela

(6)Naredba → Blok

(7)Dodela → ID := Izraz

(8) Izraz → CONST Izraz’

(9)Izraz’ → + CONST Izraz’

(10) Izraz’ → ε

Postupak sintaksne analize zadate reči bi bio:

Ulazni niz Generisani niz Akcija

begin ID := CONST end # Blok #(1)

begin ID := CONST end # begin NizNar end #prepoznaje se begin

begin ID := CONST end # begin NizNar end # (2)

begin ID := CONST end # begin Naredba NizNar’ end #(5)

begin ID := CONST end # begin Dodela NizNar’ end #(7)

begin ID := CONST end # begin ID := Izraz NizNar’ end #prepoznaje se ID

begin ID := CONST end # begin ID := Izraz NizNar’ end #prepoznaje se :=

begin ID := CONST end # begin ID := Izraz NizNar’ end # (8)

begin ID := CONST end # begin ID := CONST Izraz’ NizNar’ end # prep. se CONST

begin ID := CONST end # begin ID := CONST Izraz’ NizNar’ end # (9)

begin ID := CONST end # begin ID := CONST + CONST Izraz’ NizNar’ end #greška

begin ID := CONST end # begin ID := CONST Izraz’ NizNar’ end #(10)

begin ID := CONST end # begin ID := CONST NizNar’ end #(3)

begin ID := CONST end # begin ID := CONST ; Naredba NizNar’end #greška

begin ID := CONST end # begin ID := CONST NizNar’ end #(4)

begin ID := CONST end # begin ID := CONST end #prepoznaje se end

begin ID := CONST end # begin ID := CONST end #uspešan kraj

Za generisanje niza begin ID := CONST end # koristi se sledeći skup smena:{(1), (2), (5), (7), (8), (10), (4)}. Na Slici 5.7 prikazano je odgovarajuće sintaksno stablo.

Napomena: Smene uz koje stoji su poništene.

(IDBlokbeginNizNarendNaredbaNizNar’Dodela:=IzrazCONSTIzraz’) Slika 5.7

5.3 Osnovni algoritam za Bottom-Up analizu

U slučaju Bottom-Up analize preimenjuje se postupak redukcije reči koja se analizira. Osnovni algoritam za analizu se sastoji u tome što se ulazni niz analizira slovo po slovo od početka prema kraju i nastoji se da se neki njegov podniz prepozna kao desna stana nekog od raspoloživih pravila gramatike. Kada se takav podniz pronađe vrši se njegova redukcija na levu stranu primenjene smene i postupak nastavlja sve dok se niz ne redukuje na startni simbol. Kao i kod osnovnog algoritma za Tio-down analizu i ovde ima vraćanja unatrag i poništavanja primenjenih smena u slučaju kada dođe do greške i ne može da se ide dalje sa nalizom.

Pri realizaciji ovog algoritma koristi se magacin u koji se ubacuje slovo po slovo iz ulaznog niza. Pri tome se u svakom koraku ispituje da li je moguće izvršiti redukciju niza koji je u vrhu magacina. Ako redukacija nije moguća u magacin se ubacuje novo slovo, a ako je moguća prepoznati niz sa vrha magacina se redukuje na neterminal koji je na levoj strani primenjene smene, odnosno neterminal zamenjuje redukovani niz u magacinu. Analiza je uspešno izvršena kada se dodđe do graničnog simbola a u magacinu ostane samo startni simbol.

Ilustrovaćemo ovaj postupak na primeru reči i gramatike iz Primera 5.3

Primer 5.9 Osnovni algoritam za Bottom-up analizu

Neka je data gramatika

P:

1.

2.

3.

4.

5.

Vršimo Bottom-up sintaksnu analizu reči: a c c d #

Ulazni niz Niz u magacinu Akcija

1.

a c c d #

2. c c d #a Nema smene, ubacuje se novo slovo

3. c d #a c Primenjuje se smena (4)

4. c d #a A Nema smene, gleda se dublje

5. c d #a A Nema smene, ubacuje se novo slovo

6. d #a A c Primenjuje se smena (4)

7. d #a A ANema smene, gleda se dublje

8. d #a A A Nema smene

9. d #a A A Nema smene, ubacuje se novo slovo

10. #a A A d Nema smene, gleda se dublje

11. #a A A d Nema smene, gleda se dublje

12. #a A A d Nema smene, gleda se dublje

13. #a A A d Nema smene, nema slova za ubacivanje poništava se sve do 6. i pokušava sa da se nadje nova slternativa na tom nivou

14. d #a A c Nema smene, gleda se dublje

15. d #a A c Nema smene, gleda se dublje

16. d #a A c Nema smene, ubacuje se novo slovo

17. #a A c dNema smene, gleda se dublje

18. #a A c dNema smene, gleda se dublje

19. #a A c d Nema smene, gleda se dublje

20. #a A c dNema smene, nema slova za ubacivanje poništava se sve do 3. i pokušava sa da se nadje nova slternativa na tom nivou

21. c d #a cNema smene, gleda se u dubinu

22. c d #a cNema smene, ubacuje se slovo

23. d #a c cPrimenjuje se smena (4)

24. d #a c ANema smene, gleda se u dubinu

25. d #a c A Nema smene, gleda se u dubinu

26. d #a c A Nema smene, ubacuje se novo slovo

27. #a c A dNema smene, gleda se u dubinu

28. #a c A dNema smene, gleda se u dubinu

29. #a c A d Nema smene, gleda se u dubinu

30. #a c A d #Nema smene, nema slova za ubacivanje poništava se sve do 23. i pokušava sa da se nadje nova slternativa na tom nivou

31. d #a c cNema smene, gleda se u dubinu

32. d #a c c Nema smene, gleda se u dubinu

33. d #a c cNema smene, ubacuje se novo slovo

34. #a c c d Nema smene, gleda se u dubinu

35. #a c c d Nema smene, gleda se u dubinu

36. #a c c d Primenjuje se smena (5)

37. #a BNema smene, gleda se u dubinu

38. #a B Primenjuje se smena (2)

39. #SUspešan kraj analize

Napomena: Korišćena je notacija u kojoj je uokviren niz koji se nalazi u vrhu magacija i trenutno traći kao desna strana smene.

I u ovom postupku dobja se da se analizirani niz generiše primenom smena (5) i (2) samo što su one otkrivene u redosledu koji je suprotan od njihove primene, što je i suština samog postupka. Sintaksno stablo koje odgovara reči je isto kao i u primeru 5.3.

Pitanja

1. Objasniti šta je zadatak sintaksnog analizatora.

2. Objasniti pojam levog i desnog izvođenja.

3. Objasniti koji se problem javlja kod nejednoznačno definisanih gramatika.

4. Koja su to dva osnovna načina sintaksne analize?

5. Opisati osnovni algoritam za Top-down analizu.

6. Šta je to problem leve rekurzije i kada se javlja?

7. Dati transformacije kojima se eliminiše leva rekurzija.

8. Šta je to indirektna rekurzija i kako se eliminiše?

9. Objasniti osnovni algoritam za Bottom-ip analizu.

Zadaci

1. Primenom osnovnog algoritma za Top-down sintaksnu analizu proveriti da li niz #READ ( ID, ID, )# pripada jeziku gramatike G zadate sledećim skupom pravila:

Ulaz READ ( NizPromenljivih )

NizPromenljivih NizPromenljivih , ID ID .

2. Primenom osnovnog algoritma za Top-down sintaksnu analizu proveriti da li reč

# a + a * (a + a)# pripada jeziku koji je definisan gramatikom G=({S, I, F}, {a, +, *}, S, P} gde je P sledeći skup pravila:

S S + I I

I I * F F

F a ( S ) a

3. Neka je gramatika G zadata sledećim skupom pravila:

S S + I I

I ( S ) f ( S ) id

Primenom osnovnog algoritma za Top-down sintaksnu analizu proveriti da li niz

# id + f ( id + * f ( id ) ) ) # pripada jeziku koji je definisan ovom gramatikom.

4. Primenom osnovnog algoritma za Bottom-up analizu proveriti da li reč # a + a * a # pripada jeziku definisanom gramatikom iz zadatka 2.

5. Traženu proveru iz zadatka 3. izvršiti primenom osnovnog algoritma za Bottom-up analizu.

88

1

1

1

b

cifra

b

cifra

cifra

b

cifra

cifra

slovo

cifra

cifra

id

cifra

id

id

<

><

<

><

><

>®<

><

><

>®<

><

>®<

<

1

1

1

1

1

1

1

1

b

slovo

id

cifra

id

id

cifra

id

id

®

>

®<

>

<

®

>

><

®<

>

>®<

><

>®<

<

<

id

>

<

id

><

cifra

>

<

slovo

>

b

1

<

id

><

cifra

>

1

>

<

>

<

>

<

+

>

<

>

>®<

<

izraz

izraz

izraz

izraz

id

izraz

*

|

|

>

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

<

>

>®<

<

>

>®<

<

>

>®<

<

id

id

id

izraz

id

id

izraz

izraz

id

izraz

id

izraz

izraz

izraz

*

*

*

*

*

<

izraz

>

<

izraz

>

<

izraz

>

*

+

<

izraz

>

<

izraz

>

<

id

>

<

id

>

<

id

>

>

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

<

>

>®<

<

+

>

>®<

<

+

>

>®<

<

id

id

id

id

id

izraz

id

izraz

izraz

id

izraz

izraz

izraz

izraz

*

*

*

<

izraz

>

<

izraz

>

<

izraz

>

+

*

<

izraz

>

<

izraz

>

<

id

>

<

id

>

<

id

>

>

>®<

<

>

<

>

<

>

>®<

<

>

<

+

>

<

>

>®<

<

id

factor

factor

term

factor

term

term

izraz

term

izraz

*

|

|

>

<

+

>

<

>

>®<

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

<

>

>®<

<

+

>

>®<

<

id

id

id

factor

id

id

term

id

id

term

factor

id

term

factor

factor

term

factor

term

term

izraz

izraz

*

*

*

*

*

*

>

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

<

>

>®<

<

+

>

<

>

<

<

+

>

>®<

<

+

>

>®<

<

+

>

>®<

<

id

id

id

id

id

factor

id

id

term

id

factor

term

id

izraz

factor

izraz

term

izraz

izraz

*

*

*

*

<

izraz

>

<

izraz

>

<

term

>

+

*

<

term

>

<

factor

>

<

id

>

<

factor

>

<

factor

>

<

term

>

{

}

{

}

(

)

ddc

B

ccd

B

c

A

b

A

aB

S

aAd

S

P

S

d

c

b

a

B

A

S

®

®

®

®

®

®

=

.

6

.

5

.

4

.

3

.

2

.

1

:

,

,

,

,

,

,

,

,

P

G

´

S

a

B

c

d

c

®

Î

Î

S

a

c

A

a

A

a

A

a

A

®

®

®

®

e

e

|

|

|

Ac

Sd

A

b

Aa

S

Þ

Þ

´

´

´

e

e

e

)

,

},

9

1

0

{

},

,

s

,

({

P

G

>

<

¼

¼

>

<

>

<

>

<

id

,

,

,z,

a,b,c,

cifra

lovo

id

9

|

|

2

|

1

|

0

|

|

|

|

|

|

K

K

<

<

>

><

<

>

><

<

>

>®<

<

cifra

z

c

b

a

slovo

cifra

id

slovo

id

slovo

id