Compiladores
Informações
Pré-requisito: Linguagens de Programação e Linguagens Formais e Autômatos
Ementa
Estrutura de um compilador; Análise léxica; Análise sintática; Análise semântica; Recuperação de erros; Geração de código intermediário.
Objetivos
Ao final da disciplina o aluno deve:
- Compreender a teoria e as técnicas usadas na construção de compiladores;
- Projetar e testar um compilador completo para uma linguagem algorítmica.
Sumário
Conteúdo Programático
01. Visão Geral de Um Compilador
Conteúdo
- Estrutura de um compilador
- Processadores de linguagens
- Evolução das LPs
- Fundamentos da LP
Materiais
02. Análise Léxica
Conteúdo
- Arquitetura da análise léxica
- Especificações de tokens
- Erros léxicos
- Operações sobre linguagens
- Expressões Regulares
- Definições Regulares
- Extensões de ERs
Materiais
03. Autômatos Finitos
Conteúdo
- Definição de Autômatos
- Representação Gráfica
- Representação Matricial
- AFD e AFND
- Aceitação de uma cadeia
- Simulando um AFD e um AFND
- Algoritmo de Thompson
- ER para Autômato
- Construção de Subconjunto
- Minimização de Estados
Materiais
04. Flex/Lex
Conteúdo
- Gerador de Scanner
- Usando o flex
- Especificações da entrada
- Definições, Regras e Padrões
- Regras de Matching
Materiais
05. Scanners
Conteúdo
- Arquitetura de um Scanner
- Scanner feito à mão
- Scanner utilizando AFD e AFND
- Eficiência
- Projeto de um analisador de cadeia
- Pares de Buffers
- Casamento de Padrão
06. Análise Sintática
Conteúdo
- Arquitetura
- Hierarquia de Chomsky
- Gramática Livre de Contexto
- Derivações
- Formas de Derivações
- Árvore de Derivação
- Ambiguidade
- Análise Léxica vs Sintática
Materiais
07. YACC/Bison
Conteúdo
- Arquitetura
- Fluxo de Controle
- Especificações
- Declarações
- Regras de Produção
Materiais
08. Código Intermedíario
Conteúdo
- Processo de compilação
- Linguagem de três endereços
- Especificações
- Comandos
Materiais
09. Analisador Sintático Descendente
Conteúdo
- Ambiguidade
- Análise Top-Down
- Recursão à Esquerda
- Lookhead
- Parses Preditivos
- First e Follow
- Gramáticas LL(k) e LR(k)
- Analisador de Descida Recursiva
- Analisador Preditivo sem Recursão
10. Analisador Sintático Ascendente
Conteúdo
- Handle
- Parsers Shift-Reduce
- Parsers LR(1)
- Itens Canônicos
- Autômato LR(0)
- Tabela de Análise SLR
11. Construção de um Compilador
Conteúdo
- Declaração
- Tipo de dados primitivos
- String
- Matrizes
- Expressões
- Operadores
- Comandos
- Escopo
- Blocos
- Mecanismos de Controle de Laços
- Detecção de Erros
- Subprograma
Materiais
Referência Bibliográfica
Principal
- SETHI, Ravi; ULLMAN, Jeffrey D.; MONICA S. LAM. Compiladores: princípios, técnicas e ferramentas. Pearson Addison Wesley, 2008.
Complementar
- RICARTE, Ivan. Introdução à compilação. Elsevier Brasil, 2012.