Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

Programski prevodioci, prvi kolokvijum, G1, rjeenja 1. Teorija a. Dati primjer jasne gramatike koja nije LR(1) gramatika.

Obrazloiti odgovor. Rjeenje: G: S A x y | B x z , A a, B a. U L(G) postoje 2 stringa, svaki ima jedinstvenu derivaciju ali G nije LR(1). Za string koji po inje sa ax, poslije shift-a simbola a, parser treba da odredi koju redukciju da odradi A a ili B a. Ovo nije mogu e odrediti samo na osnovu simbola x. b. Koliko ima rije i u L(G) ako je G: SaS. R: 0 c. Data je gramatika SA|B, Aa|c, Bb|c. Koji od slede ih parsera LL(1), SLR(1), LR(1) moe parsirati stringove date gramatike i zato? R: Gramatika je nejasna (izvedite string c sa dva razli ita drveta), pa nijedan od prsera ne moe ih obraditi. Moe si ivoditi lompletno izvo enje, ali je to gubljenje vremena. d. Zaokrui ta an odgovor: i. SLR(1) parseri prepoznaju vie jezika od LL(1). DA NE ii. Dvije razli ite derivacije mogu imati isto drvo. DA NE iii. Gramatika je nejasna ako postoji vie derivacija za isti ulazni niz. DA NE iv. Postoji derivacija koje nije ni lijeva ni desna. DA NE v. U tabeli prediktivnog parsera postoji samo jedno polje "Accept". DA NE vi. String x je u jeziku L(G) gramatike G ako svaka derivacija koja po inje iz startnog simbola kreira x. DA NE vii. LR parser nikada ne e uraditi Shift u stanje greke. DA NE viii. Sve lijevo rekurzivne gramatike su nejasne. DA NE 2. Integer literali u jeziku PG formiraju se na sljede i nacin: Oktalni literali - vode a 0 i zatim nula ili vie oktalnih cifara, najvie 12 cifara; Heksadecimanil literali - vode a 0, zatim x ili X a zatim nula ili vie heksadecimalnih cifara (0-9, a-f, A-F), najvie 8 cifara; Decimalni literali jedna nenulta decimalna cifra i zatim nula ili vie decimalnih cifara, najvie 16 cifara. a. Napisati regularni izraz koji opisuje cjelobrojne literale u jeziku PG. Koristiti FLEX notaciju. R: 0(0-7)*| 0(x|X)(0-9|a-f|A-F)+ | (1-9)(0-9)* b. Nacrtati odgovaraju i DKA (ne praviti NKA).

c. Napisati FLEX program koji u itava sve aritmeti ke izraze sastavljene od integer literala jezika PG i operatora +, -, *, i /. Program zamjenjuje leksime integer literala porukama OCT, DEC ili HEX. Na primjer, za ulaz 123-0x456+0336 daje slede i izlaz: DECHEX+OCT. Rjeenje: Jedno mogu e rjeenje je: %% 0[0-7]{0,12} {printf("OCT");} 0[xX][0-9a-fA-F]{0,8} {printf("HEX");} [1-9][0-9]{0,16} {printf("DEC");} ["+""-""*""/"] {printf("%s", yytext);} %% 3. Data je gramatika G1: HL=E, Eid|int|ET, T+ET|, Lid|id[E]. Napomena: simbol T ozna en utom bojom je zbog greke u kucanju bio viak, pa se gramatika nije mogla svesti na LL(1) gramatiku eliminisanjem lijeve rekurzije i lijevim faktorisanjem. to je bila namjera zadatka. Svi studenti koji su radili lijevo faktorisanje i eliminisali lijevu rekurziju dobili us bodove. a. Da li je L(G1) kona an ili beskona an? Obrazloiti odgovor. R: Beskona an, moe praviti proizvoljan broj sabiraka. b. Ako je x id a 34 int, koji od sljede ih 6 stringova pripadaju jeziku L(G1): c. Transformisati datu gramatiku u ekvivalentnu LL(1) gramatiku G2. R: Eliminie se lijeva rekurzija EET i izdvoji zajedni ki prefiks u Lid|id[E]. d. Konstruisati tabelu parsera za gramatiku G2. e. Prikazati rad parsera na prvom od datih stringova iz ta ke b. 4. Data je gramatika G: SiSeS|iS|a, gdje iS ozna ava apstrakciju za if E then S, e ozna ava else. a. Konstruisati tabelu SLR(1) parsera za gramatiku G. b. Razrijeiti konflikte u tabeli koriste i pravila programskog jezika C. Rjeenje: u knjizi je prikazana tabela parsera slike 4.48 i 4.49. Konflikt postoji kod simbola e (else), jer nije jasno da li treba raditi shift ili reduce. Bira se shift. 5. Regularni izrazi, automati i gramatike a. Dat je jezik L iji su karakteri "/", "#" i "z". Komentari u jeziku L po inju sa "/#" a zavravaju se sa prvim sljede im "#/". Komentari se ne mogu ugnjedavati. Nacrtati dijagram stanja DKA koji prepoznaje ta no jedne komentare u jeziku L i nita vie. b. Napisati regularni izraz nad alfabetom {0,1} za sve stringove koji ne po inju sa 11. c. Napisati regularni izraz nad alfabetom {0,1} za sve neparne binarne brojeve. d. Napisati regularni izraz nad alfabetom {0,1} za sve binarne brojeve ve e od 41. e. Napisati gramatiku koja generie isti jezik kao i regularni izraz iz ta ke b. Rjeenja: a.
x[34]=x 2 x= x[34] x[x[34]] x= 34) x=(x[34]+34) x=x+x+x

b. |0|1|(00|10|01)(0|1)* c. (0|1)*1 ovaj izraz uklju uje vode e nule d. 41 = 101001, pa je regularni izraz 1(0|1)1(0|1)1(0|1) e. S | 0 | 1 | 00A | 10A | 01A , A | 0A | 1A

You might also like