Програмски преводиоци 1/Јануар 2024
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите СИ Wики тако што ћете га решити.
Јануарски испит 2024. године одржан је 18. јануара и трајао је 150 минута. Поставка рока није доступна са странице предмета.
1. задатак
Поставка
Дат је следећи код на програмском језику 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;
}
- Дати испис програма;
- Дати изглед стека након последњег позива функције
f2; - Дати x86 код за функцију
f2.
Решење
2. задатак
Поставка
Дата је следећа граматика:
- <С> -> <С>а
- <С> -> <С><А>б
- <С> -> епс
- <А> -> а
- <А> -> б
- Конструисати аутомат и контролну табелу СЛР(1) аутомата
- Исправити граматику тако да се уклони конфликт али семантика остане иста.
Решење
3. задатак
Поставка
Дате су следеће граматике:
Граматика А:
- <П> -> о <П> <П>
- <П> -> в
Граматика Б:
- <П> -> <П> о <П>
- <П> -> в
Граматика C:
- <П> -> <П> <П> о
- <П> -> в
Граматика D:
- <П> -> в <Q>
- <Q> -> <П> о <Q>
- <Q> -> епс
Граматика Е
- <П> -> в <П> о
- <П> -> в
- Које су две граматике исте?
- Доказати на примеру неке секвенце да се остале 3 граматике разликују.
Решење
4. задатак
Поставка
Написати функцију static Obj find(String name, boolean isGlobal) за микројаву, која се понаша као оператор :: ако је isGlobal=true. Тражену функцију писати од нуле.
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; //tekuci opseg
private static int currentLevel; //nivo ugnezdavanja tekuceg opsega
public Obj find(String name, boolean isGlobal);
}
Решење
5. задатак
Поставка
За дати регуларни израз (a | (bc)*)+ d (c | ε)+ конструисати ДКА.
Решење
6. задатак
Поставка
За следећи код написати Микројава бајткод.
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);
}