Програмски преводиоци 1/К1 2012 — разлика између измена
м (Ispravka) |
м (Поништена измена бр. 6432 корисника KockaAdmiralac (разговор)) ознака: поништење |
||
(Нису приказане 2 међуизмене 2 корисника) | |||
Ред 94: | Ред 94: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Potisna tabela | |+ Potisna tabela | ||
! | ! Stanje | ||
! | ! <S> !! ─┤ !! ( !! <A> !! ) !! , !! b !! a | ||
! | |||
! | |||
! | |||
! | |||
! | |||
! | |||
|- | |- | ||
! | ! ∇ | ||
| | | <S><sub>0</sub> || || (<sub>1</sub> || || || || || | ||
| | |- | ||
| | ! <S><sub>0</sub> | ||
| | | || ─┤<sub>0</sub> || || || || || || | ||
| | |- | ||
| | ! ─┤<sub>0</sub> | ||
| | | || || || || || || || | ||
|- | |||
! (<sub>1</sub> | |||
| <S><sub>2</sub> || || (<sub>1</sub> || <A><sub>1</sub> || || || || a<sub>3</sub> | |||
|- | |||
! <A><sub>1</sub> | |||
| || || || || )<sub>1</sub> || || || | |||
|- | |||
! )<sub>1</sub> | |||
| || || || || || || || | |||
|- | |||
! <S><sub>2</sub> | |||
| || || || || || ,<sub>2</sub> || || | |||
|- | |||
! ,<sub>2</sub> | |||
| || || || || || || b<sub>2</sub> || | |||
|- | |||
! b<sub>2</sub> | |||
| || || || || || || || | |||
|- | |||
! a<sub>3</sub> | |||
| || || || || || || || | |||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Kontrolna tabela | |+ Kontrolna tabela | ||
! | ! Stanje | ||
! | ! Akcija | ||
|- | |||
! ∇ | |||
| SHIFT | |||
|- | |||
! <S><sub>0</sub> | |||
| SHIFT | |||
|- | |||
! ─┤<sub>0</sub> | |||
| ACCEPT | |||
|- | |||
! (<sub>1</sub> | |||
| SHIFT | |||
|- | |||
! <A><sub>1</sub> | |||
| SHIFT | |||
|- | |||
! )<sub>1</sub> | |||
| REDUCE(1) | |||
|- | |||
! <S><sub>2</sub> | |||
| SHIFT | |||
|- | |||
! ,<sub>2</sub> | |||
| SHIFT | |||
|- | |||
! b<sub>2</sub> | |||
| REDUCE(2) | |||
|- | |- | ||
! | ! a<sub>3</sub> | ||
| | | REDUCE(3) | ||
|} | |} | ||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:Програмски преводиоци 1]] | [[Категорија:Програмски преводиоци 1]] |
Тренутна верзија на датум 24. август 2023. у 16:27
Prvi kolokvijum 2012. godine održan je 26. oktobra i trajao je 1.5 sat. Postavka roka dostupna je sa stranice predmeta.
1. zadatak
Postavka
Robot se kreće po pravougaonoj rešetki. Može da ide napred (f), skrene levo (l), ili skrene desno (r).
- Konstruisati konačni automat koji opisuje one i samo one sekvence pokreta koje robota dovode u isti pravac i smer kretanja kao i na početku.
- Konstruisati bezkontekstnu gramatiku koja opisuje isti skup sekvenci kao i pod a).
Rešenje
f | l | r | Prihvata | |
---|---|---|---|---|
N | N | W | E | 1 |
W | W | S | N | 0 |
E | E | N | S | 0 |
S | S | E | W | 0 |
Bezkontekstna gramatika je:
- <N> → ε
- <N> → f <N>
- <N> → l <W>
- <N> → r <E>
- <W> → f <W>
- <W> → l <S>
- <W> → r <N>
- <E> → f <E>
- <E> → l <N>
- <E> → r <S>
- <S> → f <S>
- <S> → l <E>
- <S> → r <W>
2. zadatak
Postavka
Napisati regularni izraz kojim se opisuju sve sekvence koje:
- počinju jednim ili više malih slova engleske abecede, nakon kojih se pojavljuje
- ili nula ili više znakova iz skupa cifara od 5 do 9 i velikih slova engleske abecede (poređanih u proizvoljnom redosledu, tj. mešaju se slova i cifre).
- ili se pojavljuje jedan ili više brojeva iz opsega od 0 do 4.
Rešenje
[a-z]+([5-9A-Z]*|[0-4]+)
3. zadatak
Postavka
Napisati gramatiku kojom se definišu pravila formiranja izraza u hipotetičkom programskom jeziku. Postoje dva binarna operatora: operator "$" i operator "#". Operator "$" je levo asocijativan i ima veći prioritet od operatora "#", koji je desno asocijativan. Izrazi se sastoje od identifikatora (IDENT) i konstanti (CONST) između kojih se navode dati operatori. Binarni operator se piše između svoja dva operanda. IDENT i CONST su terminalni simboli. Gramatika ne sme biti višeznačna.
Primer izraza: a$2$3 # b$3 # c
Rešenje
- <expr> → <dollar_expr> # <expr>
- <expr> → <dollar_expr>
- <dollar_expr> → <dollar_expr> $ <term>
- <dollar_expr> → <term>
- <term> → <IDENT>
- <term> → <CONST>
4. zadatak
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Postavka
Na osnovu zadate gramatike konstruisati LR(0) parser. Nacrtati LR(0) karakteristični automat (prepoznavač ručki), nacrtati potisnu i kontrolnu tabelu.
- <S> → (<A>)
- <A> → <S>, b
- <A> → a
Prikazati rad parsera kada se na ulaz dovede sledeća ulazna sekvenca: ((a),b)
Rešenje
Stanje | <S> | ─┤ | ( | <A> | ) | , | b | a |
---|---|---|---|---|---|---|---|---|
∇ | <S>0 | (1 | ||||||
<S>0 | ─┤0 | |||||||
─┤0 | ||||||||
(1 | <S>2 | (1 | <A>1 | a3 | ||||
<A>1 | )1 | |||||||
)1 | ||||||||
<S>2 | ,2 | |||||||
,2 | b2 | |||||||
b2 | ||||||||
a3 |
Stanje | Akcija |
---|---|
∇ | SHIFT |
<S>0 | SHIFT |
─┤0 | ACCEPT |
(1 | SHIFT |
<A>1 | SHIFT |
)1 | REDUCE(1) |
<S>2 | SHIFT |
,2 | SHIFT |
b2 | REDUCE(2) |
a3 | REDUCE(3) |