PP teorija Flashcards

1
Q
  1. Objasniti namenu programskih prevodioca?
A

Uvek kada softversku aplikaciju razvijamo nekim višim programskim jezikom, a to je danas standardni pristup, treba nam softver koji će taj program da prevede u mašinski jezik, zato što svi računari, ma koliko složeni bili, obrađuju instrukcije predstavljene u mašinskom (binarnom) obliku. Ukoliko je programski jezik koji koristimo na višem nivou, zadatak tog softvera je složeniji. Programski prevodioci su softverske komponente koje generalno prevode programe pisane u jednom programskom jeziku u odgovarajuće programe pisane drugim programskim jezikom, Slika 1.1
1. Slika 1.1 Programski prevodilac
Obično je jezik sa kog se prevodi višeg nivoa od jezika na koji se vrši prevođenje, mada u opštem slučaju možemo da prevodimo sa jednog jezika višeg nivoa na drugi jezik višeg nivoa, ali i da se kod niskog nivoa prevodi u kod višeg nivoa ( npr. krosasembleri).
SLIKA

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Sta je to assembler?
A

Mašinski jezik je programski jezik najnižeg nivoa i podrazumeva da se program sastoji od naredbi i podataka napisanih u biarnom obliku (preko nizova jedinica i nula) uz korišćenje apsolutnih adresa podataka. Na ovom nivou programski prevodilac nije potreban, naredbe se upisuju direktno u operativnu memoriju i izvršavaju.
Drugu generaciju jezika čine asemblerski jezici kod kojih se jedna mašinska naredba predstavlja simbolički uz korišćenje simboličkih adresa naredbi i podataka. Ovi jezici su višeg nivoa od mašinskih ali su i dalje mašinski zavisni. Naime, asemblerski jezik se projektuje zajedno sa procesorom računara i struktura procesora bitno utiče na strukturu asemblerskog jezika i obrnuto. Za prevođenje zapisa sa nivoa asemblerskog jezika na mašinski nivo potreban je programski prevodilac koji se u ovom slučaju naziva Asembler (assembler), Error! Reference source not found., pa odatle i naziv ovih jezika.
SLIKA

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Cemu sluze makroprocesori?
A

Makroasemblerski jezici su nešto višeg nivoa od asemblerskih jezika i omogućavaju skraćeno zapisivanje programa tako što se grupa asemblerskih naredbi predstavi jednom makro naredbom. Kod programa napisanih na ovom nivou najpre se koristi makroprocesor čiji je zadatak da pozive makro naredbi zameni odgovarajućim sekvencama asemblerskih naredbi. Nakon toga se, pomoću odgovarajćeg asemblera, dobijeni asemblerski kod prevodi u mašinski, Slika 3.1.
Slika 3.1 Makroprocesor
Kako je asemblerski jezik niskog nivoa, a posebno zbog činjenice da je svakoj asemblerskoj naredbi odgovara jedna mašinska naredba, razvoj asemblera nije komplikovan zadatak. Slično je i sa makroproceosorom, čiji je zadatak prvenstveno da pokupi i zapamti definicije makro naredbi i da zameni pozive makronaredbi odgovarajućim sekvencama asemblerskih naredbi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Objasniti razliku izmedju kompilatora i interpretatora?
A

Kada se za razvoj programa koriste viši programski jezici onda je proces prevođenja na mašinski nivo je nešto složeniji. U te svrhe se kao programski prevodioci koriste kompilatori i interpretatori, Error! Reference source not found.. Osnovna razlika između kompilatora i interpretatora je u tome što kompilator najpre vrši analizu programa na osnovu koje generiše izvršni fajl celog programa. Interpretatori koriste drugu strategiju. Oni prevode naredbu po naredbu programa i čim formiraju celinu koja može da se izvršava, izvršavaju je.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Navesti osnovne osobine kompilatora?
A

Kompilator započinje analizu programa fazom leksičke analize. U ovoj fazi identifikuju se leksičke celine i nastoji se da se uprosti zapis programa kako bi se pripremio za sintaksnu analizu. Na primer, za proces sintaksne analize nije važno da li je neka promenljiva u programu nazvana A ili B već je važno da se na određenom mestu javlja poromenljiva. Zbog toga se sve leksičke celine zamenjuju odgovarajućim simbolima a sve dodatne informacije o njima pamte u posebnoj strukturi koja se naziva Tablica simbola (Symbol Table).
Nakon leksičke analize sledi faza sintaksne analize. Zadatak ove faze je da se utvrdi da li je program tačno napisan u skladu sa pravilima kojima je definisan programski jezik koji je korišćen. Danas se koriste formalni opisi programskih jezika preko odrđenih meta jezika. U suštini zadatak sintaksnog analizatora je da rasčlani složene naredbe jezika na elementarne. Kao rezultat sintaksne analize dobija se sintaksno stablo koje pokazuje koja pravila i kojim redosledom treba primeniti da bi se generisala određena naredba jezika, odnosno od kojih se elementarnih naredbi sastoji svaka složena naredba.

Na osnovu sintasnog stabla genriše se međukod programa. Međukod je reprezentacija programa koja je mašinski nezavisna ali se jednostavno preslikava u mašinski ili asemblerski kod za određenu mašinu.
Kod koji kompilator genriše u prvom prolazu obično sadrži puno redundatnosti pa se zato mora vršiti optimizacija koda. Ova optimizacija može da bude mašinski nazavisna, kada se vrši na nivou međukoda ali i mašinski zavisna, kada se vrši na nivou generisanog koda.
Savremeni kompilatori pored sintaksne vrše i semantičku analizu koja se često integriše sa sintaksnom analizom ili se izvršava kao nezavisna faza. Zadatak semantičke analize je da utvrdi da li su u pisanju programa ispoštovana dodatna, semantička pravila koja se ne mogu formalno definisati kroz formalni opis jezika. Takva pravila su recimo pravila vezana za koncept jakih tipova podataka ili pravila o tome kojim stvarnim parametrima mogu da se zamenjuju stvarni parametri i sl. Ova dodatna pravila se obično definišu kao procedure koje se izvršavaju prilikom primene određenog sintaksnog pravila.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Objasniti sta je to medjukod?
A

