Compiladores/Aula Prática 12: Difference between revisions
From Wiki**3
No edit summary |
|||
| (4 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
Traduza para Postfix (não optimizado) a seguinte função escrita em C: | Traduza para Postfix (não optimizado) a seguinte função escrita em C: | ||
<c> | <source lang="c"> | ||
int *click(int *x, int dim) { | int *click(int *x, int dim) { | ||
int *res, i; | int *res, i; | ||
for (i = dim -2, res = x+dim -1; i >= 0; i-- ) | for (i = dim-2, res = x+dim-1; i >= 0; i--) | ||
if (x [i ] > *res ) res = &x [i ]; | if (x[i] > *res) res = &x[i]; | ||
return res; | return res; | ||
} | } | ||
</ | </source> | ||
== Exercício 2 == | == Exercício 2 == | ||
Traduza para Postfix (não optimizado) a seguinte função escrita em C: | Traduza para Postfix (não optimizado) a seguinte função escrita em C: | ||
<c> | <source lang="c"> | ||
int main() { | int main() { | ||
extern void printd ( double ); | extern void printd(double); | ||
double d, e; | double d, e; | ||
d = e = 3.3e-2; | d = e = 3.3e-2; | ||
printd (d + e ); | printd(d + e); | ||
return 0; | return 0; | ||
} | } | ||
</ | </source> | ||
== Exercício 3 == | == Exercício 3 == | ||
Traduza para Postfix (não optimizado) a seguinte função escrita em C: | Traduza para Postfix (não optimizado) a seguinte função escrita em C: | ||
<c> | <source lang="c"> | ||
void isort(int a[], int length) { | void isort(int a[], int length) { | ||
for (int i = 0; i < length; i++) { | for (int i = 0; i < length; i++) { | ||
| Line 37: | Line 37: | ||
a[j + 1] = a[j]; | a[j + 1] = a[j]; | ||
} | } | ||
a[ | a[i + 1] = v; | ||
} | } | ||
} | } | ||
</c> | </source> | ||
== Exercício 4 == | |||
Traduza para código Postfix a seguinte função escrita em C: | |||
<source lang="c"> | |||
int main() { | |||
int n = 45, i = 0, j = 1, *seg = &i; | |||
while (n-- > 0) { | |||
print(*seg = i + j); | |||
seg = (seg == &i) ? &j : &i; | |||
} | |||
return 0; | |||
} | |||
</source> | |||
== Resoluções == | == Resoluções == | ||
Latest revision as of 00:07, 8 December 2018
Tópicos
Processamento semântico e geração de código Postfix (não optimizado).
Exercício 1
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
int *click(int *x, int dim) {
int *res, i;
for (i = dim-2, res = x+dim-1; i >= 0; i--)
if (x[i] > *res) res = &x[i];
return res;
}
Exercício 2
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
int main() {
extern void printd(double);
double d, e;
d = e = 3.3e-2;
printd(d + e);
return 0;
}
Exercício 3
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
void isort(int a[], int length) {
for (int i = 0; i < length; i++) {
int v = a[i];
for (int j = i - 1; j >= 0; j--) {
if (a[j] <= v) break;
a[j + 1] = a[j];
}
a[i + 1] = v;
}
}
Exercício 4
Traduza para código Postfix a seguinte função escrita em C:
int main() {
int n = 45, i = 0, j = 1, *seg = &i;
while (n-- > 0) {
print(*seg = i + j);
seg = (seg == &i) ? &j : &i;
}
return 0;
}
Resoluções
- Ver: Code Generation. Procurar resolver sem consultar.