Buscar

COMPILADORES Atividade 05 - Introdução à compilação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1)
int w, x, y, z; // Declaração das variáveis w, x, y e z
int i = 4; int j = 5; // Inicialização das variáveis i e j com os valores 4 e 5, respectivamente
{ // Início do primeiro bloco
int j = 7; // Declaração e inicialização da variável j local com o valor 7
i = 6; // Atribuição do valor 6 à variável i
w = i + j; // Atribuição da soma de i e j à variável w
} // Fim do primeiro bloco
x = i + j; // Atribuição da soma de i e j à variável x
{ // Início do segundo bloco
int i = 8; // Declaração e inicialização da variável i local com o valor 8
y = i + j; // Atribuição da soma de i e j à variável y
} // Fim do segundo bloco
z = i + j; // Atribuição da soma de i e j à variável z
· w: Dentro do primeiro bloco, i é atualizado para 6 e j local é 7, então w = 6 + 7 = 13
· x: Fora dos blocos, i é mantido como 6 e j global é 5, então x = 6 + 5 = 11
· y: Dentro do segundo bloco, i local é 8 e j é 5, então y = 8 + 5 = 13
· z: Fora dos blocos, i é mantido como 6 e j é 5, então z = 6 + 5 = 11
Portanto, os valores atribuídos serão:
w x y z
13 11 13 11
2)
int w, x, y, z; // Declaração das variáveis w, x, y e z
int i = 3; int j = 4; // Inicialização das variáveis i e j com os valores 3 e 4, respectivamente
{ // Início do primeiro bloco
int i = 5; // Declaração e inicialização da variável i local com o valor 5
w = i + j; // Atribuição da soma de i e j à variável w
} // Fim do primeiro bloco
x = i + j; // Atribuição da soma de i e j à variável x
{ // Início do segundo bloco
int j = 6; // Declaração e inicialização da variável j local com o valor 6
i = 7; // Atribuição do valor 7 à variável i
y = i + j; // Atribuição da soma de i e j à variável y
} // Fim do segundo bloco
z = i + j; // Atribuição da soma de i e j à variável z
· w: Dentro do primeiro bloco, i local é 5 e j é 4, então w = 5 + 4 = 9
· x: Fora dos blocos, i global é 3 e j global é 4, então x = 3 + 4 = 7
· y: Dentro do segundo bloco, i é atualizado para 7 e j local é 6, então y = 7 + 6 = 13
· z: Fora dos blocos, i global é 7 e j global é 4, então z = 7 + 4 = 11
Portanto, os valores atribuídos serão:
w x y z
9 7 13 11
3)
{ int w, x, y, z; /* Bloco B1 */
{ int x, z; /* Bloco B2 */
{ int w, x; /* Bloco B3 */ }
}
{ int w, x; /* Bloco B4 */
{ int y, z; /* Bloco B5 */ }
}
}
· Bloco B1
int w, x, y, z: Escopo dentro do Bloco B1.
· Bloco B2:
int x, z: Escopo dentro do Bloco B2.
Esta declaração de x e z tem precedência sobre as declarações no Bloco B1.
· Bloco B3:
int w, x: Escopo dentro do Bloco B3.
Esta declaração de w e x tem precedência sobre as declarações no Bloco B1 e Bloco B2.
· Bloco B4:
int w, x: Escopo dentro do Bloco B4.
Esta declaração de w e x tem precedência sobre as declarações no Bloco B1, Bloco B2 e Bloco
B3.
· Bloco B5:
int y, z: Escopo dentro do Bloco B5.
Esta declaração de y e z tem precedência sobre as declarações no Bloco B1, Bloco B2, Bloco B3 e
Bloco B4.
As declarações dentro de cada bloco podem ocultar as declarações com os mesmos nomes de blocos
externos. Isso é conhecido como escopo léxico ou escopo estático.
4)
#define a (x+1)
int x = 2;
void b() { x = a; printf("%d\n", x); }
void c() { int x = 1; printf("%d\n"), a; }
void main() {b(); c(); }
· #define a (x+1)
Define uma macro a que expande para x + 1
· int x = 2;
Declara e inicializa a variável global x com o valor 2
· void b() { x = a; printf("%d\n", x); }
Define uma função b() que atribui o valor de a (ou seja, x + 1) à variável global x e imprime o
valor resultante
· void c() { int x = 1; printf("%d\n"), a; }
Define uma função c() que declara e inicializa uma variável local x com o valor 1 e imprime o
valor de a (ou seja, x + 1).
No entanto, há um erro de sintaxe, pois a chamada printf("%d\n"), a; está fora dos parênteses da
função printf
· void main() {b(); c(); }
Chama as funções b() e c()
Ao executar as funções e ver o resultado:
· Na função b(), x é atribuído com x + 1, que é 2 + 1, resultando em x = 3
· Na função c(), dentro do escopo da função c(), a variável local x é 1, então a é substituído por x +
1, que é 1 + 1, resultando em a = 2.
Entretanto, há um erro de sintaxe na função c(), então a chamada printf("%d\n"), a; não será
executada corretamente.
Ao executar o programa, será impresso:
O segundo valor que deveria ser impresso não será exibido devido ao erro de sintaxe na função c()
3

Outros materiais