Planeamento

Aulas Laboratoriais

Ambiente de desenvolvimento

Ambiente de desenvolvimento.

Utilização das ferramentas de desenvolvimento.
Exemplificação com um compilador simples.

Expressões regulares

Construção do autómato finito não determinista (NFA).

Algoritmo de Thompson para construção de DFA.
Tabela de transição.
Minimização dos estados de um DFA.
Expressões regulares simultâneas.
Processamento de uma sequência de entrada.



Ferramenta de análise sintática

Exercício prático 1.
Flex: ferramenta de análise sintática.
Agrupamentos.
Exemplos de aplicação.
Ligação ao yacc.

Análise sintática descendente

Exercício prático 2.
Conjuntos FIRST, FOLLOW e LOOKAHEAD.

Manipulação de gramáticas.
Gramáticas LL(1): construção da tabela de análise.
Análise preditiva por tabela.

Gramática atributivas

Exercício prático 3.
Gramáticas atributivas.

Atributos herdados e sintetizados.
Árvore sintática anotada.
Grafo de dependências.
Eliminação de atributos herdados.

Ferramenta de análise sintática

Exercício prático 4.

Byacc: ferramenta de análise sintática.
Prioridade e associatividade.
Ações semânticas.
Eliminação de conflitos.
Recuperação de erros.

Análise semântica

Exercício prático 5.

Construção da árvore sintática: AST.
Tabela de símbolos.
Verificação de tipos.
Convenções de chamada.

Geração de código de pilha

Exercício prático 6.

Postfix: geração de código de pilha.
Directivas de assembler.
Geração de declarações, expressões e funções.

Seleção de instruções

Exercício prático 7.

Pburg: selector de instruções.
Gramática BURG.
Geração de instruções máquina (postfix).
Gramáticas com custos variáveis.

Análise de fluxo

Exercício prático 8.

Blocos básicos.
Subexpressões comuns num bloco básico.
Grafo de fluxo de controlo.
Cálculo de dominantes.
Deteção de ciclos.

Reserva de registos

Exercício prático 9.

Registos limpos e sujos.
Spilling.
Reserva local: ordenação de subárvores e próximo uso.
Reserva global: linear-scan e coloração de grafos.

Análise sintática ascendente

Exercício prático 10.

Gramáticas LR(0), SLR(1) e LALR(1).
Autómato não determinaista.
Construção da tabela.
Compactação de tabelas.
Processamento de sequências de entrada.

Exercício prático 11

Exercício prático 11.