Buscar

Compiladores: Análise e Síntese

Prévia do material em texto

Gramática Livre de Contexto
2021.1
COMPILADORES
Compiladores
 O primeiro compilador Fortran levou 18 anos para ser 
implementado (Backus et al., 1957).
 Contudo, tem sido descobertas técnicas sistemáticas para 
manipular muitas das importantes tarefas que ocorrem durante 
uma compilação.
Compiladores
 Um compilador é um programa que recebe como entrada um 
programa em uma linguagem de programação – a linguagem 
fonte – e o traduz para um programa equivalente em outra 
linguagem – a linguagem objeto
 O papel de um compilador é relatar quaiquer erros nos 
programas fontes detectados durante esse processo de 
tradução.
 O programa objeto pode ser em linguagem de máquina 
executável ou assembly.
Compiladores
Compiladores
 Um interpretador é outro tipo comum de processador de 
linguagens.
 Em vez de produzir um programa objeto como resultado da 
tradução, um interpretador executa diretamente as operações 
específicas no programa fonte sobre as entradas fornecidas 
pelo usuário.
Interpretadores
Compiladores
 O programa objeto em uma linguagem de máquina 
normalmente é muito mais ráído do que um interpretador, 
porém, um interpretador oferece um melhor disgnóstico de erro 
do que do que um compilador porque executa o programa fonte 
instrução por instrução.
 Processadores da linguagem JAVA combinam compilador e 
interpretador
 Um programa Java é compilador para uma forma intermediária 
chamad bytecodes e os bytecodes são interpretados por uma 
máquina virtual.
Compiladores e Interpretador
Pré-Processador
 Um programa fonte pode ser subdividido em módulos 
armazrnados em arquivos separados
 A tarefa de coletar o programa fonte é do pré-processador.
Pré-Processador
Estrutura de um Compilador
 O processo de compilação é constituído de duas etapas:
● Análise – quebra o programa fonte em peças constituintes e 
cria uma representação intermediária;
● Síntese – constrói o programa alvo desejado a partir da 
representação intermediária. 
Estrutura de um Compilador
 Durante a análise, as operações presentes no programa fonte 
são determinadas e registradas numa estrutura hierárquica 
chamada árvore.
 Conseqüentemente, esse tipo especial de árvore é chamada de 
árvore sintática.
 Numa árvore sintática:
I.Cada nó representa uma operação;
II.e, cada nó folha representa um argumento da operação. 
Analisador de Programas Fonte
 Muitas ferramentas de computador que manipulam programas 
fonte primeiro efetuam algum tipo de análise.
 Alguns exemplos de ferramentas que tratam do programa fonte:
 Editores de Estrutura – Recebe uma seqüência de comandos 
para construir um programa fonte. 
 Organizador de Impressão – Analisa um programa e o imprime 
de uma forma que sua estrutura torna-se claramente visível. Ex.: 
Comentários podem aparecer com um tipo de fonte e 
declarações com indentação proporcional ao seu aninhamento. 
Analisador de Programas Fonte
 Verificador Estático – Lê um programa, analisa-o e tentar 
descobrir potenciais bugs sem executar o programa. Ex.: Pode 
detectar partes do programa que nunca serão executadas, ou 
que uma variável pode ser usada antes de inicializada.
 Avaliador de Expressões – Executa as operações indicadas no 
programa fonte. Ex.: Pode construir uma árvore sintática de uma 
atribuição e avaliar o resultado “caminhando pela árvore”. 
Estrutura de um Compilador
 A análise impõem uma estrutura gramatical e depois cria uma 
representação intermediária do programa fonte.
 A análise detecta se o programa fonte está sintaticamente mal 
formada ou semanticamente indocrreta, informando erro.
 A análise também cria uma estrutura chamada de tabela de 
símbolos
 A síntese cria o programa objeto a partir do programa 
intermediário e das informações da tabela de símbolos
 A anállise é chamada de front-end e a síntese de back-end
Estrutura de um Compilador
Análise Léxica (Scanner)
 O analisador léxico lê o fluxo caracteres que compo m o ẽ
programa fonte e os agrupa em sequências significativas, 
chamadas lexemas
 Para cada lexema, o analisador léxico produz como saída um 
token no formato 
<nome-token, valor_atributo>
 nome-token: é um símbolo abstrato
 valor-atributo: aponta para uma entrada da tabela de 
símbolos
Análise Léxica (Exemplo)
Análise Sintática
 O analisador sintático cria uma representação intermediária tipo 
ávore dos tokens produzidos no analisador léxico
Análise Semântica
 O analisador semântico utiliza a árvore de sintaxe e a tabela de 
símbolos para verificar a consistência semântica do programa 
fonte com a definição da linguagem.
 Por exemplo, verificação de tipos e coerção
Análise Semântica
Geração de Código Intermediário
 Programa fonte → Código Intermediário → Código Objeto
 A representação intermediária deve ter duas propriedades 
importantes: ser facilmente produzida e ser facilmente traduzida 
para a máquina alvo
 Código de três instruções (possui 3 operandos):
 Cada instrução possui no máximo um operador do lado 
direito
 Gerar um nome temporário para guarda valores gerados
 Algumas instruções possui menos de 3 operandos
Geração de Código Intermediário
Otimização de Código
 Objetivo de fazer um código objeto melhor:
 Mais rápido
 Código Menor
 Consuma menos energia
Otimização de Código
Geração de Código
 Código intermediário → código objeto
 Se a linguagem objeto for código e máquina de alguma 
arquitetura, devem-se selecionar os registradores ou 
localizações de memória para cada uma das variáveis usadas 
no programa.
Geração de Código
Desafi o 3
Desafio 3: Regras de Parse
Indentificar e documentar as regras de parse do analisador da linguagem mostrando exemplos de uso.
Mínimo de 15.
conditionalExpression
: logicalOrExpression ('?' expression ':' conditionalExpression)?
;
logicalOrExpression
: logicalAndExpression
| logicalOrExpression '||' logicalAndExpression
;
logicalAndExpression
: inclusiveOrExpression
| logicalAndExpression '&&' inclusiveOrExpression
;
Exemplo:
numero >= 0 ? numero++ : numero--;
“Educação não transforma o mundo. Educação muda as 
pessoas. Pessoas transformam o mundo.”
Paulo Freire
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29

Continue navegando