Prévia do material em texto
AO2 Iniciado: 3 jun em 20:33 Instruções do teste Pergunta 1 0,6 pts Importante: Caso você esteja realizando a atividade através do aplicativo "Canvas Student", é necessário que você clique em "FAZER O QUESTIONÁRIO", no final da página. Leia os textos a seguir: Texto I As gramáticas conhecidas como LL são as gramáticas que podem ser analisadas por parser tipo LL. O primeiro L determina que são analisadas da esquerda para a direita, e o segundo L determina que cria a árvore de derivação mais à esquerda. Gramáticas genéricas livres de contexto são processáveis por meio de algoritmos genéricos, por exemplo, o algoritmo de Earley. No entanto, esses algoritmos apresentam, no pior dos casos, um processamento cuja complexidade é O(n ), em que n é o número de símbolos da sequência de entrada. Contudo, existem subconjuntos de gramáticas que podem ser processadas de modo mais eficiente. Essas formas mais simples são ainda suficientemente genéricas em relação a quase todas as linguagens concebidas para o processamento informático. O analisador LR(0) é basicamente um analisador. O objetivo do analisador é processar o fluxo de entrada de tokens (os elementos básicos da linguagem que o analisador léxico produz com base no fluxo de entrada de caracteres). Fonte: MONGENSEN, T. Basics of compiler design. Copenhagen: University of Copenhagen, 2010. Torben Mogensen DIKU. Disponível em: http://hjemmesider.diku.dk/~torbenm/Basics/ (http://hjemmesider.diku.dk/~torbenm/Basics/) . Acesso em: 17 abr. 2023. Texto II Imagine a seguinte situação em que A →α for uma escolha de produção, e se β e γ forem duas cadeias quaisquer de símbolos (incluindo a cadeia vazia ε) tais que βγ = α. Considerando as reflexões apresentadas, assinale a opção correta. 3 A+ A A- NOTA: 3.6 de 6.0 http://hjemmesider.diku.dk/~torbenm/Basics/ http://hjemmesider.diku.dk/~torbenm/Basics/ http://hjemmesider.diku.dk/~torbenm/Basics/ http://hjemmesider.diku.dk/~torbenm/Basics/ Pergunta 2 0,6 pts A→βγ será um item LR(0). A→βy. a será um item LR(0). → A. y será um item LR(0). A→β. a será um item LR(0). A→β . γ será um item LR(0). Leia o texto a seguir: O código intermediário é particularmente útil quando o objetivo do compilador é produzir código extremamente eficiente, pois isso requer uma quantidade significativa de análise das propriedades do código-alvo, o que é facilitado pelo uso do código intermediário. Fonte: LOUDEN, K. C. Compiladores: princípios e práticas. Cengage Learning Brasil, 2004.p. 401. Refletindo sobre máquina de estados, avalie as seguintes asserções e a relação proposta entre elas. I. O código intermediário pode assumir muitas formas, sendo ele uma estrutura de dados do programa-fonte durante a tradução. PORQUE II. O código intermediário representa alguma forma de linearização da árvore sintática ou DAG em forma serial, determinando coeficientes lineares. A respeito dessas asserções, assinale a opção correta: A asserção I é uma proposição falsa, e a II é uma proposição verdadeira. A+ A A- Pergunta 3 0,6 pts As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. As asserções I e II são proposições falsas. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. Leia o texto a seguir: Um analisador léxico é um programa de computador que divide um fluxo de texto em tokens e marca seu tipo. Ele recebe a entrada como uma sequência arbitrariamente longa de caracteres, chamada de string de entrada, e produz a saída como uma ou mais sequências de caracteres, chamadas de sequências de token. Considerando o texto, avalie as afirmações abaixo: I. Os identificadores são os nomes que o usuário atribui a várias partes do programa, que identificam um endereço de memória específico. II. O analisador léxico não é uma parte obrigatória do compilador, pois suas funções podem ser executadas na fase de análise. III. É possível usar técnica de análise simples para selecionar e analisar lexemas no texto e algoritmos complexos na etapa de análise sintática. IV. As funções desempenhadas pelo analisador léxico e a composição dos tokens são igualitários de acordo com a versão do compilador. É correto o que se afirma em: I, II e III, apenas. II, III e IV, apenas. I, II e IV, apenas. A+ A A- Pergunta 4 0,6 pts Pergunta 5 0,6 pts I e IV, apenas. I e III, apenas. Leia o texto abaixo: A geração de código é a fase mais complexa de um compilador, pois depende não apenas das características da linguagem-fonte, mas também de informações detalhadas da arquitetura-alvo, da estrutura do ambiente de execução e do sistema operacional da máquina-alvo. Fonte: LOUDEN, K. C. Compiladores: princípios e práticas. Cengage Learning Brasil, 2004. p. 415. Em razão da complexidade da geração de código, um compilador tipicamente quebra essa fase em vários passos e frequentemente requerem alguma forma de código abstrato. A que tipo de código o texto faz referência? Representação intermediária de alto nível. Código de três endereços. Código intermediário. Otimização de código. Análise semântica. Leia o texto a seguir: As linguagens sensíveis ao contexto são a última classe de linguagens que podem ser efetivamente reconhecidas pelos computadores. Especialistas dirão que eles são permitidos por autômatos não A+ A A- Pergunta 6 0,6 pts determinísticos linearmente limitados de dois lados. Para admitir cadeias de uma linguagem sem restrições, no caso geral, é necessária uma calculadora universal (máquina de Turing, máquina com número ilimitado de registradores, etc.). Linguagens sensíveis ao contexto e linguagens sem restrições não são usadas na construção de compiladores e não serão mais consideradas. Considerando as informações, avalie as afirmativas abaixo: I. Como as ações na análise LL(1) necessitam do próximo par de símbolos não terminal-próximo, facilita a programação. II. A conversão de uma cadeia da linguagem corresponde à gramática: S: T{+T} T: E {*E} E: <operando>|(S) III. O Analisador de Gramáticas LL(K) é único. Uma gramática recursiva à esquerda não pertence a LL(k) para qualquer k. É correto o que se afirma em: I, II e III. III, apenas. I, apenas. II e III, apenas. I e III, apenas. Leia o texto a seguir: A análise léxica é utilizada essencialmente na categorização dos elementos de uma linguagem em classes de símbolos, em vez de caracteres individuais. O processamento da parte regular de uma A+ A A- Pergunta 7 0,6 pts linguagem denomina-se análise léxica. A análise léxica tem a vantagem de ser um processo que, podendo ser formalmente descrito através de expressões regulares, pode produzir uma rotina que realiza essa análise. Essa rotina modela um autômato finito derivado matematicamente das expressões regulares especificadas Fonte: SANTOS, P. R.; LANGLOIS, T. Compiladores: Da Teoria à Prática. Grupo GEN, 2018, p. 16. Considerando o texto apresentado, avalie as afirmações abaixo: I. Uma unidade lexical geralmente possui um único atributo: um ponteiro para a entrada da tabela de símbolos. II. O analisador léxico agrupa informações das unidades lexicais em atributos associados a eles. III. A análise léxica está no final da cadeia de compilação, passando da sintaxe concreta à sintaxe abstrata. É correto o que se afirma em: I e II, apenas. II e III, apenas. III, apenas. I, apenas. I, II e III. Leia o texto a seguir: Máquinas de estado finito (FSM), também chamadas de autômatos de estado finito (FSA), são modelos conceituais para reconhecer, analisar e gerar strings em uma linguagem formal. O poder do FSM vem da capacidade de definir claramente diferentes comportamentos em diferentes condições. Normalmente, o FSM é usado com scripts comportamentais de loop que avaliam constantemente a situação atual em um loop ou com eventos. A+ AA- Pergunta 8 0,6 pts Considerando as informações apresentadas, uma FSM pode ser usada para construir o quê? Árvore de sintaxe. Uma string. Grafo dirigido. Estados finais. Gramáticas regulares. Leia o texto a seguir: Um programa compilado é executado mais rapidamente porque é um código de máquina. No entanto, em computadores modernos, a desaceleração na velocidade de execução durante a interpretação geralmente não é perceptível. Além disso, as linguagens interpretadas apresentam uma série de vantagens, entre elas a ausência de etapas preparatórias para a execução do programa, o que pode ser importante para quem está começando a aprender programação. Refletindo sobre o histórico da compilação, avalie as seguintes asserções e a relação proposta entre elas. I. Muitas pessoas sabem que o compilador C foi escrito no próprio C. Muito menos conhecido, no entanto, é o fato de que seus criadores seguiram amplamente os passos do compilador da linguagem B. PORQUE II. O trabalho de McIlroy resultou no compilador TMGL. Com sua ajuda, a promoção de software (bootstrapping) foi realizado primeiro na linguagem B e depois na linguagem C. A+ A A- Pergunta 9 0,6 pts A respeito dessas asserções, assinale a opção correta: As asserções I e II são proposições falsas. A asserção I é uma proposição falsa, e a II é uma proposição verdadeira. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. Leia o texto a seguir: Expressões regulares são usadas em quase todas as linguagens. É uma ferramenta muito poderosa que permite verificar se o conteúdo de uma variável tem a forma que se espera. Por exemplo, se recuperarmos um número de telefone, esperamos que a variável seja composta de números e espaços (ou traços), mas nada mais. As expressões regulares permitem não apenas avisá-lo sobre um caractere indesejado, mas também remover/modificar todos aqueles que não são desejáveis. Refletindo sobre expressões regulares, avalie as seguintes asserções e a relação proposta entre elas. I. Na expressão: “re = /abc\d+/” ocorre a compilação quando o script é avaliado. PORQUE II. Se a expressão regular for constante, um inicializador pode ser usado para melhorar o desempenho. A respeito dessas asserções, assinale a opção correta: As asserções I e II são proposições falsas. A+ A A- Pergunta 10 0,6 pts A asserção I é uma proposição falsa, e a II é uma proposição verdadeira. As asserções I e II são verdadeiras, mas a II não é uma justificativa da I. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. Leia o texto a seguir: Compilação é a tradução (transformação) de um texto de programa escrito em um idioma (origem) em um texto equivalente (preservando a semântica) em outro idioma (destino). Um compilador é um programa que lê o texto do programa na linguagem fonte e o compila. Uma abordagem alternativa é a interpretação, ou seja, execução direta de operações especificadas no código-fonte do programa. Um interpretador é um programa que lê o código-fonte e o interpreta. Além disso, o compilador pode analisar estaticamente o código-fonte do programa, relatar erros e emitir avisos sobre possíveis problemas. Considerando as reflexões apresentadas, assinale a opção correta. A linguagem de destino pode ser uma linguagem de máquina, saída do compilador não pode ser executada diretamente pelo interpretador. Na fase de síntese da compilação, com base na representação final e outras informações são feitos mapeamentos no código-alvo. Na fase de análise da compilação, o texto fonte do programa é lido, então ele é incluído em um único bloco elementar e feita a sua análise estática. A linguagem de destino também pode ser outra linguagem de programação ou uma linguagem de máquina para alguma máquina virtual. Para cada lexema, o analisador gera um token, que é uma combinação de um símbolo semantico (o nome do tipo de token) e um outro conjunto de lexemas. A+ A A- Salvo em 16:27 Enviar teste A+ A A-