Програмски преводиоци 1/Јануар 2024
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Januarski ispit 2024. godine održan je 18. januara i trajao je 150 minuta. Postavka roka nije dostupna sa stranice predmeta.
1. zadatak
Postavka
Dat je sledeći kod na programskom jeziku C.
int f1(int a) {
int b = a;
b = b + 1;
return b;
}
int f2(int a) {
int b = a;
b = b + f1(1);
return b;
}
int m(int a, int n, int (*m1)(int), int(*m2)(int)) {
int tmp1, int tmp2;
tmp1 = f1(a);
tmp2 = f2(a);
if (n == 0) {
return 1;
} else {
return tmp2 * m(tmp1, n - 1, m1, m2);
}
}
int main() {
printf("%d", m(1, 3, &f1, &f2));
return 0;
}
- Dati ispis programa;
- Dati izgled steka nakon poslednjeg poziva funkcije
f2
; - Dati x86 kod za funkciju
f2
.
Rešenje
2. zadatak
Postavka
Data je sledeća gramatika:
- <S> -> <S>a
- <S> -> <S><A>b
- <S> -> eps
- <A> -> a
- <A> -> b
- Konstruisati automat i kontrolnu tabelu SLR(1) automata
- Ispraviti gramatiku tako da se ukloni konflikt ali semantika ostane ista.
Rešenje
3. zadatak
Postavka
Date su sledeće gramatike:
Gramatika A:
- <P> -> o <P> <P>
- <P> -> v
Gramatika B:
- <P> -> <P> o <P>
- <P> -> v
Gramatika C:
- <P> -> <P> <P> o
- <P> -> v
Gramatika D:
- <P> -> v <Q>
- <Q> -> <P> o <Q>
- <Q> -> eps
Gramatika E
- <P> -> v <P> o
- <P> -> v
- Koje su dve gramatike iste?
- Dokazati na primeru neke sekvence da se ostale 3 gramatike razlikuju.
Rešenje
4. zadatak
Postavka
Napisati funkciju static Obj find(String name, boolean isGlobal)
za mikrojavu, koja se ponaša kao operator ::
ako je isGlobal=true
. Traženu funkciju pisati od nule.
public class Tab {
public static final Struct
noType = new Struct(Struct.None),
intType = new Struct(Struct.Int),
charType = new Struct(Struct.Char),
nullType = new Struct(Struct.Class);
public static final Obj noObj = new Obj(Obj.Var, "noObj", noType);
public static Obj chrObj, ordObj, lenObj;
public static Scope currentScope;
private static int currentLevel; //universe == -1
public static Obj find(String name, boolean isGlobal);
}
Rešenje
5. zadatak
Postavka
Za dati regularni izraz (a | (bc)*)+ d (c | ε)+
konstruisati DKA.
Rešenje
6. zadatak
Postavka
Za sledeći kod napisati Mikrojava bajtkod.
int b;
const int one = 1;
class A {
int[] niz;
int calc(int a) {
...nebitno
}
}
class B extends A {
int calc(int a) {
...isto nebitno
}
}
int f(int c)
{
if (c > 10) return c;
else return c + 1;
}
void main()
int x, y; A c;
{
read(b);
b = f(b);
c = new B;
x = 0;
do {
if (x % 2 == 0) y = c.calc(b);
else y = y + (b + one);
x++;
} while (x < 5);
}