|
|
Line 1: |
Line 1: |
| {{TOCright}}
| | #REDIRECT [[ist:Compiladores/Aula Prática 13]] |
| == Tópicos ==
| |
| Processamento semântico e geração de código Postfix. Optimização.
| |
| | |
| == Exercício 1 ==
| |
| Considere a seguinte função em C:
| |
| | |
| <c>
| |
| int find(int tab[], int max, int val) {
| |
| int i;
| |
| for (i = 0; i < max; i++)
| |
| if (tab[i] == val)
| |
| break;
| |
| return i;
| |
| }
| |
| </c>
| |
| | |
| # Traduza para código Postfix '''não optimizado''' a função acima.
| |
| # Identifique os blocos básicos.
| |
| # Identifique as optimizações independentes da máquina que são possíveis. | |
| | |
| == Exercício 2 ==
| |
| | |
| Escreva em código Postfix '''não optimizado''' uma função que recebe os valores dos três coeficientes de uma equação de 2º grau ''(ax² + bx + c)'' e devolve o número de raizes. Que optimizações poderia fazer a nível do código Postfix?
| |
| | |
| == Exercício 3 ==
| |
| | |
| Considere a seguinte função em C:
| |
| | |
| <c>
| |
| int main() {
| |
| int a[10], i = 1;
| |
| a[0] = 0;
| |
| while (i < 10) a[i++] = a[i-1] + 2 * i - 1;
| |
| return 0;
| |
| }
| |
| </c>
| |
| | |
| # Traduza-a para código Postfix '''não optimizado''' a função acima.
| |
| # Identifique os blocos básicos.
| |
| # Que optimizações poderiam ser efectuadas?
| |
| | |
| == Resolução ==
| |
| | |
| [[category:Compiladores]]
| |
| [[category:Ensino]]
| |