Date su sledeće funkcije u jeziku koji liči na C
f(x) { return g(x= x*2);}
g(x) { y=1; h(y); return x+y+x;}
h(x) { x= x+5; return 0;}
main(){ print(f(7));}
Sve funkcije mogu predavati argumente na 2 načina: po vrijednosti i po referenci. Kako treba
predavati argumente u funkcijama f, g i h da bi rezultat izvršavanja datog programa bio: a)
29 b) 34
2. Napisati KS gramatiku G tako da je L(G) skup svih formula iskaznog računa. Koristiti
logičke veznike AND, OR i NOT, konstante TRUE i FALSE i promjenljive. Promjenljivoj se
može dodijeliti vrijednost pomoću operatora =. Podrazumijevani prioritet veznika može se
promijeniti uvođenjem zagrada.
(a) Prikazati sintaksno drvo za ulazni niz x=TRUE y=FALSE z= (x OR not y) AND FALSE
OR NOT X.
(b) Napisati bison/yacc datoteku koja implementira kalkulator logičkih izraza. Vaš program
treba da učitava podatke sa komandne linije ili iz datoteke koja se zadaje kao komandni
parametar i treba da štampa rezultat na komandnu liniju. Potrebno je obraditi greške.
Imena promjenljivih definišu se kao u jeziku Decaf.
(c) Dodati atribute pravilima gramatike G tako da početni simbol grmatike ima atribut koji
je pokazivač na korijen apstraktnog sintaksnog drveta koje odgovara datom logičkom
programu.
3. Dat je sljedeći C++ program. Prikazati izgled memorije kada se to traži od vas. Potrebo je
nacrtati dvije slike. Na svakoj slici prikazati šta se nalazi na steku a šta na heapu.
Pokazivače prikazati strelicama. Memoriju koja postane nedostupna označiti simbolom ???.
void Tuesday(int *lei, int *eric, int mehran){
eric[2] = 9;
mehran = eric[0] + *(eric + 2) / 2;
eric[1] = lei[0];
*lei = 5;
lei = new int[mehran];
// Nacrtati stanje memorije u ovom trenutku
}
int Monday(int *x, int *y, int *z){
int arr[4] = {0, 1, 2, 3};
int i;
z = y;
y = &(x[1]);
x = new int[*z];
for(i = 0; i < *z; i++) {
*(x + i) = *(arr + i) * 2;
}
*y = *z + 4;
Tuesday(z, y, *x);
x[1] = 13;
return (*z + x[2]);
}
int main(){
int mehran, *eric, justin = 4, lei;
lei = 3;
eric = new int[justin];
justin = Monday(eric, &lei, &mehran);
// Nacrtati stanje memorije u ovom trenutku
return 0;
}
4. Napisati međuprogramsku reprezentaciju za sljedeći C program:
float m[13]; /*zadatak 2*/
int IsEven(int x){ if (0 == (x%2)) return 1; return 0; }
int niz(float x,float y){
int i,j; float a;
j=16;
for(i=1;i<=12; i++, j =
3){
a=IsEven(x);
m=m[i1]*
(x+2.0)
2*a1;
}
if(m[12]=<1) return 0;
return 1;
}