Difference between revisions of "Compiladores/Aula Prática 13"

From Wiki**3

< Compiladores
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{TOCright}}
 
{{TOCright}}
 
== Tópicos ==
 
== Tópicos ==
Processamento semântico e geração de código Postfix (optimizado).
+
Processamento semântico e geração de código Postfix. Optimização.
  
 
== Exercício 1 ==
 
== Exercício 1 ==
 
Considere a seguinte função em C:
 
Considere a seguinte função em C:
  
<c>
+
<source lang="c">
 
int find(int tab[], int max, int val) {  
 
int find(int tab[], int max, int val) {  
 
   int i;  
 
   int i;  
Line 14: Line 14:
 
   return i;  
 
   return i;  
 
}  
 
}  
</c>
+
</source>
  
 +
# 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.
 
# Identifique as optimizações independentes da máquina que são possíveis.
# Traduza para código Postfix optimizado a função acima.
 
# Identifique os blocos básicos.
 
  
 
== Exercício 2 ==
 
== Exercício 2 ==
  
Escreva em código Postfix 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.
+
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 ==
 
== Exercício 3 ==
Line 28: Line 28:
 
Considere a seguinte função em C:
 
Considere a seguinte função em C:
  
<c>
+
<source lang="c">
 
int main() {  
 
int main() {  
 
   int a[10], i = 1;  
 
   int a[10], i = 1;  
Line 35: Line 35:
 
   return 0;  
 
   return 0;  
 
}
 
}
</c>
+
</source>
  
 +
# Traduza-a para código Postfix '''não optimizado''' a função acima.
 
# Identifique os blocos básicos.
 
# Identifique os blocos básicos.
 
# Que optimizações poderiam ser efectuadas?
 
# Que optimizações poderiam ser efectuadas?

Latest revision as of 02:06, 8 December 2018

Tópicos

Processamento semântico e geração de código Postfix. Optimização.

Exercício 1

Considere a seguinte função em C:

int find(int tab[], int max, int val) { 
  int i; 
  for (i = 0; i < max; i++) 
    if (tab[i] == val) 
      break; 
  return i; 
}
  1. Traduza para código Postfix não optimizado a função acima.
  2. Identifique os blocos básicos.
  3. 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:

int main() { 
  int a[10], i = 1; 
  a[0] = 0; 
  while (i < 10) a[i++] = a[i-1] + 2 * i - 1; 
  return 0; 
}
  1. Traduza-a para código Postfix não optimizado a função acima.
  2. Identifique os blocos básicos.
  3. Que optimizações poderiam ser efectuadas?

Resolução