Uso de compiladores
Compilador
é um programa que traduz o código fonte escrito em uma linguagem de mais alto nível para outra linguagem de mais baixo nível; a linguagem original é chamada de linguagem fonte, e a linguagem final é chamada de linguagem destino ou alvo;
Programa
Linguagem
Fonte
Compilador
Mensagens
de Erro
Programa
Linguagem
Alvo
Interpretadores vs. compiladores
Qual a diferença entre compilação e interpretação?
Interpretadores
Menores que os compiladores
Mais adaptáveis a ambientes computacionais diversos
Tempo de execução maior
Ex. Javascript, Python, Perl
Compiladores
Compila-se uma única vez, executando-se quantas vezes se queira Tempo de execução menor
Ex. C, Pascal, Delph, etc...
Compiladores híbridos (Java)
Compila-se para um código intermediário/virtual, que, por sua vez, é interpretado por uma máquina virtual
Motivos para desenvolver um compilador?
Em que situações é necessário construir um novo compilador?
Criação de uma nova Linguagem
Extensão de uma linguagem existente
Surgimento de uma nova máquina
Desempenho do compilador existente
Estrutura geral de um compilador programa-fonte analisador léxico
Tabela de símbolos
analisador sintático analisador semântico
Tabela de palavras e símbolos reservados
gerador de código intermediário otimizador de código gerador de código programa-alvo dados de entrada saída
Manipulação de erros
Fases da compilação
Lexical: palavras (tokens) do programa
Sintática: combinação de tokens que formam o programa
comando_while while ( expressão ) comandos
Erro: while ( expressão comandos
Semântica e contextual: adequação do uso
i, while, =, [, (, expr_arit
| ... expr_arit expr_arit * termo
| termo
| ... termo expr_arit
| NÚMERO
| IDENTIFICADOR comando Analisador sintático Verificação