Na osnovu sintasnog stabla genriše se međukod programa. Međukod je reprezentacija programa koja je mašinski nezavisna ali se jednostavno preslikava u mašinski ili asemblerski kod za određenu mašinu. Koncept korišćenja međukoda kod kompilatora ima niz prednosti. Kako je međukod mašinski nezavisan, jednostavno se može preslikati u bilo koji drugi mašinski jezik. To znači da se na osnovu jednom generisanog međukoda može generisati mašinski kod za različite mašine i ostvariti prenosivost koda.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Nacrtati potpunu semu strukture kompilatora?
A

IMa slika 3. stranica u skripti

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Definisati pojam azbuke.
A

Prilikom opisa jezika polazi se od azbuke kao osnovnog pojma. Neka je V konačan neprazan skup
elemenata. Elemente skupa V nazivamo simbolima, slovima, a sam skup apstraktnom azbukom ili
samo azbukom.
Primer 8.1 Primeri azbuka
V={0,1} Azbuci V pripadaju samo cifre 0 i 1;
V={a,b,c} Azbuci pripadaju samo slova a,b i c
Za opis programskih jezika se koriste nešto složenije azbuke.
Na primer jednu takvu azbuku mogu da čine sledeći simboli:
- Velika i mala slova abecede: A,a,B,b,C,c …
- Specijalni znaci: +, -,*, :=, …
- Reči kao što su: begin, end, if, then, …
Napomena: U ovom slučaju se svaka reč tretira kao jedan simbol.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Dati formalnu definiciju pojma reči.
A

Reč u kontekstu formalnih jezka se definiše kao konačan niz simbola azbuke V. Niz koji ne sadrži
nijedan simbol naziva se prazna reč i označava sa  .
Primer 2.2 Reči
Neka je V={a,b,c}. Sledeći nizovi su reči azbuke V:  , a, b, c, aa, bb, cc, ab, ac,
abc, aabc
Reči su uređeni nizovi tako da se reč ab razlikuje od reči ba.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Navesti osnovne delove reči.
A

Razlikujemo i sledeće pojmove:
Prefiks reči x je niz koji se dobija izbacivanjem nijednog ili više krajnjih simbola reči x.
Sufiks reći x je niz koji se dobija izbacivanjem nula ili više početnih simbola reči x.
Podniz reči x je reč koja se dobija kada se izbaci neki prefiks i neki sufiks reči x. Svaki prefiks i svaki
sufiks reči x su podnizovi reči x, dok svaki podniz reči x ne mora da bude ni sufiks ni prefiks reči x.
Za svaku reč x i x i  su njeni prefiksi, sufiksi i podnizovi.
Primer 2.7 Delovi reči
Neka je data reč banana.

Reči b, ba, ban, bana, banan i banana su njeni prefiksi,
b, ba, ban, bana, banan su pravi prefiksi.
Reči a, na, ana, nana, anana i banana su njeni sufiksi
a, na, ana, nana, anana su pravi sufiksi.
aba, ana, anan su podnizovi reči banana.
baaa i bnna su podsekvenca reči babana.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Navesti osnovne operacije koje se mogu izvršavati nad rečima.
A

Proizvod reči
Ako su x i y dve reči azbuke V, proizvod ili spajanje reči je operacija kojom se stvara nova reč tako što se
na jednu reč nadovezuje druga reč.
Primer 2.4 Proizvod reči
Neka je: x = aA i y = ab. Proizvodom ovih reči nastaje reč z = xy = aAab
Takođe važi da je: x = x = x. Prazna reč je neutralni element za operaciju proizvoda (nadovezivanja)
reči.
Eksponent reči
Višestruki proizvod iste reči se definiše kao eksponent reči.
Primer 2.5 Eksponent reči
xx = x2
xxx = x3.
x1=x
x0=  .
Transponovana reč
Transponovana reč reči x u oznaci xT definiše se na sledeći način:
1.  T = 
2. (xa)T = axT
Rezultat operacije transponovanja reči je reč u kojoj su slova ispisana u obrnutom redosledu u odnosu na
originalnu reč.
Primer 2.6.Transponovana reč
Neka je data reč x=baba. Tada je xT=abab
Ako je x=radar tada je xT=radar. Ovakve reči nazivamo palindromima.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. Dati formalnu definiciju pojam jezika.
A

Neka je data azbuka V. Skup svih reči nad azbukom V se označava sa V. Napomenimo da je skup
V
uvek beskonačan, bez obzira na to kako je definisana azbuka V. Čak i u slučaju kada azbuka V
sadrži samo jedan simbol V={a}, skup V={ , a, aa, aaa, aaaa, …}.
Formalni jezik nad azbukom V je bilo koji podskup skupa V
. Bilo koji podskup bilo da je konačan ili
beskonačan predstavlja jezik. Kako je V* uvek beskonačan skup broj njegovih podskupova je takođe
beskonačan.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. Navesti osnovne operacije nad jezicima.
A

