Buscar

Semântica de linguagens de programação - Compiladores - Exercícios

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

Prévia do material em texto

Semântica de linguagens de programação - Compiladores
Exercícios
1. Ao realizar a validação da semântica em uma linguagem de programação, as
expressões precisam retornar um valor verdadeiro ou falso de acordo com o
resultado da sentença. Dependendo da situação, é possível ter regras semânticas,
verificadas em tempo de compilação ou em tempo de execução do programa. Em
relação ao conceito e às características da semântica dinâmica, analise as
afirmações a seguir.
I. Na semântica operacional, as modificações realizadas no estado
da máquina não servem para gerar o significado de uma instrução.
II. A criação de um procedimento que evidencia a exatidão
dos programas compõe a semântica denotacional.
III. O método utilizado para descrever o significado dos programas
com base na recursividade é a semântica denotacional.
IV. A semântica operacional natural esconde detalhes ao realizar um passo
computacional maior em um programa.
Agora, assinale a alternativa que apresenta a resposta correta.
Você acertou!
C. Apenas as afirmativas III e IV estão corretas.
I.   A   afirmativa   está incorreta,   pois   a semântica operacional descreve   o
comportamento de um programa ao ser executado em um computador  real  ou
hipotético.   As modificações no estado da máquina,   como   a   localização   de
memória   e   os   valores   dos   registradores, determinam o significado de uma
instrução. 
II. A afirmativa está incorreta, já que a semântica axiomática foi definida com a
criação de um método que comprova a exatidão dos programas que exibem a
computação descrita por sua especificação, quando esta pode ser desenvolvida.
III. A afirmativa está correta, pois a semântica denotacional é baseada na teoria
da função recursiva.
IV.  A  afirmativa   está correta,   pois   a semântica natural torna   mais simples as
notações e esconde detalhes ao   realizar   um   passo   computacional   maior
(big_step), entre o estado inicial e o estado final de um programa.
2. Ao executar um programa na linguagem Pascal, o compilador, após verificar a
sintaxe, pode sinalizar os erros semânticos. Observe o código a seguir:
 var x: String;
x := 3 + ‘7’;
Assinale a alternativa correta que apresenta o erro semântico encontrado neste
código.
Você acertou!
A. Erro de compatibilidade de tipos de dados.
O erro semântico do código é o erro de compatibilidade de tipos de dados, uma
vez que foi atribuído a uma variável do tipo string, uma operação matemática.
Não é possível ser erro de posição inexistente em um vetor, uma vez que o trecho
de   programa não trata sobre vetores; além   disso,   a variável foi declarada e
está dentro do escopo correto do programa.
3. A semântica denotacional constitui o método mais rígido para descrever o
significado dos programas, sendo baseado na teoria da função recursiva.
Considerando o contexto apresentado, avalie as seguintes asserções sobre a
semântica denotacional.
I. A semântica denotacional utiliza uma função que estrutura a entidade e o objeto 
matemático.
PORQUE
II. O objeto matemático representa o significado das entidades sintáticas
correspondentes. 
 
A respeito dessas asserções, assinale a opção correta.
Você acertou!
A. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
I.   Asserção verdadeira,   pois   a semântica denotacional define   para cada
entidade da linguagem um objeto matemático, como uma função que faça o
mapeamento   da   entidade   e   do   objeto   matemático.   
II.  Asserção verdadeira e justifica a   I,  uma   vez  que   o  método   é  chamado   de
denotacional,  porque os objetos matemáticos representam o significado das
entidades sintáticas correspondentes.
4. Ao executar um programa, o compilador, após verificar a sintaxe, pode sinalizar
os erros semânticos. Um erro semântico ocorre quando um programa está certo
sintaticamente, mas o resultado gerado não está correto. Analise o seguinte trecho
do programa escrito em C#:
public class Teste : Teste
 {
 int k = “xyz” * false;
 int y = 1.22;
 void x(int c, int c)
 {
 int a;
 int p = 14 * a;
 }
 }
Em relação aos erros semânticos apresentados no trecho do programa acima,
analise as afirmações a seguir.
I. Não é possível uma classe herdar de si mesma — class Teste : Teste.
II. Não é possível multiplicar uma string por um boolean.
III. O número 1.22 não pode ser atribuído como um inteiro.
IV. Na instrução int p = 14 * a, do método x, a variável a não foi inicializada.
V. Não é possível declarar parâmetros com o mesmo nome e com o mesmo tipo.
Agora, assinale a alternativa que apresenta a resposta correta.
Você acertou!
E. Todas as afirmativas estão corretas.
I. A afirmativa está correta, pois não é possível uma classe herdar de si mesma e,
para   que   a   classe   esteja   correta,   é   preciso alterar o nome da classe
herdada como class Teste : TesteNovo.
II.  A afirmativa está correta,  visto que não é possível  multiplicar  uma string por
um boolean,   sendo   necessário corrigir a expressão para   comparar   um   tipo
booleano   com   outro   tipo   booleano,   por   exemplo.
III. A afirmativa está correta, pois o número 1.22 não pode ser atribuído como um
inteiro,   sendo   necessário alterar o valor de y = 1,   por   exemplo.
IV.  A  afirmativa   está correta,   pois,   na   instrução int p = 14 * a, do   método x,
a variável a não foi inicializada, por   exemplo,   a   =   10.
V.  A  afirmativa   está correta,   já   que   não   se   pode   declarar   parâmetros   com   o
mesmo   nome   e   com   o   mesmo   tipo,   sendo   necessário renomear o
parâmetro void x(int c, int d).
5. As regras da semântica dinâmica são classificadas em operacional, denotacional
e axiomática. Com relação à classificação da semântica dinâmica, avalie as
questões a seguir e associe os itens numerados de acordo com as representações
adotadas para semântica operacional, denotacional e axiomática.
1. Semântica operacional
2. Semântica axiomática
3. Semântica denotacional
I. Utiliza expressões lógicas, conhecidas como asserções.
II. É um método representado por objetos matemáticos definindo o significado dos 
atributos sintáticos.
III. Esse método é baseado em funções recursivas.
IV. É utilizada em manuais das linguagens e livros didáticos.
V. Esse método é classificado em natural e estrutural.
Assinale a alternativa que apresenta a associação correta entre as colunas.
Você acertou!
A. I – 2; II – 3; III – 3; IV – 1; V – 1.
A   associação   correta   é:   I   –   2;   II   –   3;   III   –   3;   IV   –   1;   V   – 1.
A semântica axiomática utiliza   expressões   lógicas   chamadas
de asserções ou predicado, que definem as restrições a variáveis. O método é
chamado   de denotacional porque   os objetos matemáticos representam o
significado das   entidades   sintáticas   correspondentes.   A semântica
denotacional pode   ser   usada   para provar a correção de um programa,   por
meio   de   um   método   para   pensar   sobre   o   programa,   além   de   descrever
uma linguagem precisa.   A semântica operacional é pouco utilizada pelos
desenvolvedores da linguagem e classifica-se em natural, que esconde detalhes
ao   realizar   um   passo   computacional   maior   (big_step),   e estrutural,   que define
detalhes da execução ao tomar um passo menor (small_step).
	Semântica de linguagens de programação - Compiladores
	Exercícios

Continue navegando