Compiladores/Aula Prática 12: Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
| (8 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{TOCright}} | |||
== Tópicos == | == 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: | ||
<source lang="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; | |||
} | |||
</source> | |||
== Exercício 2 == | |||
Traduza para Postfix (não optimizado) a seguinte função escrita em C: | |||
<source lang="c"> | |||
int main() { | |||
extern void printd(double); | |||
double d, e; | |||
d = e = 3.3e-2; | |||
printd(d + e); | |||
return 0; | |||
} | |||
</source> | |||
== Exercício 3 == | |||
Traduza para Postfix (não optimizado) a seguinte função escrita em C: | |||
<source lang="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; | |||
} | |||
} | |||
</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 == | |||
* Ver: [[Code Generation]]. Procurar resolver sem consultar. | |||
[[category:Compiladores]] | [[category:Compiladores]] | ||
[[category:Ensino]] | [[category:Ensino]] | ||
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.