Ako je L formalni jezik onda se može definisati i njegov reverzni jezik u oznaci LR, kao skup svih
reverznih reči jezika L.
LR ={xT | xL}
Ako su L i M formalni jezici, onda je LM, unija ova dva jezika i obuhvata sve reči koje pripadaju
ili jeziku L ili jeziku M.
L  M={x | x L  x M}
Ako su L i M formalni jezici, onda je L  M, proizvod ova dva jezika i obuhvata sve reči nastaju
operacijom nadovezivanja reči jezika M na reči jezika L.
L  M={xy | x L  y M}
Potpuno zatvaranje jezika L, koje se označava sa L*, je skup svih reči koje nastaju kao proizvodi reči
jezika L uključujući i  .
 


0
*
i
L Li
Pozitivno zatvaranje jezika L, za koje se koristi oznaka L+ se definiše kao:
 

 
i 1
i L L

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. Šta su to formalne gramatike i kako se definišu?
A

Noam Chomsky je još u svojim ranim radovima dao sledeću definiciju formalnih gramatika: Svaka
formalna gramatika G se može definisati kao skup G=(Vt, Vn, S, P) gde je Vt skup terminalnih
sibola, Vn skup neterminalnih simbola, S startni simbol i P skup smena definisan na sledeći način:
* * *
pri čemu je V = Vt  Vn i važi Vt  Vn = 
Uočimo da je uslov da reč na levoj strani pravila mora da sadrži bar jedan neterminalni simbol.
Formalni jezik L definisan gramatikom G je skup reči koje se sastoje od terminalnih simbola a
dobijaju se tako što se na starni simbol primene pravila gramatike:
POGLEDAJ PDF BOLJE

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. Šta su to neredukovane gramatike. Dati primer.
A

Gramatika mora da bude redukovana. Redukovana gramatika je gramatika koja ne sadrzi beskorisna
pravila. Beskorisna pravila su ona koje sadrže simbole koji ne mogu da budu izvedeni iz startnog
simbola gramatike, ili smene koje sadrže “beskonačne” simbole.
Primer 2.13 Neredukovana gramatika
Gramatika G=( {W,X,Y,Z}, {a}, W, P} gde je:
P: 1. W  aW
2. W  Z
3. W  X
4. Z  aZ
5. X a
6. Y aa
je primer neredukovane gramatike iz sledećih razloga:
1. Pravilo 2. je neupotrebljivo pravilo jer je Z beskonačan simbol, nikada se ne ukida.
2. Pravilo 4. je neupotrebljivo iz istog razloga.
3. Pravilo 6. je neupotrebljivo zato što ne postoji izvođenje W  Y. Nikada se ne generiše
neterminal Y.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. Sta su to nejednoznačne gramatike. Dati primer.
A

Gramatika ne mora da bude jednoznačna. Kod nejednoznačnih gramatika za jedan ulazni niz je
moguce kreirati veći broj sintaksnih stabala.
Primer 2.14 Nejednoznačna gramatika
G=( {Izraz}, {const,+,*}, Izraz, P)
P: Izraz  Izraz + Izraz
Izraz  Izraz * Izraz
Izraz  const

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q
  1. Navesti osnovne tipove gramatika po Čomskom.
A

Još u svojim ranim radovima Chomsky je formalne je identifikovao četri tipa formalnih gramatika i jezika.
Gramatike koje zadovoljavaju gore date opšte uslove je nazvao gramatikama tipa nula. praktično svaka
formalna gramatika je gramatika tipa nula. ostali tipovi gramatika imaju strože definisane uslove koje
treba da zadovolje pravila. To znači da se tim tipovaima gramtika može definisati uži skup jezika ali se
zato može jednostavnije vršiti analiza i prepoznavanje takvih jezika.
Gramatike tipa jedan ili Konteksne gramatike
Gramatike tipa jedan su formalne gramatike koje pored opštih uslova koji zadovoljavaju gramatike tipa
nula imaju pravila x  y koja zadovoljavaju sledeći uslov:
| x |  | y |
To znači da se reči sa leve strane smena mogu preslikavati samo u reči koje su jednake ili veće dužine.
Drugim rečima, nisu dozvoljena pravila oblika:
x  
Gramatike tipa jedan kao i gramatike tipa nula se obično nazivaju i konteksnim gramatikama. To je zbog
toga što se neterminal koji je obavezan na levoj strani smene kod ovih gramatika nalazi u nekom
kontekstu i čitav taj kontekst se preslikava u novu reč.
Gramatike tipa dva ili Beskontekne gramtike
Gramatike tipa dva su gramatike kod kojih su pravila definisana tako da se na levoj strani nalazi samo
neterminal. Neterminali se preslikavaju u reči. Kako se neterminali prilikom izviđenja posmatraju
izolovano od konteksta u kome se nalaze ove gramatike se nazivaju beskonteksnim gramatikama. Znači
smene kod ovih gramatika su oblika:
A  y, gde je AVn i y Vt*
Za opis programskih jezika se obično koriste beskonteksne gramatike.
Gramatike tipa tri su formalne gramatike koje zadovoljavaju opšte uslove ali su orgraničene na smene
oblika:
A  a B ili , A  a gde je AVn i a Vt
Naziv regularne gramatike dolazi odatle što su ove gramatikama tipa tri generišu regularni izrazi koji se
efikasno mogu prepoznavati konačnim automatima. Regularne gramatike imaju široku primenu u mnogim
oblastima u kojima treba vriti prepoznavanje nizova. U kontekstu programskih prevodilaca koriste se za opis leksičkih elemenata jezika (identifikatora, konstanti, literala i sl.) koje prepoznaje leksički analizator, o čemu će biti reči kasnije.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
  1. Šta su to konteksne, a šta beskonteksne gramatike?
A

