Baixe o app para aproveitar ainda mais
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
Compartilhar