Os Compiladores e Contabilidade
Por: bpiveta • 7/9/2021 • Trabalho acadêmico • 2.563 Palavras (11 Páginas) • 179 Visualizações
EAD – 1 – 1 Compiladores e computabilidade
[pic 1]
PERGUNTA 1
- Os diferentes elementos básicos que compõe uma linguagem, tais como as palavras reservadas, identificadores, operadores e quaisquer outros lexemas estabelecidos por ela, também possuem uma estrutura sintática e podem ser descritos formalmente através de expressões regulares. Entretanto a tarefa de reconhecimento dos lexemas é realizada pelo Analisador Léxico, acontecendo de maneira separada da Análise Sintática do código.
Assim, um analisador léxico é antes de mais nada um elemento reconhecedor destas estruturas e pode ser definido como um autômato finito, dada a natureza regular dos elementos da linguagem.
Julgue cada uma das afirmativas a seguir e assinale a alternativa correta.
I) As gramáticas regulares não permitem a descrição de estruturas aninhadas e portanto não são capazes de descrever simultaneamente os lexemas e também as demais estruturas típicas nas linguagem de programação, tais como parênteses balanceados e comandos aninhados.
II) A separação das etapas permite utilizar gramaticas regulares, que são mais simples e mais eficientes, para a descrição dos lexemas tornado a implementação do reconhecedor mais fácil.
III) O analisador sintático ficaria muito mais complexo, pois estaria a todo momento preocupado em prever a ocorrência de símbolos irrelevantes, tais como espaços em branco, que teriam sido eliminados pela análise léxica.
[pic 2] | a. | Apenas o item I é verdadeiros, justificando a separação dos analisadores. |
[pic 3] | b. | Apenas os itens I e III são verdadeiros, mas o item iii não justifica a separação dos analisadores. |
[pic 4] | c. | Apenas os itens I e II são verdadeiros, mas apenas o item ii justifica a separação dos analisadores. |
[pic 5] | d. | Todos itens são verdadeiros, mas nenhum deles justificam a separação dos analisadores. |
[pic 6] | e. | Todos itens são verdadeiros e os motivos apresentados justificam a separação dos analisadores. |
PERGUNTA 2
A gramática dada a seguir é LL(1). Nela os elementos +, *, (, ) e id configuram como símbolos terminais, enquanto os E, T, F, E’ e T’ são considerados não-terminais. A tabela de movimentos M fornece ao reconhecedor o número da regra que deve ser aplicada durante a análise da sentença, sendo necessário apenas conhecer o não-terminal a ser derivado e o primeiro símbolo presente no restante da entrada.
[pic 7]
Sobre a construção de analisadores sintáticos deste tipo é incorreto afirmar que:
[pic 8] | a. | A tabela indica que a regra 1 deve ser aplicada quando um símbolo não-terminal E estiver sendo derivado e na entrada houver algum elemento que pertença ao conjunto First(TE’). |
[pic 9] | b. | Por ser uma produção que deriva para vazio, a regra 3 somente será aplicada se o símbolo não-terminal sendo derivado for o E’ e o símbolo corrente na entrada pertencer ao conjunto Follow(E’). |
[pic 10] | c. | Células marcadas com “-“ indicam um movimento não previsto e assim, qualquer situação que leve o reconhecedor a uma delas deve ser entendida como um problema sintático da sentença e reportado como um erro. |
[pic 11] | d. | A aplicação da regra 8 deve ser feita antes da regra 7, segundo a interpretação que temos da tabela. Esse fato se comprova ao observarmos que o símbolo “(“ poderia ocorrer imediatamente após um “id” segundo o que determina as produções da gramática. |
[pic 12] | e. | Regras de produção que apresentam prefixos comuns para o mesmo não-terminal impedem a construção de um analisador deste tipo, pois implicarão em duas ou mais regras válidas (aplicáveis) para a mesma combinação de símbolos. Ou seja, a tabela ficaria com dois ou mais valores em uma mesma célula. |
PERGUNTA 3
- Um processo algorítmico tem o objetivo de instruir o executor quanto às ações que deve realizar e a sua sequência. Para que isso ocorra é necessário que as instruções sejam dadas num formato compreensível àquele que as realizará. A programação de computadores é feita descrevendo o algoritmo em instruções de uma linguagem de programação e que, quando ditas de alto nível, apresentam características mais próximas à estrutura das linguagens humanas do que a das máquinas. Analise as alternativas a seguir e assinale a que julgar incorreta.
[pic 13] | a. | Quando a linguagem de codificação do algoritmo é de alto nível, precisamos de um compilador para que o algoritmo original seja traduzido para um equivalente dado em linguagem de baixo nível. |
[pic 14] | b. | A construção de compiladores envolve conhecimentos relativos à estrutura da linguagem e à capacidade de tradução de uma para outra, preservando fielmente cada uma das funcionalidades descritas no código fonte. |
[pic 15] | c. | O uso de métodos formais permite tanto a especificação das linguagens de programação quanto a implementação de reconhecedores para as suas estruturas, compreendendo assim os fundamentos teóricos para o estudo e a construção de compiladores. |
[pic 16] | d. | Os conhecimentos relacionados à construção de compiladores encerram-se estritamente nesta atividade, oferecendo pouco ou mesmo nenhuma possibilidade de aplicação em outras áreas que não seja a tradução para linguagem de máquina. |
[pic 17] | e. | A compreensão das estruturas de uma linguagem e dos processos que envolvem a sua de interpretação permite que tais conhecimentos sejam aplicados não apenas na construção de compiladores, mas também na interpretação de documentos estruturados, com as páginas da web; parâmetros em linhas de comandos ou padrões de endereços na web, por exemplo. |
...