Gramatike tipa jedan kao i gramatike tipa nula se obično nazivaju i konteksnim gramatikama. To je zbog toga što se neterminal koji je obavezan na levoj strani smene kod ovih gramatika nalazi u nekom kontekstu i čitav taj kontekst se preslikava u novu reč.
Gramatike tipa dva beskontekstne
Neterminali se preslikavaju u reči. Kako se neterminali prilikom izviđenja posmatraju izolovano od konteksta u kome se nalaze ove gramatike se nazivaju beskonteksnim gramatikama.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q
  1. Šta su to normalne forme gramatika?
A

Pod normalnim formama gramatika podrazumevamo standardni način zadavanja gramatika određenog tipa. To znači da se smene jedne gramatike mogu prikazati na neki drugi način a da se pri tome ne promeni jezik koji definišu. Tako dolazimo i do pojma ekvivalentnih gramatika.. Dve gramatike su ekvivalentne ako definišu isti jezik.
Naime nekada je potrebno smene gramatike predstaviti na baš određeni način da bi se mogao primeniti neki određeni postupak analize. U te svrhe su i definisane azličite normalne forme za određene tipove gramatika. Pomenućemo samo neke.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q
  1. Šta su to automati. Objasniti kako teče proces prepoznavanja reči automatom.
A

Problem prepoznavanja jezika, odnosno utvrđivanja da li zadata reč pripada jeziku opisanim određenom gramatikom, rešava se automatima kao uređajima za prepoznavanje jezika.
Generalno gledano svi automati se mogu predstaviti šemom datom na Slika 20.1, Niz simbola (reč) koji se prepoznaje zapisan je na ulaznoj traci. Po ulaznoj traci se kreće ulazna glava koja u jednom trenutku čita jedan simbol sa trake, Ova glava se u opštem slučaju može kretati i napred i nazad.

