|
|
(2 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| {{TOCright}}
| | #REDIRECT [[ist:Compiladores/Aula Prática 11]] |
| == 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'''. Utilize apenas variáveis globais.
| |
| | |
| == 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ções ==
| |
| * Ver: [[Code Generation]]. Procurar resolver sem consultar.
| |
| | |
| [[category:Compiladores]] | |
| [[category:Ensino]]
| |