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

From Wiki**3

< Compiladores
(Tópicos)
(Problema)
Line 3: Line 3:
 
Processamento semântico e geração de código Postfix (não optimizado).
 
Processamento semântico e geração de código Postfix (não optimizado).
  
== Problema ==
+
== Exercício 1 ==
 +
Considere em C uma variável declarada '''static''' no corpo de uma função:
 +
 
 +
# Indique justificadamente qual a área de memória de dados a que pertence.
 +
# Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função.
 +
# Caso a função que contém a variável '''static''' seja invocada recursivamente, quantas instâncias da variável existem e, caso existam múltiplas, os valores são iguais ou distintos? Justifique.
 +
# Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar ''dangling references''.
 +
 
 +
== Exercício 2 ==
 +
Discuta as diferenças, se existirem, entre as variáveis '''x''' e '''y''', declaradas como se segue, na linguagem C:
 +
 
 +
<c>
 +
char *x = "cadeia de caracteres";
 +
char y[] = "cadeia de caracteres";
 +
</c>
 +
 
 +
== Exercício 3 ==
 +
Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.
 +
 
 +
== Exercício 4 ==
 +
Considere a tabela de símbolos fornecida com a CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes?
 +
 
 +
== Exercício 5 ==
 +
Considere uma função, denominada '''raizes''', que recebe três argumentos correspondentes aos factores de uma equação de 2º grau ''(ax²+bx+c)'' e que calcula o número de raizes.
 +
 
 +
Escreva a sequência de instruções Postfix correspondentes à implementação da função '''raizes'''.
 +
 
 +
== Exercício 6 ==
 +
Traduza para código Postfix a seguinte função escrita em C:
 +
 
 +
<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;
 +
}
 +
</c>
  
 
== Resolução ==
 
== Resolução ==

Revision as of 18:21, 9 February 2015

Tópicos

Processamento semântico e geração de código Postfix (não optimizado).

Exercício 1

Considere em C uma variável declarada static no corpo de uma função:

  1. Indique justificadamente qual a área de memória de dados a que pertence.
  2. Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função.
  3. Caso a função que contém a variável static seja invocada recursivamente, quantas instâncias da variável existem e, caso existam múltiplas, os valores são iguais ou distintos? Justifique.
  4. Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar dangling references.

Exercício 2

Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C:

<c> char *x = "cadeia de caracteres"; char y[] = "cadeia de caracteres"; </c>

Exercício 3

Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.

Exercício 4

Considere a tabela de símbolos fornecida com a CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes?

Exercício 5

Considere uma função, denominada raizes, que recebe três argumentos correspondentes aos factores de uma equação de 2º grau (ax²+bx+c) e que calcula o número de raizes.

Escreva a sequência de instruções Postfix correspondentes à implementação da função raizes.

Exercício 6

Traduza para código Postfix a seguinte função escrita em C:

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

} </c>

Resolução

As ligações acima contêm as soluções para os exercícios propostos.

Procurar resolver sem consultar.