Prévia do material em texto
Disc.: COMPILADORES Aluno(a): FERNANDA RODRIGUES MUNIZ 202002637587 Acertos: 10,0 de 10,0 16/04/2023 1a Questão Acerto: 1,0 / 1,0 Os compiladores são responsáveis por abstrair a complexidade da programação e proporcionar uma vida mais tranquila para os desenvolvedores. Sobre a análise léxica e sintática executadas pelos compiladores, assinale a opção correta. Um analisador léxico serve como o passo final de um analisador sintático. Um analisador léxico gera a entrada para o analisador sintático. O analisador sintático processa diretamente o programa fonte a procura de erros. Técnicas para análise léxica são mais complexas do que as necessárias para a análise sintática. Os analisadores léxico e sintático somente se comunicam via tabela de simbolos. Respondido em 16/04/2023 17:51:24 Explicação: O analisador léxico realiza o primeiro passo da etapa de análise da compilação. Uma de suas responsabilidades é gerar a entrada para o analisador sintático. 2a Questão Acerto: 1,0 / 1,0 O tradutor que gera um código objeto a partir de uma linguagem de baixo nível é o : Carregador Interpretador Montador Compilador Ligador Respondido em 16/04/2023 17:53:05 Explicação: A resposta correta é: Montador. 3a Questão Acerto: 1,0 / 1,0 (INSTITUTO AOCP/2019) A estrutura típica de um compilador possui 3 elementos. Assinale a alternativa que apresenta corretamente esses elementos. Front end, otimizador, back end. Front end, compilador, base de dados. Front end, interpretador, back end. Front end, analisador, back end. Front end, interpretador, base de dados. Respondido em 16/04/2023 17:53:34 Explicação: A Compilação abrange duas grandes etapas: A Análise (front-end) e a Síntese (back-end). A etapa de Análise implica em três passos internos: Análise Léxica, Análise Sintática e Análise Semântica. Já a etapa de Síntese é composta pela Geração de Código Intermediário, Otimização e Geração de Código de Montagem. 4a Questão Acerto: 1,0 / 1,0 (CESPE/CEBRASPE/2022 - Adaptada) Autômatos são estruturas matemáticas que representam uma máquina de estados finitos. Eles são usados para modelar processos computacionais, como a validação de entradas de linguagens formais (por exemplo, verificar se uma string é uma sentença válida em uma dada linguagem), e para implementar algoritmos em processamento de linguagem natural e inteligência artificial. Nesse sentido, o autômato finito determinístico. tem a capacidade de adivinhar algo sobre sua entrada ao testar valores. corresponde à função de transição que recebe um estado ou um símbolo de entrada que sempre retorna um conjunto de estados como resultado. consegue estar em vários estados ao mesmo tempo. permite zero, uma ou n transições para os estados de entrada. pode, para cada entrada, transitar a partir do seu estado atual em um e somente um estado. Respondido em 16/04/2023 17:54:26 Explicação: Um Autômato Finito Determinístico é um autômato no qual para cada estado e para cada entrada só há zero ou uma transição possível. Existem vários tipos de autômatos, como autômatos finitos determinísticos (DFA), autômatos finitos não-determinísticos (NFA), autômatos de Pilha, autômatos de Estados Múltiplos (Mealy) e autômatos de Estados Moore. Cada tipo de autômato é adequado para uma tarefa específica e é projetado para atender a determinadas restrições computacionais e de tempo de execução. 5a Questão Acerto: 1,0 / 1,0 (CESGRANRIO/2012) Um compilador é um programa que executa vários passos, dentre os quais, o de analisar uma sequência de entrada para determinar sua estrutura gramatical segundo uma determinada gramática formal. O resultado típico dessa análise é uma estrutura conhecida como: árvore sintática fluxo (stream) de tokens árvore AVL gramática livre de contexto gramática dirigida a sintaxe Respondido em 16/04/2023 17:54:38 Explicação: A Árvore Sintática é útil na análise sintática, pois permite verificar a correta ordenação dos tokens e a estrutura da sentença de forma visual e fácil de entender. Além disso, a Árvore Sintática pode ser usada como base para a geração de código em outras etapas do processo de compilação. 6a Questão Acerto: 1,0 / 1,0 (FCM/2018 - Adaptada) A Hierarquia de Chomsky é uma classificação das gramáticas formais, proposta pelo linguista Noam Chomsky, que divide as gramáticas em 4 classes. Nesse sentido, Linguagens livres de contexto são exatamente as linguagens que podem ser reconhecidas por: expressões regulares. autômatos com pilha. autômatos finitos não determinísticos. máquinas de Turing. autômatos finitos determinísticos. Respondido em 16/04/2023 17:54:49 Explicação: Autômatos com pilha (Pushdown Automata) são usados para reconhecer a linguagem livre de contexto, que é uma classe mais ampla de linguagens do que as reconhecidas pelos autômatos finitos. A pilha permite que o autômato mantenha o contexto e faça escolhas não-determinísticas. 7a Questão Acerto: 1,0 / 1,0 (IBGE/2010) Ao realizar testes durante a elaboração de um compilador, um analista descobriu que havia, no compilador, um erro na checagem de tipos de variáveis em expressões, permitindo, por exemplo, a multiplicação entre tipos de dados que não poderiam ocorrer. Em compiladores, a checagem de tipos de variáveis em expressões é uma função do: analisador léxico. linker. analisador semântico. otimizador de código. scanner. Respondido em 16/04/2023 17:55:06 Explicação: A análise semântica é responsável por verificar a validade da semântica do programa, incluindo a checagem de tipos de variáveis em expressões. Ela tem como objetivo identificar erros de semântica, tais como operações inválidas com tipos de variáveis diferentes, declarações duplicadas de variáveis, etc. Por isso, é o analisador semântico que está responsável por detectar o erro mencionado na questão. 8a Questão Acerto: 1,0 / 1,0 (PC-DF/2012) Com relação aos softwares básicos envolvidos no processo de transformação de um programa escrito em linguagem de alto nível para um código executável ou interpretado, assinale a alternativa correta. No processo de compilação, o analisador léxico e o sintático estão preocupados com a semântica e os significados dos programas como um todo. Compilação e montagem são processos semelhantes; contudo, o processo de montagem é bem mais complexo. No processo de análise semântica da compilação, é verificada a consistência dos tipos de variáveis envolvidas em operações aritméticas. Os montadores buscam referências externas em rotinas de bibliotecas e inserem-nas no código-objeto. Os link-editores são usados para resolver as referências aos símbolos internos de um programa, produzindo um código-objeto simplificado. Respondido em 16/04/2023 17:55:48 Explicação: A análise semântica é uma das etapas do processo de compilação. Ela tem como objetivo verificar a correção semântica do código-fonte, incluindo a consistência dos tipos de variáveis envolvidos em operações aritméticas. Esse processo verifica se o código está sendo usado corretamente de acordo com as regras da linguagem. 9a Questão Acerto: 1,0 / 1,0 Procedimentos são rotinas que complementam as funcionalidades de um programa. Quando um procedimento é chamado um Registro de Ativação é criado e colocado na pilha. Neste registro são armazenadas a variáveis locais, o contexto e os parametrosdo procedimento. Com base nisso considere a seguinte expressão onde p1 e p2 são funções x = p1 (a, p2(b)); Sabendo-se que o código abaixo mostra a implementação do trecho em código intermediário em que ?1, ?2,?3 e ?4 representam partes faltantes do código . param a param b _t1 := call ?1, ?2 param _t1 x := call ?3, ?4 Quais seriam os valores de ?1, ?2, ?3 e ?4 respectivamente? p2 - 2 - p1 - 2 p2 - 1 - p1 - 2 p1 - 1 - p2 - 2 p1 - 2 - p2 - 1 p2 - 2 - p1 - 1 Respondido em 16/04/2023 17:56:38 Explicação: Resposta correta: p2 - 1 - p1 - 2 10a Questão Acerto: 1,0 / 1,0 Existem varios tipos de representações intermediárias tanto graficas como textuais. Durante a fase de síntese a Geração de Código Intermediário irá transformar o resultado da fase de análise em uma outra representação. Uma das formas de representação intermediária é a notação posfixa. Considerando a seguinte expressão em notação infixa (a+b)*(c+d) qual seria a notação posfixa correspondente? a b * c d + + a b + c d + * a b + * c d + a b + c d * + a b * + c d + Respondido em 16/04/2023 17:57:54 Explicação: Resposta correta: a b + c d + *