Prévia do material em texto
ANÁLISE SEMÂNTICA 1. (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 semântico. otimizador de código. scanner. linker. analisador léxico. 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. 2. (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. 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. 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. 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. O COMPILADOR 3. Um compilador está verificando se uma variável foi declarada somente uma vez, se foi declarada antes do seu primeiro uso, se foi declarada e nunca foi usada e se os https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp tipos de dados em uma expressão aritmética são compatíveis. Essas verificações são realizadas na fase de: análise semântica. geração do código. otimização do código análise léxica. análise sintática. Explicação: A resposta correta é: análise semântica. 4. O tradutor que gera um código objeto a partir de uma linguagem de baixo nível é o : Montador Interpretador Compilador Ligador Carregador Explicação: A resposta correta é: Montador. ANÁLISE LÉXICA 5. Considerando a ciência da criação de um compilador, há vários objetos que são importantes para o processo de compilação. Esse é um componente importante para o processo e representa uma estrutura de dados que contém um registro para cada nome de variável, com campos para os atributos do nome. Assinale a alternativa que apresenta o nome desse componente. Tabela de Símbolos. Árvore de Sintaxe. Ligador (Linker). Fluxo de tokens. Otimizador de código. Explicação: https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp A tabela de símbolos é uma estrutura de dados utilizada pelo compilador para armazenar informações sobre nomes de variáveis, constantes, funções, etc. presentes no código fonte. Ela é construída durante a fase de análise sintática e mantida atualizada ao longo do processo de compilação. A tabela de símbolos é importante pois permite ao compilador realizar verificações de semântica, alocação de memória, geração de código objeto, entre outras tarefas. 6. (INSTITUTO AOCP/2019) Qual é o elemento de um compilador que lê um fluxo de entrada (caracteres) e produz um fluxo de saída que contém palavras das quais cada uma é rotulada com sua categoria sintática, equivalente a uma classe gramatical da palavra na linguagem natural? Scanner. Parsing. Reader. Input. Interface. Explicação: O scanner, também conhecido como análise léxica, é o primeiro passo no processo de compilação. O scanner lê o código fonte como um fluxo de entrada de caracteres e produz um fluxo de saída que consiste em tokens, que são palavras rotuladas com sua categoria sintática. Essas categorias sintáticas correspondem às classes gramaticais dessas palavras na linguagem natural, como palavras-chave, identificadores, números, símbolos, entre outros. ANÁLISE SINTÁTICA 7. (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: gramática livre de contexto árvore sintática árvore AVL fluxo (stream) de tokens gramática dirigida a sintaxe Explicação: https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp 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. 8. (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: máquinas de Turing. expressões regulares. autômatos com pilha. autômatos finitos não determinísticos. autômatos finitos determinísticos. 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. GERAÇÃO DE CÓDIGO 9. (UFAL/2016 - Adaptada) Considere as afirmativas: I. cria o código objeto traduzindo as instruções da linguagem de montagem (assembly) para código de máquina; II. recebe como entrada um conjunto de arquivos objetos e bibliotecas, e produz como resultado um arquivo objeto de saída; III. traduz um programa descrito em uma linguagem de alto nível para um programa em linguagem simbólica ou linguagem de máquina. Nessa ordem, os itens de I a III referem-se a: Compilador, ligador e montador. Interpretador, ligador e compilador. Ligador, montador e compilador. Ligador, montador e interpretador. https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp Montador, ligador e compilador. Explicação: O montador cria o código objeto traduzindo as instruções da linguagem de montagem (assembly) para código de máquina. O ligador recebe como entrada um conjunto de arquivos objetos e bibliotecas, e produz como resultado um arquivo objeto de saída. O compilador traduz um programa descrito em uma linguagem de alto nível para um programa em linguagem simbólica ou linguagem de máquina.10. (FGV/2009 - Adaptada) No contexto das estruturas de dados avançadas como listas, pilhas, filas e árvores é comum se encontrar referência à notação polonesa reversa (notação posfixa). Nesse sentido, a expressão X*(Y+W)/(X-Y) é representada nessa notação, como: XYW+*XY/- XYW*+XY/- XYW+*XY-/ XYW*+XY-/ XYW+*/XY- Explicação: Nessa notação.: 1. Temos o primeiro operando: X 2. O segundo: Y+W -> YW+ 3. Posfixando o operador multiplicação: XYW+* 4. Segundo operando da divisão: X-Y -> XY- 5. Posfixando o operador divisão: XY/ 5. juntando os passos anteriores temos: XYW+* XY-/ https://simulado.estacio.br/bdq_simulados_exercicio_ensineme.asp