Você está na página 1de 25

Compiladores

I – Conceitos Básicos do Processo de Compilação

Rosiery Maia
rosierymaia@uern.br
rosiery@gmail.com

Campus de Natal
Universidade do Estado do Rio Grande do Norte

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Motivação
Meados de 1950:
Computadores com características
instrísecasdiferentes arquiteturas, PROGRAMAÇÃO ANTES DOS COMPILADORES
instruções e formas de
armazenamento de dados

Programador Add C,A,B


Computador 1
Esforço no
desenvolvimento de Instrução do
aplicações para cada Usuário
Load A
plataforma Programador
C=A+B Add B
Computador 2 Store C

Demanda por maior


eficiência de Programador
programação Sum A,B,C
Computador 3

Desenvolvimento de
Compiladores
Rosiery Maia (UERN/CAN) Compiladores 2011.2
Conceitos básicos do Processo de Compilação

Motivação
Meados de 1950:
Computadores com características
instrísecasdiferentes arquiteturas, PROGRAMAÇÃO COM OS COMPILADORES
instruções e formas de
armazenamento de dados
Tradutor 1

Esforço no Add C,A,B


desenvolvimento de Instrução do
Programador
aplicações para cada Usuário Tradutor 2
plataforma Real A,B,C
C=A+B Load A
C=A+B Add B
Store C
Demanda por maior
eficiência de Tradutor 3
programação
Sum A,B,C

Desenvolvimento de
Compiladores
Rosiery Maia (UERN/CAN) Compiladores 2011.2
Conceitos básicos do Processo de Compilação

Conceitos básicos
Linguagens de Programação?
Aplicação real
Notações que descrevem computações.
Codificação em
Linguagem de Meio de comunicação entre o indivíduo que deseja resolver determinado
problema e o computador escolhido para ajudá-lo na solução.
Programação
Linguagens de Programação
Programa
(Software) Úteis para o programador
Não são compreensíveis pela máquina

Execução da
aplicação Linguagens de Programação (alto nível)
X
Linguagens de máquina (baixo nível)

Conversão entre
linguagens diferentes? Compilador?
Processador de Linguagem

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Contextualização
Linguagem de
Cria Programa Programação
(alto nível)
Fonte

Erros

COMPILADOR

Dados de Traduz para


entrada

Ling. Máquina
Programa Ling. Objeto
Alvo Ling. Executável
Ling. Simbólica

Provoca

Resultado

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Funcionalidade do Compilador

Programa
Fonte

COMPILADOR
INFORMAR
ERROS

Programa
Alvo

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Funcionalidade do Compilador

Programa
Fonte
Tabela de Símbolos
ERROS

Análise Análise Análise Gerar código Otimizar cód. Gerar código


Léxica Sintática Semântica Intermediário intermediário Objeto

Análise Síntese
Cria uma representação Cria o Programa Alvo, a
intermediária do Programa partir da representação
Programa Fonte. Alvo intermediária.

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Características do Compilador
• Reconhece Programas Fontes corretos e com erros
• Gera um código de máquina correto
• Cria uma estrutura de armazenamento de dados (tabela de
símbolos)

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Análise Léxica
• Análise Léxica (Esquadrinhamento, Scanning)
• Objetivo
– identificar seqüências de caracteres que constituem Unidades Léxicas (tokens ou
lexemas)
Tokens: classes de símbolos como palavras reservadas, identificadores, ...
• Funcionamento
O analisador léxico lê, caractere por caractere, o texto fonte para:
– Verificar se pertencem ao Alfabeto da Linguagem
– Enviar mensagens de erro, quando o caso acima não for satisfeito
– Identificar tokens, reconhecendo comentários e brancos
– Construir a Tabela de Símbolos
• Saída
– Cadeia de tokens que é passada para a Análise Sintática
• Pode ser implementada como uma sub-rotina da Análise Sintática
Rosiery Maia (UERN/CAN) Compiladores 2011.2
Conceitos básicos do Processo de Compilação

Análise Léxica
• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

1. Identificador 1
x := y + 10 x
2. Símbolo de atribuição
:=
3. Identificador 2
y
4. Sinal de adição
+
5. Número
10

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Análise Sintática
• Análise Sintática (Análise Hierárquica ou Gramatical)
• Objetivo
– Verificar se a estrutura gramatical do programa está correta (se a estrutura
foi formada usando as Regras Gramaticais da Linguagem)
• Funcionamento
– Fazer uma varredura (Parsing) na cadeia de tokens do programa fonte
– Identificar seqüências de símbolos que constituem Estruturas Sintáticas
(expressões, comandos, ...)
– Identificar todos os erros de sintaxe: erro cometido e sua posição
• Saída
– Exibir a Estrutura Sintática identificada no programa fonte em uma Árvore de
Derivação Parcial, ou Total.

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Análise Sintática
• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