Slika 20.1 Šema automata kao uređaja za prepoznavanje jezika
Funkcionalni deo automata je njegov najznačajniji deo. Može da se nađe u nizu različitih stanja u
zavisnosti od toga kako je opisan jezik koji se prepoznaje. Funkcionalni organ beleži predistoriju
prepoznavanja i za to koristi memoriju koja je u ovom opštem modelu predstavljena kao beskonačna
memorija. Automat sa beskonačnom memorijom nije praktično izvodljiv tako da se realni automati
razlikuju od ovog modela po tome što koriste neki određeni tip memorije.
Proces prepoznavanja reči koja je upisana na ulaznu traku kreće tako što se ulazna glava pozicionira na
startni simpol (#), a funkcionalni organ se nalazi u svom početnom stanju. U svakom koraku
prepoznavanja, u zavisnosti od toga gde je pozicionirana ulazna glava (koji simbol čita) i stanja
funkcionalnog organa, kao i simbola u radnoj memoriji koji čita radna glava događaju se sledeće promene
u automatu:
* menja se stanje funkcionalnog organa
* u radnu memoriju se upisuje jedan ili više simbola
* radna glava se pomera napred, nazad ili ostaje na poziciji na kojoj se i nalazi.
Proces prepoznavanja reči je uspešno završen u trenutku kada se ulazna glava pozicionira na krajnji
granični simbol (desni #) i funkcionalni organ se nadje u jednom od svojih završnih stanja.
U opštem slučaju automati se mogu podeliti na četri klase:
* 2N Dvosmerni nedeterministički
* 1N Jednosmerni nedeterministički
* 2D Dvosmerni deterministički
* 1D Jednosmerni deterministički
Podela na jednosmerne i dvosmerne izvršena je na osnovu mogučnosti pomeranja ulazne glave. Ako se
ulazna glava kreče samo napred onda su to jednosmerni automati, a u slučaju kada je dozvoljeno i
vraćanje glave unatrag onda su to dvosmerni automati. Podela na determinističke i nedeterminističke
izvršena je u odnosu na preskikavanje stanja funkcionalnog organa koje se vrši u toku prepoznavanja .
Ukoliko je stanje u koje prelazi automat za određeni ulazni simbol i određeno zatečeno stanje,
jednoznačno definisana onda je to deterministički automat. Ukoliko je ovo preslikavanje višeznačno
onda je to nedeterministički automat.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q
  1. Kako je definisana Tjuringova mašina?
A

Error! Reference source not found. prikazuje šemu Tjuringove mašine kao osnovnog automata za
prepoznavanje jezika. Za razliku od opšteg modela automata Tjuringova mašina ima radnu memoriju
u vidu beskonačne trake.
# a # 1 a2 an ai
Funkcionalni
organ
Ulazna glava
Ulazna traka
A1 A2 An Ai
Radna memorija
2N Tjuringova mašina se može opisati sledećom entorkom: Tm=(Q, V, S, P, q0, b, F) gde je:
Q – Skup stanja operativnog organa
V – Skup simbola na ulaznoj traci
S – Skup simbola na radnoj traci
F – Skup završnih, krajnjih stanja (Podskup skupa Q)
q0 – Početno stanje operativnog organa
b – Oznaka za prazno slovo
P – Preslikavanje definisano sa:
odnosno ako je ulazna glava pozicionirana na simbolu a, funkcionalni organ se nalazi u stanju qi, a radna
glava iznad simbola A, automat će preći u stanje qj, na radu traku će upisti simbol B i iyvršiće pomeranje
ulazne glave i radne glave u skladu sa vrednostima d1 i d2. Pri tome važi sledeća notacija: Ako je d=0
nema pomeranja radne glave, za d=1 glava se pomera za jedno mesto u desno, a za d=-1 glava se
pomera za jedno mesto u levo (vraća se nazad).
Mašina započinje prepoznavanje tako što je ulazna glava pozicionirana na početnom graničnom simbolu,
funkcionalni organ se nalazi u početnom stanju i radna traka je prazna. Prepoznavanje reči se završava
uspešno ako se u trenutku kada se ulazna glava pozicionira na krajni granični simbol #, automat nađe u
nekom od završnih stanja (elemenata skupa F).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q
  1. Koje jezike prepoznaju automati tipa Tjuringove mašine?
A

Dokazano je da su sve četri klase Tjuringovih mašina, 2N, 1N, 2D, 1D su međusobno ekvivalentne i svaka
od njih prepoznaje jezike jezike tipa nula. To u suštini znači da je za prepoznavanje bilo kog jezika tipa
nula moguće definisati bilo koji tip Tjuringove mašine, odnosno ako je moguće definisati jedan tip
Tjuringove mašine onda je moguće definisati i ekvivalentne mašine ostalih tipova. Jedini problem u
svemu ovome je to što model Tjuringove mašine podrazumeva beskonačnu memoriju, što je u praksi
praktično nije izvodljivo. Zbog toga Tjuringova mašina ostaje samo teorijski model a u praksi se koriste
automati sa konačnim memorijama, što kao posledicu ima ograničenje jezika koji se mogu prepoznavati.
Može se reći da je pojam Tjuringove mašine ekvivalent pojmovima algoritam i jezici tipa nula. To znači
da se sva algoritamska preslikavanja mogu opisati jezicima tipa nula, pri čemu je moguće definisati
odgovarajuću Tjuringovu mašinu za prpoznavanje jezika.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q
  1. Šta su to Linearno ograničeni automati i koje jezike prepoznaju?
A

Linearno ograničeni automati su u suštini Tjuringove mašine sa konačnom trakom kao radnom
memorijom. Naime 2N Tjuringova mašina kod koje može da se odredi konstanta k takva da je dužina reči
koja se upisuje na radnu traku najviše k puta veća od dužine reči koja se prepoznaje, naziva se Linearno
ograničenim automatom.
Odnosno, ako se prepoznaje reč wV, gde je |w|=n, na radnu traku se upisuje reč dužine r, pri čemu je
r  n
k
Posledica ovog ograničenja je da Linerano ograničeni automati ne prepoznaju sve jezike tipa nula.
Odnosno, postoje jezici tipa nula za koje nije moguće definisati linearno ograničeni automat. Naime
dokazana su sledeća tvrđenja:
1. Klase 2N i 1N Linearno ograničenih automata su međusobno ekvivalentne i svaka od njih
prepoznaje jezike tipa jedan. Drugim rečima, za svaki jezik tipa jedan može se definisati
nedeterministički LOA koji ga prepoznaje.
2. Klase 2D i 1D Linearno ograničenih automatu su međusobno ekvivalentne. To znači da se za
svaki 2D LOA može definisati ekvivalentan 1D LOA.
3. Ekvivalentnost 2N i 2D LOA do sada nije dokazana.
4. Svaka klasa LOA ne prepoznaje sve jezike tipa jedan.

24
Q
  1. Kako je definisam magacinski automat i koje jezike prepoznaje?
A

Magacinski automat kao radnu memoriju koristi memoriju organizovanu u vidu magacina. Šema
strukture ovog automata data je na Slika 24.1.
2N Magacinski automat je definisan entorkom Ma=(Q, V, S, P, q0, Z0, F) gde je:
Q – Skup stanja operativnog organa
V – Skup simbola na ulaznoj traci
S – Skup magacinskih simbola
F – Skup završnih, krajnjih stanja (Podskup skupa Q)
q0 – Početno stanje operativnog organa
Z0 – Početni simbol na vrhu magacina
P – Preslikavanje definisano sa:
Primer 3.1 Magacinski automat
Neka je data gramatika G=({0,1,a}, {S}, S, P), sa skupom smena
P:
1. S  0S1
2. S  a
Za prepoznavanje jezika definisa gramatikom G može da se definiše magacinski automat
Ma=(Q, V, S, P, q0, Z0, F) gde je:
# a # 1 a2 an ai
Funkcionalni
organ
Ulazna glava
Ulazna traka
A1
A2
Radna memorija
( #) { { 1,0, 1}} * Q V S QS   
pocetno stanje
{ , }
{0,1, }
{ , }
0
1
0
0 1






q
q
Z A
A B
a
q q
F
Y
X
Q
q kraj preslikavanja
q B q
q a A q
q A q BA
q A q A
( ,#, )
( ,1, ) ( , ),
( , , ) ( , ),
( ,0, ) ( , ),
{( ,#, ) ( , ),
:
1
1 1
0 1
0 0
0 0







P
Pokazaćemo prepoznavanje dve karakteristične reči jezika definisanog gramatikom G.
1. Prepoznavanje reči #000a111#
2. Prepoznavanje reči #a#
POGLEDAJ PDF

25
Q
A
26
Q
  1. Dati definiciju konačnih automata.
A

Konačni automati su uređaji za prepoznavanje regularnih jezika. Za razlik od drugih tipova nemaju
radnu memoriju već se predistorija preslikavanja pamti samo preko promene stanja funkcionalnog
organa, Slika 25.1.
Na osnovu stanja operastivnog organa i simbola koji čita ulazna glava, menja se stanje automata i
ulazna glava pomera za jedno mesto ulevo ili udesno ili ostaje na svom mestu.
# a # 1 a2 an ai
Funkcionalni
organ
Ulazna glava
Ulazna traka
Slika 25.1 Šema konačnog automata
Konačan automat je opisan entorkom Ka=(Q, V, P, q0, F), gde je:
Q – Skup stanja operativnog organa
V – Skup simbola na ulaznoj traci
F – Skup završnih, krajnjih stanja (Podskup skupa Q)
q0 – Početno stanje operativnog organa
P – Preslikavanje pravilima oblika: Q  {V #}  Q
Za ulazni niz wV*, kažemo da je prepoznat automatom ako automat prevodi iz početnog u neko od
njegovih krajnjih stanja, odnosno ako je P(q0, w) F.
Za predstavljanje automata se koriste grafovi, pri čemu čvorovi grafa odgovaraju stanjima automata, a
potezi preslikavanjima. Na Slici 3.5 je predstavljen graf koji odgovara automatu iz primera. Početno
stanje automata je označeno strelicom, a krajnje stanje sa dva koncentrična kruga.
Kako se preslikavanje P(qi,a)=qj može tumačiti da se stanje qi automata za ulazno slovo a preslikava u
stanje qj, svako takvo preslikavanje se na grafu predstavlja odlaznim potegom od stanja qi do stanja qj na
kome je oznaka a.
Primer 3.3 Graf automata
Graf automata iz primera 3.2.
SLIKA

27
Q
  1. Objasniti vezu između konačnih automata i jezika tipa tri.
A

Za svaki jezik definisan gramatikom tipa tri može se odrediti konačni automat koji ga prepoznaje.
Pravila koja se primenjuju za ova preslikavanja data su u Tabeli 3.1.
Primer 3.5 Gramatika u konački automat
1. Definisati konačni automat za prepoznavanje označenih celih brojeva. Označeni ceo broj definisan
je sledećom gramatikom:

<OznaceniCeoBroj>  + <NeoznaceniCeoBroj>
<OznaceniCeoBroj>  - <NeoznaceniCeoBroj>
<NeoznaceniCeoBroj>  :cifra <NizCifara>
<NizCifara>  cifra <NizCifara>
<NizCifara>  ε
Rešenje:
Graf automata koji prepoznaje jezik definisan gramatikom dat je na slici 3.7.
SLIKA
</NizCifara></NizCifara></NizCifara></NizCifara></NeoznaceniCeoBroj></NeoznaceniCeoBroj></OznaceniCeoBroj></NeoznaceniCeoBroj></OznaceniCeoBroj>

28
Q
  1. Dati definiciju regularnih izraza. Navesti nekoliko primera regularnih izraza.
A

Jezici tipa tri koji se prepoznaju konačnim automatima se nazivaju i regularnim jezicima zato što se mogu opisati regularnim izrazima. Ovde ćemo sposvetiti malo više pažnje pojmu regularni izraz. Oni se mogu posmatrati i kao meta jezici za predstavljanje formalnih jezika. Regularni izrazi u suštini definišu skup reči jezika. Sami regularni izrazi su nizovi formirani od slova neke aybuke V i skupa specijalnih simbola. Regularni izraz obično skračeno definišpe skup reči jezika definisanog nad aybukom V. Postoje posebna pravila kako se vrši tumačenje (denotacija) regularnog izraza i generisanje skupa reči jezika koji je opisan regularnim izrazom.
Primer 3.9 Regularni izrazi i jezici
U Error! Reference source not found. dato je tumačenje regularnih izraza iz primera 3.8.
Regularni izrazi su veoma korisni za formalno i koncizno definisanje jezika. kada je jezik konačan moguće je nabrojati sve rači koje sadrći, ali u slučaju beskonačnih jezika to postaje problem. Zbog toga se regularni izrazi i koriste u različitim disciplinama kao sredstvo za opis kompleksnih jezika. Na žalost, ne mogu se svi formalni jezici opisati regularnim izrazima. To je moguće samo u slučaju jezika tipa tri, zbog lega se oni i nazivaju regularnim. Sledeći primer ilustruje moć regularnih izraza da definišu beskonačne i kompleksne jezike.

29
Q
  1. Pokazati kako se osnovni regularni izrazi preslikavaju u automate.
A

Za svaki regularni izraz se može definisati konačni automat koji ga prepoznaje. Pri tome važe sledeća pravila: Primer 3.13 Regularni izraz u konačni automat. Označeni realni brojevi u eksponencijalnom zapisu definisani su sledećim regularnim izrazom: (+ | - ) cifra cifra* . cifra* (E | e)(+ | -) cifra cifra* Za prepoznavanje ovih brojeva može se korititi automat predstavljen na Error! Reference source not found..
SLIKA

30
Q
  1. Objasniti namenu leksičkog analizatora.
A

Leksičkim analizatorom se realizuje faza leksičke analize u procesu prevođenja jezika. Odnosno, u kodu se identifikuju leksičke celine koje imaju neki sintaksni smisao, transformišu se u simbole (tokene) i prosleđuju se sintaksnom analizatoru.
Pored ove osnovne uloge leksički analizator obavlja još neke zadatke:
* Izbacuje iz ulaznog koda delove koji nisu značajni za sintaksnu analizu: komentare, praznine (blanko znake), tab i newline simbole.
* Usklađuje listing gršaka sa ulaznim kodom. Npr. vodi računa o broju newline simbola, što se koristi kod referenciranja na grške.

31
Q
  1. Objasniti zašto je bolje da se leksička analiza izdvoji kao posebna faza u procesu prevođenja jezika.
A

Postoji više razloga zbog kojih se leksički analizator izdvaja od sintaksnog analizatora. Možda najvažniji su:
* Jednostavnija realizacija.
* Tako se dobija mogućnost da se tehnike za sintaksnu analizu razvijaju nezavisno od jezika. Ulaz u sintaksni analizator je niz simbola definisan određenim formalnim jezikom, nije zavisan od programskog jezika koji se prevodi.
* Prenosivost kompilatora – U fazi leksičke analize eliminišu se svi mašinski zavisni elementi i generiše mašinski nezavisna sekvenca simbola koja se prosleđuje sintaksnom analizatoru
* Povećanje efikasnosti kompilatora. Posebnim tehnikama baferisanja koje se koriste u realizaciji leksičkog analizatora doprinosi se njegovoj efikasnosti a time i efikasnosti kompilatora.

32
Q
A
33
Q
  1. Šta su to tokeni?
A

Jedan token u suštini predstavlja skup nizova (reči). Na primer:
* Identifikator: niz koji počinje slovom a može da sadrži slova i cifre
AC+CBcifracifraD.cifra-EEeFcifracifra
* Integer: neprazan niz cifara, sa ili bez znaka ispred
* Ključna reč: else, or, if, begin ….
* Belina: Neprazan niz blanko znakova, ili znakova za: anewline ili tab
Tokenima se identifikuju leksičke celine koje su od interesa za sintaksni analizator. Za sintaksnu analizu nisu bitni razmaci, znaci za nove linije, tabulatori i komentari. U nekim jezicima čak i neke reči naredbe nisu bitne. Na primer u programskom jeziku COBOL naredba može da se sastoji od reči jezika koje su bitne i koje nisu bitne za prepoznavanje naredbe već se koriste samo da bi zapis naredbe bio jasniji.

34
Q
  1. Šta je to tablica simbola?
A

Pored toga što sintaksnom analizatoru predaje niz tokena leksički analizator treba da sačuva neke atribute tih tokena da bi oni bili kasnije iskorišćeni u toku generisanja koda. Na primer u fazi sintaksne analize važna je samo informacija da je na određenom mestu u nizu identifikator, a nije važno koji je to identifikator. Međutim u kasnije u fazi semantičke analize i u fazi generisanja koda, važno je koji je to identifikator, kakvog je tipa, da li je u pitanju skalar ili vektor i sl. Npr. kada se generiše listing grešaka bitno je koji je identifikator i u kojoj liniji se on nalazi.
Kako leksički analizator prvi dolazi u kontakt sa ulaznim kodom i kasnije ga transformiše on mora da sačuva te informacije za kasniju upotrebu. U te svrhe leksički analizator generiše tablicu simbola u koju smešta sve atribute relevantne za generisane tokene. Da bi se kasnije moglo pristupiti odgovarajućem slogu u tablici simbola uz token se, kao njegov atribut, prenosi i pointer na na taj slog.

35
Q
  1. Koje greške može da otkriva leksički analizator?
A

Greske koje moze da otkriva leksicki analizator su greske leksickog tipa, to jest da neka rec u program nije napisana kako treba.

36
Q
  1. Šta je i čemu služi LEX?
A

Lex je generator leksickih analizatora.

37
Q
  1. Objasniti kako radi LEX
A

Lex radi tako sto formira automat ciji se graf specificira preko regularnih izraza

38
Q
  1. Objasniti strukturu LEX specifikacije.
A

Lex specifikacija ima sledecu strukturu:
Ima import deo koji se ukljucuje u java kod bez provere
Deo sa definicijama makroa koji se koriste za specifikaciju pravila koja se prepoznaju
Ima deo koji sluzi da se definisu regularni izrazi koji se koriste za prepoznavanje odredjenih reci programskog jezika.

39
Q
  1. Objasniti šta je zadatak sintaksnog analizatora.
A

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.

40
Q
  1. Objasniti pojam levog i desnog izvođenja.
A

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 desna na levo – kada se zamenjuje prvi neterminalni simbil sa desne strane.

41
Q
  1. Objasniti koji se problem javlja kod nejednoznačno definisanih gramatika.
A

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.

42
Q
  1. Koja su to dva osnovna načina sintaksne analize?
A

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.

43
Q
  1. Opisati osnovni algoritam za Top-down analizu.
A

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

44
Q
  1. Šta je to problem leve rekurzije i kada se javlja?
A

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:
A  Ar, gde je AVn, 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.

45
Q
  1. Dati transformacije kojima se eliminiše leva rekurzija.
A

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:
𝐴→𝐴𝛼1 | 𝐴𝛼2 |⋯| 𝐴𝛼𝑛 |𝛽1 | 𝛽2 | ⋯|𝛽𝑚
Ovaj skup pravila moguće je zameniti sledećim skupom nerekurzivnih pravila: 𝐴→𝛽1 | 𝛽2 |⋯| 𝛽𝑚 | 𝛽1𝐴′|𝛽2 𝐴′|⋯| 𝛽𝑚𝐴′ 𝐴→∝1 | ∝2 |⋯|∝𝑛 |∝1𝐴′|∝2 𝐴′|⋯| ∝𝑛𝐴′′
Moguća je i sledeća transformacija: 𝐴→𝛽1𝐴′| 𝛽2𝐴′|⋯| 𝛽𝑚𝐴′
𝐴→∝1𝐴′ | ∝2𝐴′ |⋯| ∝𝑛𝐴′ | 𝜀

46
Q
  1. Šta je to indirektna rekurzija i kako se eliminiše?
A

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

47
Q
  1. Objasniti osnovni algoritam za Bottom-up analizu.
A

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 Top-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 analizom.

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.

48
Q
  1. Dati definiciju proste LL-1 gramatike.
A

Proste LL-1 gramatike su beskonteksne gramatike kod kojih je beskonteksna gramatika u kojoj sve
smene za isti neterminalni simbol započinju različitim terminalnim simbolima:
Primer 6.1 Prosta LL-1 gramatika
Gramatika G=({S, A}, {a, b, c, d}, S , P}, gde je P sledeći skup pravila:
ccA
A d
S bA
S aS




4.
3.
2.
POgledaj pdf

49
Q
  1. Kako je definisana Sintaksna tabela proste LL-1 gramatike?
A

U opštem slučaju Sintaksna tabela se sastoji od onoliko kolona koliko ima terminalnih sibola, a onoliko
vrsta koliko ima neterminalnih i terminalnih simbola zajedno. Polja tablice sintaksne analize se
popunjavaju tako da se u polju koje odgovara neterminalu A, i terminalu a, upisuje smena koja na levoj
strani ima neterminal A, a na desnoj strani reč koja počinje terminalom a, ako takva smena postoji. U
preseku vrste koja je označena terminalom i kolone koja je označena istim tip terminalom upisuje se
vrednost pop, dok se u preseku vrste i kolone koje su označene graničnim simbolom # upisuje vrednost
accept. Sva ostala polja su polja greške. Sintaksna tabela T(A, a), gde je A oznaka vrste, a a oznaka
kolone se formalno može definisati na sledeći način:
u svim ostalim slucajevima
( , ) ako je to pravilo
ako je # #
ako je
( , )
err
a i A a i
acc A a
pop A a, a
Pogledaj kod

50
Q
  1. Objasniti algoritam za sintaksnu analizu proste LL-1 gramatike.
A

Za razliku od osnovnog algoritma za Top-down analizu kod kojeg se pravila biraju na osnovu prvog
neterminalnog simbola sa leve strane u izvedenom nizu kod ovih analizatora odluka o pravilu koje će da
se primeni se donosi na osnovu slova u ulaznom nizu koje treba da se prepozna, na kome je trenutno
ulazni pokazivač. Primenjuje se pravilo koje će sigurno da generiše bar to slovo. Ovakvi analizatori su
poznati kao LL-1 analizatori (Look Left 1), gde cifra 1 ukazuje na to da se predikcija vrši na osnovu jednog
slova u ulaznom nizu. Generalno gledano mogu da se definišu i LL-k analizatori ali su LL-1 mnogo
upotrebljiviji.

51
Q
  1. Objasniti pojam leve faktorizacije.
A

Pokazali smo da se u slučaju LL-1 gramatika može vršiti prediktivna sintaksna analiza koja je mnogo
efikasnija od osnovnog algoritma za sintaksnu analizu. Veoma značajno u svemu tome je da se gramatike
koje ne zadovoljavaju uslov LL-1 gramatika mogu jednostavno transformisati u ovaj tip gramatika.
Naime, ukoliko u gramatici postoji veći broj pravila za isti neterminalni simbol koja na desnoj strani imaju
reči sa istim prefiksom, odnosno smene oblika:
gde su , , , , , * 1 2      V n  i AVn ,
takva gramatika sigurno nije LL-1 gramatika. Međutim ona se transformiše u LL-1 gramatiku sledećom
smenom:
A A
  
POGLEDAJ PDF

52
Q
  1. Dati definiciju funkije FIRST.
A

Ukoliko postoji smena oblika X → , definiše se funkcija FIRST() koja sadrži sve terminalne simbole
koji mogu da se nađu na početku reči izvedenih iz niza , tj:
V
t    
 
   

( ) | , ,
Ako je
* F
POGLEDAJ KOD

53
Q
  1. Dati definiciju funkcije FOLLOW.
A

Funkcija FOLLOW se definiše za neterminalne simbola, kao skup terminalnih simbola koji mogu u
toku izvođenja da se nađu iza tog neterminalnog simbola, ili:
Po definiciji FOLLOW funkcija startnog simbola gramatike sadrži granični simbol #.

Za odredjivanje FOLLOW funkcije neterminalnog simbola X posmatraju se desne strane pravila u
kojima se pojavljuje posmatrani simbol. Pri tome simbol X da desnoj strani smene može da se nađe u
jednom od sledećih konteksta:
Z   X x  xVt  xFOLLOW(X)
Z   XY  YVn  FIRST(Y)FOLLOW(X)

54
Q
  1. Dati definiciju LL-1 gramatika bez  pravila.
A

Beskonteksna gramatika bez  pravila je LL-1 gramatika ako su za sva pravila oblika:  | | | n 1 2   slupovi FIRST(α ), FIRST(α ), ,FIRST(α ) disjunktni po parovima, odnsno: FIRST(α ) FIRST(α ) , . i j    i  j

55
Q
  1. Kako se popunjava Sintaksna tabela kod LL-1 gramatika bez 
    pravila?
A

Sintaksna tabela za ovako definisane LL-1 gramatike definisana je sa:
u svim ostalim slucajevima
( , ) ako je ( ) i je to pravilo
ako je # #
ako je
( , )
err
i a FIRST A i
acc A a
pop A a, a, POGLEDAJ PDF

56
Q
  1. Kako se popunjava Sintaksna tabela kod LL-1 gramatika sa 
    pravilima?
A

Sintaksna tabela kod LL-1 gramatika sa  pravilima je nešto modifikovana u odnosu na prethodne
definicije. Naime sada je problem gde u tablici treba smestiti  pravila. Zbog toga je Sintaksna tabela
definisana na sledeći način:
u svim ostalim slucajevima
ili ( ) i je to pravilo i ( ),za A V
( , ) ako je ( ) i je to pravilo
ako je # #
ako je
( , )
n
err
a FOLLOW A A i FIRST
i a FIRST A i
acc A a
pop A a, a
Prema ovoj definiciji sledi da se  pravila upisuju u kolone terminalnih simbola koji pripadaju funkciji
FOLLOW za neterminalni simbol koji se preslikava u  .

57
Q
A