Buscar

Aula 01 - COMPILADORES - Estácio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

COMPILADORES
AULA 01
COMPILADORES
Aula 01
COMPILADORES
AULA 01
Apresentação da Disciplina
Professor: Marcus Pantoja da Silva
E-mail: marcus.pantoja@estacio.br
mailto:marcus.pantoja@estacio.br
COMPILADORES
AULA 01
Plano de Ensino
Unidade 1 – Introdução aos conceitos básicos
O processo de compilação
Passos da compilação
Função do compilador
A arquitetura geral de um compilador
Estrutura funcional de um compilador
Unidade 2 – Análise Léxica
Papel do analisador léxico
Especificação e reconhecimento de tokens
Analisador léxico como autômato finito
Ações semânticas do analisador léxico
Linguagem para especificação de analisadores léxicos
Projeto de um analisador léxico
COMPILADORES
AULA 01
Sumário
• Conceito de compilador
• O Modelo de compilação de Análise Síntese
• Contexto de um Compilador
• Análise Léxica
• Análise Sintática
• Análise Semântica
• Fases de um Compilador
COMPILADORES
AULA 01
Conceito de Compilador
• Um compilador pode ser entendido com um programa que
lê um programa escrito em uma linguagem (linguagem
fonte) e o traduz em um programa equivalente numa outra
linguagem (linguagem alvo).
CompiladorPrograma fonte Programa alvo
Mensagens de erro
Figura 1: Conceito de compilador
COMPILADORES
AULA 01
Funcionalidades
• Facilitar a programação (abstração)
• Checar certos tipos de erros e
vulnerabilidades
• Gerar código portável
• Otimizar código
• Velocidade, tamanho, etc
COMPILADORES
AULA 01
Exemplo de Erros
• Erro de sintaxe
• Variável não declarada
• Variável não inicializada
• Código inalcançável
• Erro léxico
• Número ou tipo de argumentos inválidos
em chamada de função
COMPILADORES
AULA 01
História dos compiladores
• Os compiladores começaram a desenvolver em
1955
• Anteriormente os códigos eram desenvolvidos
diretamente em linguagem de máquina.
• Rapidez de execução versus desenvolvimento complicado
• Necessidade de um montador
• Linguagens de mais alto nível
COMPILADORES
AULA 01
História dos compiladores
• Primeiros compiladores começaram a surgir na
década de 70
• Trabalhos iniciais: Realizam de tradução de
fórmulas aritméticas em código de máquina
• Compiladores eram considerados programas de
alta complexidade
• Primeiro compilador: Fortran (permitia a
declaração de identificadores com até seis
caracteres)
▪ FORmula TRANslation System
COMPILADORES
AULA 01
História dos compiladores
FORmula TRANslation System
COMPILADORES
AULA 01
História dos compiladores
• A partir de então foram desenvolvidas várias
técnicas sistemáticas para compiladores
• Reconhecimento de cadeias, gramáticas, geração de
linguagem.
• Desenvolveram-se várias linguagens de alto nível
• C, C++, Java, Linguagens visuais
COMPILADORES
AULA 01
História dos compiladores
• Desenvolvimento de programas para produção automática de
compiladores
➢ lex, flex
✓ Lex: Gerador de analisadores léxicos (UNIX)
✓ Flex: Gerador de analisadores léxicos (LINUX / Windows)
✓ Entrada: Arquivo de descrição do analisador léxico
✓ Saída: Programa em linguagem C que realiza a análise léxica
➢ Outros geradores de analisadores
✓ TPly – TP Lex /Yacc: Gera um programa em Pascal
✓ JavaCC: Para linguagem Java
✓ JFlex
✓ Flex++: Para linguagem C++
COMPILADORES
AULA 01
Compilador, interpretador e máquina virtual
Compilador
Prog. Fonte
Entrada de Dados
Prog. Objeto Saída
Ex: Pascal, 
C, C++
Interpretador
Prog. Fonte
Saída
Ex: PHP, 
javascript
Entrada
Compilador
Prog. Fonte
Entrada de Dados
Saída Ex: JavaMáquina 
Virtual
Cód. Intermediário
bytecode
COMPILADORES
AULA 01
O modelo de compilação de Análise e Síntese
• Podemos dividir a compilação em duas partes: análise e
síntese:
• Análise: Divide o programa fonte nas partes constituintes
criando uma representação intermediária.
• Síntese: Constrói o programa alvo a partir da representação
intermediária.
Figura 2: O Modelo de análise e síntese
COMPILADORES
AULA 01
O modelo de compilação de Análise e Síntese
Na fase de análise, as operações que são realizadas pelo
programa, são organizadas em uma forma hierárquica em
formato de árvore.
Muitas vezes é utilizada um tipo de árvore especial chamada de
árvore sintática, na qual cada nó representa uma operação e o
filho de um nó representa o argumento da operação.
COMPILADORES
AULA 01
O modelo de compilação de Análise e Síntese
Figura 3: Exemplos de árvores sintáticas
COMPILADORES
AULA 01
Análise
Análise Léxica:
✓ Organiza caracteres de entrada em grupos, chamados tokens
✓ Erros: Tamanho máximo da variável excedido, caracteres
inválidos...
Análise sintática:
✓ Organiza tokens em uma estrutura hierarquíca
✓ Erros: falta de (,), =, identificador inválido...
COMPILADORES
AULA 01
Análise
Análise Semântica:
✓ Checa se o programa respeita as regras básicas de consistência
✓ Erro: tipos inconsistentes -> atribuir uma String a uma variável
inteira.
COMPILADORES
AULA 01
Outros contextos onde compiladores são aplicados
• Os compiladores são associados na maioria das vezes as
linguagens de programação, no entanto, há outras áreas nas
quais eles são aplicados como por exemplo em formatadores
de texto que recebe como entrada um fluxo de caracteres que
deve ser organizado em parágrafos, seções etc. A parte que
“formata” o texto inclui comandos que devem ser traduzidos
de forma que o texto seja exibido de forma organizada.
COMPILADORES
AULA 01
Outros contextos onde compiladores são aplicados
• Compiladores de Silício: Utilizam uma linguagem fonte que é
similar ou idêntica a uma linguagem de programação
convencional (VHDL por exemplo), no entanto, as suas
variáveis não representam localizações de memória, mas sinais
lógicos (0 ou 1). Normalmente sua saída é um projeto de um
circuito.
COMPILADORES
AULA 01
• Adicionalmente a um
compilador, para ser criado
um programa fonte alvo
executável, vários outros
programas são necessários
COMPILADORES
AULA 01
Análise Léxica (scanner)
• Lê os caracteres de entrada (scanner) e os agrupa em
sequências chamadas lexemas (tokens )
• Os tokens são consumidos na fase seguinte (análise sintática)
Analisador 
Léxico
(scanner)
Analisador 
sintático 
(parser)
Programa 
fonte
token
GetToken()
Para análise 
sintática
Tabela de Símbolos
(identificadores e 
constantes)
COMPILADORES
AULA 01
Análise Léxica (scanner)
• Pode ser realizada com o uso de expressões regulares e
autômatos finitos
Exemplo de Expressões Regulares:
➢ letra → [A-Z] | [a-z]
➢ dígito → [0-9]
➢ dígitos → dígito dígito*
➢ identificador → letra[letra | dígito]*
COMPILADORES
AULA 01
Análise Léxica (scanner)
Exemplo de Autômatos finitos
Exemplo para > e >=
COMPILADORES
AULA 01
Análise Sintática
• Utiliza os tokens produzidos pela análise léxica e verifica a
formação de programa com uso de GLC (gramáticas livres do
contexto)
• A partir dos tokens cria uma representação intermediária tipo
árvore (árvore sintática) mostra a estrutura gramatical da
sequência de tokens.
COMPILADORES
AULA 01
Análise Sintática
exp = a + b * 30
<identificador, 1>, <=>,
<identificador, 2>, <+>,
<identificador, 3>, <*>,
<numero, 60>
Analisador
Sintático
COMPILADORES
AULA 01
Análise Semântica
❖ Utiliza a árvore sintática e a tabela de símbolos para:
▪ Criar a consistência semântica (significado) do programa
fonte em relação à linguagem.
▪ Exemplo: verificação de tipos
o A expressão:
x = x + 4.0;
Pode estar sintaticamente correta, mas semanticamente
errada dependendo do tipo de x (inteiro, real, etc.)
COMPILADORES
AULA 01
Exercícios
1) Os itens abaixo estão relacionados a compiladores com
EXCEÇÃO de:
a) Analisador sintático
b) Tabela de alocação de arquivos
c) Analisador Semântico
d) Otimizador de código fonte
e) Gerador de código
•
COMPILADORES
AULA 01
Exercícios
2) De uma forma geral, um compilador é um programa que
recebe como entrada o texto de um programa (fonte) em uma
certa linguagem e produz como saída outro texto de programa
em uma linguagem diferente da utilizada no fonte. Para isso,
compiladoressão estruturados internamente em uma série de
módulos que produzem, em sequência, representações
intermediárias do programa fonte ou de suas partes.
A quebra do texto do programa fonte em unidades básicas da
linguagem denominadas de tokens é realizada pelo módulo
denominado
•
COMPILADORES
AULA 01
Exercícios
a) Interpretador
b) Analisador Léxico
c) Analisador Sintático
d) Tradutor de Contexto
e) Gerador de Código
•
COMPILADORES
AULA 01
Exercícios
3) Desenvolva autômatos finitos:
a) Frases terminadas com um ponto de interrogação
Ex: Qual seu nome?
b) Expressões aritméticas
Ex: 2 + 3, 4*3-3+3
c) CNPJ ou CPF: xxx.xxx.xxx/xxxx-xx |yyy.yyy.yyy-yy
Ex:123.456.789/0001-50, 123.456.789-00
d) Comentários em C
Ex: /* texto */
•
COMPILADORES
AULA 01
Bibliografia Básica 
AHO, Alfred V.; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores: princípios, 
técnicas e ferramentas. Rio de Janeiro: LTC, 2008. MENEZES, Paulo Fernando 
Blauth. 
Linguagens Formais e Autômatos. 4. ed. Porto Alegre: Bookman, 2002. PRICE, Ana 
Maria; TOSCANI, Simão Sirineo. Implementação de Linguagens de Programação: 
Compiladores. 2. ed. Porto Alegre: Sagra-Luzzato - Instituto de Informática da 
UFRGS, 2001.
COMPILADORES
AULA 01
Bibliografia Complementar 
LEWIS, Harry; PAPADIMITRIOU, Christos. Elementos de Teoria da Computação. 2 
ed. Porto Alegre: Bookman, 2004;
DIVERIO,Tiaraju Asmuz; MENEZES,Paulo Blauth. Teoria da Computação: Máquinas 
Universais e Computabilidade . 3ª Ed. Vol. 5. Rio de Janeiro: Bookman, 2011. 
GRUNE, Dick. Projeto moderno de compiladores: implementação e aplicações. Rio 
de Janeiro: Campus, 2001. 
JOSÉ NETO, João. Introdução à compilação. Rio de Janeiro: LTC, 1987. DELAMARO, 
Márcio E. Como construir um compilador utilizando ferramentas Java. São Paulo: 
Novatec, 2004 
COMPILADORES
AULA 01
AVANCE PARA FINALIZAR 
A APRESENTAÇÃO.

Continue navegando