Nó intermediário: operação
1. Identificador 1
x :=
2. Símbolo de atribuição
:=
3. Identificador 2 Id1 +
y
4. Sinal de adição
+
5. Número Id2 10
10
Nó filho: argumento da operação

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Análise Semântica
• Objetivo
– Determinar se as Estruturas Sintáticas analisadas fazem sentido

Fazer sentido:
– Se o identificador declarado como variável é usado como tal
– Se existe compatibilidade entre os operandos e operadores em expressões
– ...

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Análise Semântica
• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

:= :=

Id1 + Id1 +
Tipo 1

Id2 10 Id2 10
Tipo 1 Tipo 1

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Geração de Código Intermediário


• Objetivo
– Gerar uma seqüência de código que pode ser o código objeto final (para
tradutores mais simples) ou um código intermediário, na maioria das vezes.

Código Intermediário:
– Não especifica detalhes como quais registradores serão usados, quais
endereços de memória serão referenciados, etc.
– Fácil de produzir
– Fácil de Traduzir no programa alvo

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Geração de Código Intermediário


• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

:= temp1 := IntToReal (10)

temp2 := Id2 + temp1


Id1 +
Id1 := temp2

Id2 10

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Geração de Código Intermediário


• Exemplo: Instrução x := y + 10

Código com 3 endereços:

–Cada instrução possui, no máximo,


um operador além do da atribuição temp1 := IntToReal (10)

–É gerado um nome temporário para temp2 := Id2 + temp1


receber o valor computado em cada
Id1 := temp2
instrução

–Podem assumir menos que 3


operandos

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Otimização de Código Intermediário


• Objetivo
– Otimizar o Código Intermediário
• Velocidade de execução
• Espaço de memória

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Otimização de Código Intermediário


• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

temp1 := Id2 + 10.0


temp1 := IntToReal (10)
Id1 := temp1
temp2 := Id2 + temp1

Id1 := temp2
Ou ainda

Id1 := Id2 + 10.0

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Geração de Código Objeto


• Objetivo
– Produção do Código Objeto
– Reserva de memória para constantes e variáveis
– Seleção de registradores
– ...
• Produzir um código eficiente: complicadíssimo!

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Geração de Código Objeto


• Exemplo: Instrução x := y + 10

ENTRADA SAÍDA

constante

MOVF Id2 R1

ADDF #10.0 R1
Id1 := Id2 + 10.0
MOVF R1 Id1

emissor receptador

Ponto Flutuante

Copia o conteúdo do endereço Id2 no Registrador R1

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Gerenciamento da Tabela de Símbolos


• São utilizadas por quase todas as fases da Compilação
– Tabelas fixas para uma dada Linguagem
– Tabela de Palavras Reservadas
– Tabela de Delimitadores
• Tabela de Símbolos
– Mais importante!
– Montada durante a Análise do programa fonte
– Informações:
– Declarações de variáveis
– Declarações dos procedimentos ou sub-rotinas
– Parâmetros de sub-rotinas
• Qualquer nova informação DEVE ser inserida na tabela
• Deve se permitir rápida inserção e extração de informações

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Gerenciamento dos Erros


• Tratar os erros na fase da Análise
• Compilação continuada, mesmo com erros

Rosiery Maia (UERN/CAN) Compiladores 2011.2


Conceitos básicos do Processo de Compilação

Fases da Compilação
Análise Semântica
x := y + 10
:=
Análise Léxica
Id1 +
IntToReal
1. Identificador 1 x
2. Símbolo de atribuição := Id2 10
3. Identificador 2 y
4. Sinal de adição +
5. Número 10 Cód. Intermediário

Análise Sintática temp1 := IntToReal (10)


temp2 := Id2 + temp1
Id1 := temp2
:=
Otimização de Cód. Intermediário

Id1 + Id1 := Id2 + 10.0


Cód. Objeto
Id2 10 MOVF Id2 R1
ADDF #10.0 R1
MOVF R1 Id1
Rosiery Maia (UERN/CAN) Compiladores 2011.2
Conceitos básicos do Processo de Compilação

Processos Similares (Tarefa de casa)

Rosiery Maia (UERN/CAN) Compiladores 2011.2

Você também pode gostar