Buscar

COMPILADORES Atividade 03 - Introdução à compilação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

1)
As diferenças fundamentais entre um compilador e um interpretador são:
Compilador:
· Processa o código fonte como um todo e o traduz para código objeto em uma única etapa.
· Detecta erros durante a compilação, incluindo erros de sintaxe e semântica.
· Gera código objeto otimizado para a execução direta pela máquina.
· Produz um arquivo executável independente do compilador, que pode ser distribuído e
executado em diferentes plataformas.
· Exemplos: GCC para C/C++, Java Compiler para Java, Rust Compiler para Rust.
Interpretador:
· Lê e executa o código fonte linha por linha durante a execução do programa.
· Fornece feedback imediato sobre erros durante a interpretação, facilitando a depuração.
· Não gera um arquivo executável separado; o código é interpretado em tempo real.
· Permite a execução do código fonte em diferentes plataformas, desde que haja um
interpretador disponível para a linguagem alvo.
· Facilita o desenvolvimento iterativo, pois não requer compilação antes da execução.
· Exemplos: Python Interpreter para Python, Node.js para JavaScript, Ruby Interpreter para Ruby.
2)
Vantagens de um compilador:
· Desempenho superior: O código compilado é traduzido para linguagem de máquina e otimizado
durante o processo de compilação, resultando em um desempenho mais rápido durante a
execução do programa. Isso ocorre porque o código objeto é executado diretamente pelo
processador, sem a necessidade de interpretação em tempo real.
· Portabilidade do código objeto: Após a compilação, o código objeto gerado pode ser distribuído
e executado em diferentes sistemas operacionais e arquiteturas de hardware. Isso proporciona
uma alta portabilidade, pois o código objeto é independente do compilador e da plataforma em
que foi compilado.
· Detecção de erros antecipada: Durante o processo de compilação, o compilador verifica o
código fonte em busca de erros de sintaxe e semântica. Isso permite que os desenvolvedores
identifiquem e corrijam problemas antes da execução do programa, o que facilita a depuração e
reduz a ocorrência de erros em tempo de execução.
· Proteção do código fonte: Ao distribuir apenas o código objeto compilado, os desenvolvedores
podem proteger seu código fonte original, evitando que seja facilmente acessado e modificado
por terceiros. Isso é especialmente útil em cenários em que a propriedade intelectual precisa ser
protegida.
Vantagens de um interpretador:
· Feedback imediato: Durante a execução do programa, os interpretadores fornecem feedback
imediato sobre erros de sintaxe ou semântica encontrados, facilitando a depuração e a correção
de problemas no código fonte em tempo real.
· Portabilidade do interpretador: Os programas interpretados podem ser executados em
qualquer sistema para o qual exista um interpretador disponível para a linguagem de
programação utilizada. Isso proporciona uma alta portabilidade, pois o mesmo código fonte
pode ser executado em diferentes plataformas sem a necessidade de recompilação.
· Flexibilidade: Os interpretadores permitem alterações rápidas no código fonte e a execução de
trechos de código de forma interativa, sem a necessidade de recompilação. Isso é útil para o
desenvolvimento iterativo, prototipagem rápida e experimentação com diferentes abordagens
de implementação.
· Facilidade de distribuição: Os programas interpretados podem ser distribuídos como código
fonte, facilitando a colaboração entre desenvolvedores e a compreensão do funcionamento do
programa por parte dos usuários. Isso é especialmente útil em projetos de código aberto e em
ambientes de aprendizado e educação.
3)
Vantagens de um sistema de processamento de linguagem que produz linguagem simbólica em vez de
linguagem de máquina:
· Portabilidade: A linguagem simbólica gerada pelo compilador é independente da arquitetura de
hardware específica do computador alvo. Isso significa que o mesmo código-fonte compilado
pode ser executado em diferentes sistemas sem a necessidade de recompilação para cada
plataforma específica. Isso facilita a distribuição e a execução do software em uma variedade de
ambientes.
· Facilidade de manutenção: A linguagem simbólica preserva mais informações sobre a estrutura
e a lógica do programa original do que a linguagem de máquina. Isso torna mais fácil para os
desenvolvedores entenderem e modificarem o código fonte, facilitando a depuração, a correção
de erros e a implementação de novos recursos.
· Portabilidade do código fonte: Como a linguagem simbólica é preservada após a compilação, os
desenvolvedores podem revisar e modificar o código-fonte original mesmo após a compilação.
Isso permite atualizações e adaptações do programa para diferentes plataformas sem a
necessidade de acesso ao código-fonte original.
· Facilidade de otimização: A linguagem simbólica pode servir como um formato intermediário
durante o processo de compilação, permitindo a aplicação de otimizações avançadas, como
otimização de código, análise estática e geração de código para diferentes arquiteturas de
destino. Isso pode resultar em programas mais eficientes e com melhor desempenho.
4)
Usar C como linguagem objeto para um compilador fonte para fonte apresenta várias vantagens:
· Portabilidade: C é amplamente suportado em diversas plataformas e sistemas operacionais,
facilitando a portabilidade do compilador para diferentes ambientes de desenvolvimento.
· Eficiência: C oferece um equilíbrio entre abstração e eficiência, resultando em programas
compilados com bom desempenho e consumo eficiente de recursos do sistema.
· Controle de sistema: C permite um alto nível de controle sobre o hardware e o sistema
operacional, sendo essencial para compiladores que precisam interagir diretamente com
funcionalidades de baixo nível, como sistema de arquivos e entrada/saída.
· Base de código e recursos: Devido à sua ampla adoção e uso na indústria, há uma vasta base de
código, bibliotecas padrão e ferramentas de desenvolvimento disponíveis para auxiliar no
desenvolvimento de um compilador em C.
· Desempenho: Compiladores escritos em C tendem a ter um desempenho sólido devido à
eficiência da linguagem e ao acesso direto ao hardware, resultando em tempos de compilação
mais rápidos e executáveis mais otimizados.
5)
Essas tarefas são essenciais para transformar o código assembly em código objeto executável pelo
processador. O montador é responsável por coordenar essas etapas para garantir que o programa
assembly seja traduzido corretamente em linguagem de máquina. Tarefas realizadas por um programa
montador:
· Análise léxica: O montador identifica os diferentes elementos do código assembly, como
instruções, operandos e rótulos, dividindo o código em tokens.
· Análise sintática: Garante que a estrutura e a sintaxe do código assembly estejam corretas,
verificando se as instruções e operandos estão organizados conforme a gramática da linguagem.
· Resolução de rótulos e endereços: Atribui endereços de memória aos rótulos definidos no
código, permitindo que as referências a esses rótulos sejam traduzidas em endereços absolutos
ou relativos.
· Geração de código objeto: Traduz as instruções assembly em linguagem de máquina
correspondente, produzindo um código objeto executável diretamente pelo processador.
· Gestão de seções e diretivas: Interpreta e processa diretivas especiais que definem diferentes
partes do programa, como seções de código, dados e tabelas de símbolos.
· Geração de tabela de símbolos: Opcionalmente, cria uma tabela que mapeia os rótulos
definidos no código para seus endereços de memória correspondentes, facilitando o processo
de ligação ou depuração.

Outros materiais