Escolar Documentos
Profissional Documentos
Cultura Documentos
Rosiery Maia
rosierymaia@uern.br
rosiery@gmail.com
Campus de Natal
Universidade do Estado do Rio Grande do Norte
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
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
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
Contextualização
Linguagem de
Cria Programa Programação
(alto nível)
Fonte
Erros
COMPILADOR
Ling. Máquina
Programa Ling. Objeto
Alvo Ling. Executável
Ling. Simbólica
Provoca
Resultado
Funcionalidade do Compilador
Programa
Fonte
COMPILADOR
INFORMAR
ERROS
Programa
Alvo
Funcionalidade do Compilador
Programa
Fonte
Tabela de Símbolos
ERROS
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.
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)
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
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.
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
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
– ...
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
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
ENTRADA SAÍDA
Id2 10
ENTRADA SAÍDA
Id1 := temp2
Ou ainda
ENTRADA SAÍDA
constante
MOVF Id2 R1
ADDF #10.0 R1
Id1 := Id2 + 10.0
MOVF R1 Id1
emissor receptador
Ponto Flutuante
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