Como funciona um compilador? [fechadas]

16

Nota: Estou surpreso que isso não tenha sido perguntado antes, e se eu não consegui encontrá-lo em uma pesquisa.

Eu estive em muitos sites, li muitos artigos e ouvi toneladas de explicações. A maioria deles era boa, mas eram todos amplos ou muito complicados ou simplesmente ruins. Então, minha pergunta é: como funciona um compilador?

Se esta é uma pergunta difícil e ampla, por favor me diga. Mas se não, por favor responda a pergunta.

    
por Dynamic 08.11.2011 / 18:44
fonte

2 respostas

22

Um compilador é um programa que converte o código-fonte de outro programa de uma linguagem de programação em código executável.

O código-fonte é tipicamente em uma linguagem de programação de alto nível (por exemplo, Pascal, C, C ++, Java, Perl, C #, etc.). O código executável pode ser uma sequência de instruções de máquina que pode ser executada diretamente pela CPU ou pode ser uma representação intermediária que é interpretada por uma máquina virtual (por exemplo, código de byte Java).

Em suma, um compilador converte um programa de um formato legível em um formato legível por máquina.

Quanto ao funcionamento de um compilador, isso é realmente complicado. Existem livros e cursos universitários sobre o assunto. Tentarei descrever brevemente os principais estágios do processo, mas essa será uma visão geral muito superficial.

  1. Lexing - divida o texto do programa em "tokens". Os tokens são as "palavras" da linguagem de programação, como identificadores (palavras-chave, nomes de variáveis, nomes de funções, etc.) ou operadores (=, *, & etc.).
  2. Análise - converte a sequência de símbolos em uma árvore de análise, que é uma estrutura de dados que representa várias construções de linguagem: declarações de tipo, declarações de variáveis, definições de funções, loops, condicionais, expressões, etc.
  3. Otimização - avalie expressões constantes, otimize variáveis não usadas ou código inacessível, desenrole loops, se possível, etc.
  4. Traduza a árvore de análise em instruções de máquina (ou código de byte da JVM).

Mais uma vez, enfatizo que esta é uma descrição muito breve. Os compiladores modernos são muito inteligentes e, consequentemente, muito complicados.

    
por 08.11.2011 / 18:47
fonte
5

Um compilador é um programa de computador (ou conjunto de instruções) que transforma o código-fonte escrito em uma linguagem de programação (a linguagem fonte) em outra linguagem de computador (a linguagem de destino, geralmente com uma forma binária conhecida como código-objeto). A razão mais comum para querer transformar o código-fonte é criar um programa executável.

Compiladores conectam programas de origem em linguagens de alto nível com o hardware subjacente. Um compilador requer:

  1. Determinando a exatidão da sintaxe de programas
  2. Gerando código de objeto correto e eficiente
  3. Organização em tempo de execução
  4. Formatando a saída de acordo com as convenções do montador e / ou do vinculador.
por 08.11.2011 / 18:49
fonte

Tags