Baixe o app para aproveitar ainda mais
Prévia do material em texto
Questão 1/10 - Compiladores As gramáticas livres de contexto, utilizadas na definição de linguagens formais, para a criação de linguagens de programação definem, a partir de um conjunto de quatro elementos, todas as regras que determinam a linguagem. Essas regras podem ser expandidas pelo processo chamado de derivação. Sendo assim, marque a alternativa correta. Nota: 10.0 A A derivação consiste na substituição de um símbolo não terminal par uma regra de produção; Você acertou! B A derivação consiste na substituição de um símbolo terminal por uma regra de produção; C A derivação consiste na substituição de um símbolo não terminal por um símbolo terminal; D A derivação consiste na substituição de uma regra de produção por um símbolo terminal; E A derivação consiste na substituição de uma regra de produção por um símbolo não terminal. Questão 2/10 - Compiladores A análise semântica tem o objetivo de verificar a validade das declarações e operações contidas em um código de alto nível. Esta análise, entre outras coisas, verifica o tipo de cada declaração, operação, operando e variável em busca de inconsistências. Com isso em mente marque a alternativa incorreta entre as opções a seguir: Nota: 10.0 A A análise semântica é o último grande bloco antes da geração do código intermediário; B A análise semântica indica o tipo das variáveis por meio de etiquetas colocadas na árvore sintática; C Se for necessário, caberá ao processo de análise semântica a marcação das conversões automáticas de tipos; D A determinação dos tipos depende do escopo da variável; Você acertou! A verificação de tipos independe do escopo das variáveis, declarações e operações. E Podemos chamar de árvore semântica a árvore sintática após o processo de análise semântica. Questão 3/10 - Compiladores O processo de compilação é fundamental para a eficiência dos programas que executamos todos os dias. Dado que compilar, é uma espécie de tradução, onde uma linguagem própria para uso humano é convertida em uma linguagem própria para uso de máquinas. I. Otimização de Código de Máquina; II. Analisador Sintático; III. Analisador Léxico; IV. Analisador Semântico. Escolha a alternativa que contém a ordem correta de um processo de compilação básico entre as possibilidades acima: Nota: 10.0 A I, II, III, IV; B III, II, IV, I; Você acertou! Letra B Observar, por favor o capítulo 1 do Livro texto da disciplina. C II, I, IV, III; D IV, III, II, I; E I, III, IV, II. Questão 4/10 - Compiladores No módulo de análise sintática, utilizamos a definição de uma gramática livre de contexto, como base para o processo de análise. Notadamente por que, neste caso, estamos interessados com a forma das declarações e não com o seu significado. No caso da análise semântica isto não é verdade já que um conjunto significativo de erros podem ser detectados no analisador semântico se ele for capaz de entender o sentido das declarações e operações. Entre as afirmações a seguir indique aquela que é verdadeira. Nota: 10.0 A Erros de compatibilidade de tipos não são importantes para o analisador semântico; B A verificação de variáveis e declarações em relação ao escopo de cada bloco de código é função do analisador sintático; C A duplicidade de declarações de variáveis faz parte das funções do analisador semântico; Você acertou! D Sem o analisador semântico o compilador não seria capaz de detectar nenhum erro de digitação; E A tabela de símbolos, muito importante nas análises léxica e sintática não tem função na análise semântica. Questão 5/10 - Compiladores Uma das principais características de uma linguagem formal é a existência de uma estrutura rígida e precisamente especificada. As linguagens formais são utilizadas na programação de computadores há várias décadas principalmente por que sua estrutura rígida torna o processo de compilação possível. Ainda relacionado as linguagens formais qual das afirmativas abaixo é verdadeira? Nota: 10.0 A A língua portuguesa, graças a sua gramática estruturada é um exemplo de linguagem formal; B As linguagens formais não podem ser definidas com o uso de máquinas de estados finitos; C A linguagem de programação Java constitui um exemplo de linguagem natural usada em programação; D Uma das formas de definir uma linguagem formal reside no uso de expressões regulares; Você acertou! A resposta correta é a letra D, o teorema de Kleene declara que só podem ser classificadas como linguagens formais aquelas que podem ser definidas com o uso de máquinas de estados finitos e/ou expressões regulares. E O Teorema de Kleene, para a definição de linguagens naturais, torna mais eficiente o processo de interpretação em máquinas que rodem o Javascript. Questão 6/10 - Compiladores 1. As linguagens de programação em geral pertencem a uma categoria de Linguagens baseadas em Gramáticas Livres de Contexto. Estas Gramáticas Livres de Contexto são a base para a construção de analisadores sintáticos. E são utilizadas para especificar as regras sintáticas de uma linguagem de programação. Talvez a parte mais importante deste processo seja a possibilidade de se representar este tipo de gramática por apenas quatro conjuntos de tal forma que uma determinada Gramática G qualquer, tal que: G = (N, T, P, S) Onde: · N – Conjunto finito de símbolos não terminais. · T – Conjunto finito de símbolos terminais. · P – Conjunto de regras de produção. · S – Símbolo inicial da gramática. Considerando estas informações marque qual das afirmações a seguir é falsa. Nota: 10.0 A Símbolos terminais: Conjunto finito de símbolos básicos que formam as palavras da linguagem, são representadas pelo tokens reconhecidos pelo analisador léxico. B Símbolos não terminais: Conjunto finito de símbolos que representam os símbolos utilizados para controle da gramática e que não farão parte dos tokens. C Símbolo inicial: É a variável, um símbolo terminal, que representa o início da definição da gramática. D Regras de produção: Representam um conjunto de regras sintáticas para a definição da linguagem, indicam como símbolos terminais e não terminais podem ser combinados. E Regras de produção: Representam um conjunto de regras sintáticas para a definição da linguagem, mas não indicam nenhuma forma de combinação entre os símbolos terminais e não terminais. Você acertou! Questão 7/10 - Compiladores Considerando a tecnologia utilizada no processo de compilação, quais das afirmações a seguir são corretas: I. O processo de otimização de código de máquina é genérico e não leva em conta a arquitetura do dispositivo alvo do processo de compilação; II. A principal diferença entre compiladores e interpretadores é a existência, no processo de interpretação, de um arquivo físico do programa em linguagem de máquina; III.Os processos aplicados tanto na compilação quanto na interpretação são muito parecidos e, nos dois casos, terminamos sempre com código em linguagem de máquina sendo executado em uma CPU; IV. Independente da tecnologia aplicada no processo de compilação o resultado final será sempre igual para uma mesma arquitetura A Apenas a afirmação III é verdadeira; Letra a, apenas a afirmação III é verdadeira, de fato, tanto no processo de compilação quanto no processo de interpretação o objetivo é gerar um código, em linguagem de máquina que seja eficiente e de baixo custo operacional. De fato, com a tecnologia atual, a maior diferença está na existência de um arquivo executável, produto da compilação e que não está disponível em processos de interpretação. B As afirmações I e II são verdadeiras; C Nenhuma das afirmações é verdadeira; D Todas as afirmações são verdadeiras menos a afirmação IV; E As afirmações I e IV são verdadeiras. Questão 8/10 - Compiladores O analisador sintático é, para todos os efeitos, o segundo maior bloco funcional no processo de compilação ficando entre o analisador léxico e o analisador semântico.Marque entre alternativas a seguir, aquela que contém apenas funcionalidades atribuídas ao analisador sintático considerando-se os compiladores utilizados para a linguagem C. Nota: 10.0 A Identificação dos lexemas para a criação da árvore semântica etiquetada; B Identificação de sentenças e montagem da árvore sintática; Você acertou! C Identificação de sentenças para a criação de tokens; D Identificação de tokens para a determinação de tipos; Questão 9/10 - Compiladores Se fossemos reduzir todo o processo de análise semântica e suas funções principais poderíamos dizer que se trata da análise de tipos e de escopo. Primeiro, e mais importante, garantir que todas as declarações, operações e variáveis tenham tipos coerentes e, quando não, proceder a conversão automática ou emitir um erro. Segundo verificar as declarações, variáveis e operações com relação ao escopo. Ainda com relação a verificação de escopo e a linguagem C, qual das opções a seguir é falsa. Nota: 10.0 A Verificar se uma variável foi declarada em duplicidade faz parte das funções do analisador semântico; B Verificar se uma variável foi inicializada antes do uso é parte integrante da verificação de escopo realizada pelo analisador semântico; C Verificar se uma determinada variável foi declarada, mas nunca foi usada está entre as funcionalidades de um analisador semântico; D Verificar se um array, uni ou multidimensional, teve seus limites declarados antes de ser utilizado é parte integrante das funções do analisador semântico; E Verificar se uma função foi declarada antes do seu uso não faz parte das funções do analisador semântico e deve ser verificado pelo analisador sintático durante a formação da árvore sintática. Você acertou! Questão 10/10 - Compiladores Em busca da eficiência na execução dos programas, ao longo do tempo, o processo de compilação ficou complexo e sujeito a erros e a tempos muito longos. Uma forma de tornar o processo de compilação mais eficiente foi a divisão deste processo em módulos dedicados. Assim, temos um módulo apenas para fazer a análise sintática do texto e outro apenas para entender o conteúdo semântico e assim sucessivamente. Quanto ao analisador sintático é verdadeiro dizer que: Marque a alternativa correta Nota: 10.0 A O analisador sintático, apesar de fazer parte do processo de compilação, é totalmente dispensável e não altera o resultado final; B A principal função do analisador sintático é enviar os tokens necessários ao funcionamento do analisador Léxico; C O analisador sintático, para efetuar sua tarefa, organiza os tokens, enviados pelo analisador léxico em uma árvore; Você acertou! a resposta correta é a letra C e pode ser encontrada no primeiro capítulo do livro texto. D A análise sintática só pode ser realizada depois que o seu código-fonte esteja convertido em linguagem de máquina; E A maior parte de todas as linguagens formais, utilizadas para a programação de computadores dispensa o uso de analisadores sintáticos.
Compartilhar