GoConqr has a new look! Let us know what you think.

Notes

Compiladores e Interpretadores

Isabelle Omena Desenvolvimento de Sistemas Concurso Público Portuguese 1 page

Compiladores e Interpretadores

Content of the notes (1)

Page 1

COMPILADORES E INTERPRETADORES

Compilador é um programa de computador capaz de traduzir um código-fonte escrito em uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível (linguagem de montagem).

Pré-processador é um programa que recebe um texto e efetua conversões léxicas, tais como substituição de macros, inclusão condicional, inclusão de ficheiros e exclusão de comentários.

A linguagem Java não possui um pré-processador.

PROCESSO DE COMPILAÇÃO

O processo de compilação é dividido em duas fases: Análise ou Front-End (Análise Léxica, Sintática, Semântica Geração de Código Intermediário) e Síntese ou Backend (Otimização de Código Intermediário e Geração de Código Código Final)

Análise Léxica: nesta fase, um analisador léxico (ou scanner) lê o código-fonte, caractere por caractere e divide o código escrito em símbolos léxicos chamados tokens, guardados em uma tabela de símbolos. Ele descarta comentários, espaços em branco, marcas de formatação e produz uma sequência de palavraschaves, pontuações e nomes.

Análise Sintática: também conhecida como Análise Gramatical ou Parsing, analisa uma sequência de entrada para determinar sua estrutura gramatical, segundo uma determinada gramática formal. Ela pega os tokens resultantes do processo de análise léxica e joga em uma estrutura hierárquica, como uma árvore. Assim como no português, verifica-se a estrutura do texto.

Análise Semântica: nesta fase, verificam-se erros semânticos, i.e., erros de sentido. Entre as principais atividades, estão a checagem de tipos, verificação de fluxos de controle e verificação de unicidade de declaração de variáveis. Essa fase também é encarregada de analisar a utilização dos identificadores e de ligar cada uma delas a sua declaração.

Geração de Código Intermediário: nesta fase, ocorre a transformação da árvore sintática em uma representação intermediária do código fonte. Esta linguagem intermediária é mais próxima da linguagem objeto do que o código fonte, mas ainda permite uma manipulação mais fácil do que se o código Assembly ou código de máquina fosse utilizado.

Otimização de Código Intermediário: nesta fase, examina-se o código intermediário produzido durante a fase anterior com objetivo de produzir, através de algumas técnicas, um código que execute com bastante eficiência o programa. Utilizam-se técnicas que detectam padrões dentro do código produzido e os substitui por códigos mais eficientes. Simples assim.

Geração de Código Final: chegamos à última fase do processo de compilação com a geração do código de montagem (em sentido estrito) ou em um código-objeto (em sentido amplo), porque – na prática - muitos compiladores já realizam a montagem. Um código-objeto não é imediatamente executável, visto que ainda há código binário a ser incluído no programa, tais como bibliotecas.

MONTADOR

O processo de Montagem traduz um programa escrito em linguagem de montagem (Ex: Assembly) em um programa equivalente em linguagem de máquina (0 e 1).

A liguagem de máquina e a linguagem de montagem são dependentes do hardware! Cada processador possui sua linguagem de montagem.

Cross-assembler: é executado em um computador com um processador diferente daquele para o qual se está gerando código.

Macro-assembler: dispõe de recursos de macro, efetuando a expansão do código cada vez que uma macro for encontrada.

Micro-assembler: permite a escrita de micro-instruções, definindo-se assim um conjunto de instruções de um processador microprogramável.

Meta-assembler: é um assembler que pode montar programas para vários processadores diferentes.

Assembler de um passo: varre o programa-fonte apenas uma vez, gerando o código (deve existir alguma forma de se revolver as referências adiante).

Assembler de dois passos: varre o programa-fonte duas vezes para gerar o código, podendo assim resolver automaticamente as referências adiante.

LIGADOR (LINK ou LINK-EDITOR)

Ligadores são programas que recebem como entrada um conjunto de arquivos objeto, bibliotecas padrão, arquivos de controle, parâmetros diversos e bibliotecas compartilhadas e os unem em um módulo, denominado Módulo de Carga, que é posteriormente carregado em memória.

Ele é responsável por resolver referências internas e externas.

CARREGADOR (Loader)

São programas que transferem o código de máquina de um módulo objeto para a memória e encaminham o início de sua execução.

Existem dois tipos básicos de carregador:

carregadores binários ou absolutos: são mais simples e apenas copiam o arquivo em formato binário para a memória. Deve sempre ser carregado na mesma área de memória para serem executados corretamente. Ex. arquivos com extensão .com.

carregadores realocáveis: pode ser colocado em qualquer local da memória para execução. Ex. arquivos com extensão .exe.

CARREGADORES-LIGADORES

Fazem a ligação de partes do programa em tempo de execução.

BIBLIOTECAS

Bibliotecas são uma coleção de funções e definições utilizadas no desenvolvimento de software para algum propósito específico.

O Ligador é o responsável, em geral, por fazer referências entre os executáveis e as bibliotecas.

Estáticas: todo o código da biblioteca é copiado e inserido dentro do binário final.

dinâmicas ou compartilhadas: não são inseridas em sua totalidade, elas são apenas referenciadas no binário final. Devido a seu tempo de carregamento, é adicionada uma pequena latência nas chamadas a esta biblioteca, consequentemente seu programa será ligeiramente mais lento.Ex. .DDL(Windows) e .LIB(Linux).

Compiladores e Interpretadores

INTERPRETADORES

são programas de computador capazes de traduzir um código-fonte escrito em uma linguagem de programação de alto nível para um código executável.

Comparando com o processo de compilação, os interpretadores realizam somente a fase de análise, mas não de síntese.

Eles realizam a tradução de forma mais veloz que os compiladores; no entanto, programas compilados são executados mais rapidamente que programas interpretados.

Correções e alterações são mais rápidas de serem realizadas.

o código não precisa ser compilado para serem executados eVconsomem menos memória do que um compilador.

LINGUAGENS INTERPRETADAS: Basic, Prolog e Python.

LINGUAGENS HÍBRIDAS: Java.

Information

Description
Concurso Público Desenvolvimento de Sistemas Note on Compiladores e Interpretadores, created by Isabelle Omena on 27/10/2016.
Created by
Isabelle Omena
Views
3
History
  • Created by Isabelle Omena · Oct 3, 2016
  • Copied by Isabelle Omena · Oct 27, 2016
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?