A Atividade Compiladores
Por: And.Luc10 • 20/10/2020 • Trabalho acadêmico • 2.157 Palavras (9 Páginas) • 166 Visualizações
QUESTÕES
1) Defina o que é um Compilador, sua entrada e saída.
R.: Compilador é um programa que realiza a leitura de uma programação relacionada a outro programa, escrito em uma linguagem fonte e procede com a tradução em um programa em uma linguagem-alvo (objeto). O programa objeto, supre e atende a máquina por se tratar de código de máquina, assembly (linguagem de montagem). O compilador realiza o meio de campo entre as linguagens de alto nível e baixo nível, realizando a tradução seguida pelas análises léxica, sintática e semântica, durante este processo são identificados os problemas e apresentadas as mensagens de erro ou inconsistência no código fonte. Entrada = Programa Fonte (alto nível) → COMPILADOR → Saída = Programa Objeto (baixo nível)
2) Quais são as etapas que constituem o processo de Compilação? Explique resumidamente cada uma delas. Quais fazem parte da Análise e quais fazem parte da Síntese?
R.: O processo de Compilação é dividido em: Analisador Léxico, Analisador Sintático, Analisador Semântico, Gerador de Código Intermediário, Otimizador de Código e o Gerador de Código.
- Analisador Léxico: conhecido como scanner, responsável por ler os caracteres do programa fonte associados a símbolos básicos (tokens) os agrupa e organiza;
- Analisador Sintático: conhecido como parser, obtém uma cadeia de tokens proveniente do analisador léxico e verifica se o mesmo pode ser gerado pela gramática da linguagem-fonte (montar uma árvore sintática). Durante a verificação emiti mensagens relatando quaisquer erros de sintaxe e formas de se recuperar de erros comuns, a fim de continuar processando o código de entrada;
- Analisador Semântico: é responsável por verificar aspectos relacionados ao significado das instruções, nesse momento ocorre a validação de uma série de regras que não podem ser verificadas nas etapas anteriores. O analisador semântico utiliza a árvore sintática e a tabela de símbolos para fazer as analise semântica. Ao percorrer a árvore sintática relaciona os identificadores com seus dependentes de acordo com a estrutura hierárquica;
- Gerador de Código Intermediário: a linguagem utilizada para a geração de um código em formato intermediário entre a linguagem de alto nível e a linguagem assembly deve representar todas as expressões do programa original, de forma independente do processador para o qual o programa será gerado. Na verdade, compiladores não trabalham diretamente com o código de um processador específico. Normalmente o código gerado nessa fase é expresso em alguma linguagem intermediária, próxima do assembly, mas independente de processador;
- Otimizador de Código: a fase de otimização tenta melhorar o código intermediário, de forma que venha resultar um código de máquina mais rápido em tempo de execução. Existem otimizações das mais básicas até as mais complexas. A representação intermediária é gerada de forma que obtenha a mesma saída do código fonte, entretanto, às vezes, o código gerado pode ser muito mais eficiente através da eliminação de alguns comandos desnecessários. O objetivo dessa etapa é aplicar um conjunto de técnicas para detectar tais sequências e substituí-las por outras que removam as situações de ineficiência. Não é uma etapa obrigatória, em torno de geração;
- Gerador de Código: a partir do código intermediário ocorre a transformação por meio do mapeamento em um código assembly, linguagem de máquina ou objeto. As propriedades específicas da máquina-alvo se tornam o fator principal. O código de máquina atende os requisitos físicos e lógicos acerca da máquina, a qual se destinam.
Análise:
- Analisador Léxico
- Analisador Sintático
- Analisador Semântico
Síntese:
- Gerador de Código Intermediário
- Otimizador de Código
- Gerador de Código
3) Explique a diferença de um compilador e um interpretador.
R.: Compilador, é um programa que compreende um conjunto de programas. Tem por objetivo principal traduzir todas as suas linhas de código de uma linguagem para outra linguagem alvo. Normalmente de alto nível para outra de baixo nível.
Interpretador, é um programa ( ou conjunto de programas) que traduz ou converte o código todo para linguagem de baixo nível (código de máquina). No entanto executa diretamente cada instrução, passo a passo.
A diferença principal está na forma de execução, visto que enquanto um compilador analisa todo o código a fim de traduzi-lo de uma única vez (geralmente gerando um executável), o interpretador realiza esse trabalho de conversão aos poucos, sempre que uma declaração ou função é executada, por exemplo. Muitas vezes a interpretação aparenta levar mais tempo para finalizar, contudo o compilador apresenta seus passos a fim de gerar o produto final. Se diferenciando, já que uma vez compilado não é necessário realizar mais essa tradução, a não ser que o código seja alterado.
4) Como funciona o processo híbrido que utiliza um compilador e uma máquina virtual? Explique.
R.: Algumas linguagens de programação utilizam o processo de compilação de código fonte que gera um código objeto que se torna um código intermediário (bytecodes) para execução em uma máquina virtual. A exemplo temos a linguagem Java na qual sua execução não está diretamente relacionada com o sistema operacional, ocorre a comunicação diretamente com a JVM (Java Virtual Machine), possibilitando assim a portabilidade de seu código em diferentes sistemas operacionais. A JVM não trabalha diretamente com código Java, mas sim com um código específico chamado ByteCode, que é gerado pelo compilador Java (javac). Esse código é o que será traduzido pela Virtual Machine em código de máquina específico.
...