Please enable JavaScript.
Coggle requires JavaScript to display documents.
Compiladores (Prova 3 (LR Canônicos, SLR (Simple LR), LALR (LookAhead LR))…
Compiladores
-
Prova 1
Revisão LFA
-
Linguagens
Alfabeto
Denotado por ∑, é um conjunto finito não vazio (alguns autores consideram o vazio) de símbolos.
-
-
Linguagens Regulares
-
Expressão Regular
(Oferecem algo que os AFs não oferecem, um modo declarativo de expressar palavras que queremos aceitar)
Gramática Regular
(serve para definir qual subconjunto de sentenças /palavras fazem parte de uma determinada linguagem.)
-
-
Conteúdo de Compiladores
Tradutores
Cada instrução do programa de alto nível é substituída por uma sequência equivalente de instruções em linguagem de máquina.
Programa fonte, tradutor e programa alvo
-
-
Compiladores
Etapas
Análise
Divide o programa fonte nas partes constituintes e cria uma representação intermediária do mesmo.
Qualquer fase analítica deve prosseguir em sua análise, ainda que erros tenham sido detectados
1) Análise Léxica (lê palavra)
Identifica sequências de caracteres que constituem unidades léxicas (“tokens”). Lê o código fonte, caractere a caractere verificando se os caracteres lidos pertencem ao alfabeto da linguagem
Atividades
Ler o programa fonte, caracter a caracter, e traduzi-los para a sequencia de símbolos léxicos (tokens)
-
-
-
-
Termos
-
Token
Conjunto de lexemas
- 3 more items...
-
2) Análise Sintática/parsing (lê frase)
Verifica se a estrutura gramatical do programa está correta (se essa estrutura foi formada usando as regras gramaticais da linguagem).
Produz uma árvore de derivação;
Parser
Recebe do analisador léxico a sequência de tokens que forma a sentença S, e produz como resultado uma árvore de derivação para S, se a sentença é válida, ou emite uma mensagem de erro.
Árvore de Derivação
Uma árvore de derivação pode ser construída explicitamente (representada através de uma estrutura de dados) ou ficar implícita nas chamadas das rotinas que aplicam as regras de produção da gramática durante o reconhecimento.
Erros
Os analisadores sintáticos devem ser projetados de modo que possam prosseguir na análise, até o fim do programa, mesmo que encontrem erros no texto fonte.
Estratégias
TOP-DOWN ou DESCENDENTE
- Constroem a árvore de derivação a partir do símbolo inicial da gramática (raiz da árvore), fazendo a árvore crescer até atingir suas folhas.
- Em cada passo, um lado esquerdo da produção é substituído por um lado direito (expansão) – faz uma derivação.
BOTTOM-UP ou REDUTIVA
- Realiza a análise a partir dos tokens de texto fonte (folhas) constrói a árvore até o símbolo inicial da gramática. - Em cada passo, um lado direito de produção é substituído por um símbolo não terminal (redução)
3) Análise Semântica
- Verifica os erros semânticos no programa fonte e captura informações de tipo para a fase subsequente de geração de código.
- Verifica se as estruturas sintáticas fazem sentido.
Síntese
Constrói o programa alvo desejado, a partir da representação intermediária.
4) Geração de código intermediário
- Utiliza a representação interna produzida pelo Analisador Sintático.
- Gera como saída uma sequência de código.
- Pode ser o código objeto final ou um código intermediário.
-
6) Geração de código objeto
É a fase final do compilador.
Objetivos:
- Produção de código objeto
- Reserva de memória para constantes e variáveis
- Seleção de registradores.
Tabela de Símbolos
Compreende um conjunto de tabelas e rotinas associadas que são utilizadas por quase todas as fases do tradutor.
Estrutura
Deve ser estruturada de forma que permita rápida inserção e extração de informações, porém deve ser tão compacta quanto possível.
Atributos
Esses atributos podem providenciar informações sobre:
- Memória reservada para o identificador
- Tipo do identificador
- Escopo do identificador(onde é válido no programa)
- Declarações de variáveis
- Declarações dos procedimentos e subrotinas
- Parâmetros de subrotinas; etc.
Atendimento a Erros
Este módulo tem por objetivo “tratar os erros” que são detectados em todas as fases de análise do programa fonte.
-
Pré compiladores, Pré processadores, Filtros
Interpretadores
O interpretador converte as instruções de um programa fonte para a forma binária (linguagem de máquina) e as executa imediatamente
Cógido fonte, interpretador e saída
Prova 2
Análise Sintática
⬇ TOP-DOWN (Descendente)
- Constroem a árvore de derivação a partir do símbolo inicial da gramática (raiz da árvore), fazendo a árvore crescer até atingir suas folhas.
- Em cada passo, um lado esquerdo da produção é substituído por um lado direito (expansão) – faz uma derivação.
Análise Preditiva
Análise Não-Recursiva Preditiva (Tabular)
- É feita por analisadores preditivos não recursivos que utiliza uma pilha explicita ao invés de chamadas recursivas (pilha implícita).
- Esse tipo de analisador implementa um autômato de pilha controlado por uma tabela de análise.
-
-
-
-
Análise Recursiva Preditiva (sem retrocesso)
O símbolo sob o cabeçote de leitura determina exatamente qual produção aplicar na expansão de cada não terminal. Há apenas uma produção a seguir.
-
❗ Exigências:
- Gramática sem recursão à esquerda
- Gramática fatorada à esquerda
- Não terminais com mais de uma produção, seus primeiros terminais deriváveis devem identificar a produção que deve ser aplicada a cada instante na análise.
Análise Recursiva com Retrocesso
Expande o não terminal mais à esquerda.
A recursão à esquerda pode causar loop infinito.
É ruim pois, ao não reconhecer a produção, volta na fita
sem consumir nada da entrada e tenta expandir uma nova produção
-
⬆ BOTTOM-UP (Redutiva)
- Realiza a análise a partir dos tokens de texto fonte (folhas) constrói a árvore até o símbolo inicial da gramática.
- Em cada passo, um lado direito de produção é substituído por um símbolo não terminal (redução)
-