Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
O que é um compilador de computador e como ele funciona no processo de tradução de linguagens de programação de alto nível em código da máquina?

O compilador de computador:tradutor do código legível pelo homem para a linguagem da máquina



A compilador é um programa especial que traduz o código-fonte escrito em uma linguagem de programação de alto nível (como C ++, Java, Python, mas o Python geralmente é interpretado) no código da máquina ou em outro idioma de nível inferior que um computador pode entender e executar diretamente. Pense nisso como um tradutor sofisticado entre um idioma que os humanos escrevem e as máquinas de idiomas "entendem".

Funcionamento de um compilador:o processo de tradução

O processo de compilação normalmente envolve várias fases distintas, cada uma executando uma tarefa específica. Aqui está um colapso dos estágios -chave:

1.

* Objetivo: Lê o caractere do código -fonte por caracteres e os agrupa em unidades significativas chamadas *tokens *.
* Ações:
* Remove o espaço em branco e os comentários.
* Identifica palavras-chave (como `if`,` while`, `para`), identificadores (nomes de variáveis), operadores (`+`,` -`, `*`, `/`), literais (números, strings) e separadores (parênteses, semicolons).
* Atribui a cada token um tipo (por exemplo, `identificador`,` Integer_literal`, `palavra -chave ').
* saída: Um fluxo de tokens.

Exemplo:

`` `c ++
int x =10 + y; // Código C ++ Exemplo
`` `

Seria tokenizado como algo como:

`` `






`` `

2. Análise de sintaxe (análise):

* Objetivo: Verifica se a sequência de tokens está em conformidade com as regras gramaticais (sintaxe) da linguagem de programação.
* Ações:
* Usa os tokens para construir uma árvore de sintaxe abstrata (AST). O AST representa a estrutura hierárquica do programa, mostrando como os tokens estão relacionados.
* Identifica erros de sintaxe (por exemplo, semicolons ausentes, parênteses incompatíveis).
* saída: Uma árvore de sintaxe abstrata (AST).

Exemplo (continuando de cima):

O analisador construiria um AST representando a declaração `int x =10 + y;` o ast mostraria que `x` está sendo declarado como um número inteiro e inicializado com o resultado da expressão` 10 + y`.

3. Análise semântica:

* Objetivo: Verifica o significado (semântica) do código e garante que o programa seja logicamente consistente.
* Ações:
* Verificação do tipo:verifica se as operações são executadas em tipos de dados compatíveis (por exemplo, adicionar um número inteiro a uma string seria um erro).
* Resolução do escopo:determina o significado dos identificadores com base em seu contexto (por exemplo, qual variável `x` está sendo referida).
* Detecção de erro:identifica erros semânticos (por exemplo, usando uma variável não declarada, chamando uma função com o número errado de argumentos).
* Gerenciamento da tabela de símbolos:a tabela de símbolos armazena informações sobre identificadores (variáveis, funções etc.) usadas no programa.
* saída: Um AST anotado (o AST com informações semânticas adicionais) e a tabela de símbolos.

4. Geração intermediária de código:

* Objetivo: Traduz o AST anotado em uma representação intermediária (IR).
* Ações:
* O IR é uma representação independente da máquina do programa, projetada para ser facilmente otimizada e traduzida no código de destino. Os IRs comuns incluem código de três endereço e código da máquina da pilha.
* Simplifica o código e facilita a execução de otimizações.
* saída: Código intermediário (IR).

Exemplo (código simples de três adolescentes):

A expressão `10 + y` pode ser traduzida para:

`` `
t1 =10 + y // t1 é uma variável temporária
x =t1
`` `

5. otimização de código:

* Objetivo: Melhora a eficiência do código intermediário.
* Ações:
* Várias técnicas de otimização são aplicadas para reduzir o tamanho do código, o tempo de execução ou ambos.
* Otimizações comuns incluem:
* Dobragem constante (avaliando expressões constantes no tempo de compilação).
* Eliminação do código morto (removendo código que nunca é executado).
* Loop Ussroling (expandindo loops para reduzir a sobrecarga).
* Eliminação comum da subexpressão (evitando cálculos redundantes).
* saída: Código intermediário otimizado.

6. geração de código:

* Objetivo: Traduz o código intermediário otimizado no código da máquina de destino (ou linguagem de montagem).
* Ações:
* Seleciona as instruções da máquina apropriadas para cada instrução IR.
* Aloca registros para armazenar variáveis ​​e valores intermediários.
* Lida com a alocação de memória.
* saída: Código da máquina ou linguagem de montagem.

7. Montagem (opcional):

* Se o gerador de código produzir linguagem de montagem, um programa de assembler será usado para converter o código de montagem em código da máquina.

8. Linking (opcional):

* Combina vários arquivos de objeto (código compilado de diferentes arquivos de origem) e bibliotecas em um único arquivo executável.
* Resolve referências externas (referências a funções ou variáveis ​​definidas em outros arquivos).

Resumo do exemplo:

Digamos que você tenha um programa C ++ simples:

`` `c ++
int main () {
int a =5;
int b =10;
int sum =a + b;
retornar 0;
}
`` `

O compilador passaria pelo seguinte processo (simplificado):

1. Análise lexical: Identifica tokens como `int`,` main`, `=`, `5`,`+`etc.
2. Análise de sintaxe: Cria um AST que representa a estrutura do código (por exemplo, a função `main` contém declarações e uma operação de adição).
3. Análise semântica: Verifica se as variáveis ​​são declaradas antes do uso, que `+` é válido para números inteiros, etc.
4. Geração intermediária de código: Cria uma representação intermediária, talvez algo como:
`` `
a =5
b =10
soma =a + b
retornar 0
`` `
5. otimização de código: Pode realizar pequenas otimizações (não é possível muita otimização nesse caso trivial).
6. geração de código: Traduz o IR para as instruções do código da máquina específicas para o processador de destino (por exemplo, instruções de montagem x86).

Vantagens -chave da compilação:

* Velocidade: O código compilado geralmente é executado mais rápido que o código interpretado porque a tradução é feita apenas uma vez, durante a compilação, em vez de toda vez que o programa é executado.
* Detecção de erro: Os compiladores podem detectar muitos erros durante a compilação, antes que o programa seja executado, o que ajuda a melhorar a confiabilidade do código.
* Segurança: Ao detectar erros no momento da compilação, os compiladores podem ajudar a prevenir algumas vulnerabilidades de segurança.

Desvantagens -chave da compilação:

* Dependência da plataforma: O código compilado geralmente é específico da plataforma, o que significa que só pode ser executado no sistema operacional e na arquitetura do processador para a qual foi compilado.
* Compilar Hora: O processo de compilação pode levar uma quantidade significativa de tempo, especialmente para grandes programas.
* Complexidade de depuração: Às vezes, o código compilado de depuração pode ser mais desafiador do que o código interpretado de depuração, porque você está trabalhando com o código da máquina em vez do código -fonte original.

Em resumo, o compilador é um componente crucial do desenvolvimento de software, responsável por transformar o código de alto nível em um formulário que um computador pode executar. Ele executa vários estágios complexos para analisar, otimizar e gerar código da máquina, nos permitindo executar os programas que escrevemos.

Anterior :

Próximo :
  Os artigos relacionados
·Como desmontar Setup.exe 
·Como escrever um arquivo de Efeito para XNA Games 
·Como o código em Pascal 
·Como criar e usar um DataGrid 
·Como formatar datas em C # 
·Como atualizar TabHost conteúdo em um Android 
·Quais são as limitações e vantagens do uso de idioma…
·Como fazer um modelo WPF DataGrid 
·Definição de COBOL Comp -3 
·Como construir um sistema de afiliados em ColdFusion 
  Artigos em destaque
·Como usar o PHP para fazer um arquivo do Excel 
·Definir Infinite Loop 
·Como fazer um arquivo SWF em um botão URL 
·Como converter um Float para um Int32 
·Como adicionar GMP para Xcode 
·Quantos tipos podemos formatar o computador? 
·Como atualizar o PHP 5.1 para PHP 5.2 no CentOS 
·Como fazer um retângulo com uma função recursiva em …
·As vantagens de múltiplas heranças 
·Como usar nomes reservados como colunas no MySQL 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados