Compiladores/Aula Prática 11: Difference between revisions
From Wiki**3
< Compiladores
| 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).  | ||
==   | == 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 16: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:
- 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
As ligações acima contêm as soluções para os exercícios propostos.
Procurar resolver sem consultar.