| 
				     | 
				
| 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]]
  |  |