Planeamento

Aulas Laboratoriais

Ambiente de desenvolvimento

Instalação do ambiente de desenvolvimento. Geração do compilador de exemplo Compact. Geração e execução de exemplos na linguagem Compact.

expressões regulares

Conversão de expressões regulares em autómatos finitos não determinista(AFND): algoritmo de Thompson.

Conversão de AFND em AFD, minimização do AFD.

Representação do AFD como grafo, tabela de análise e gramática regular.

Processamento de um sequência de entrada para expressões regulares simultâneas.

ferramenta flex

Análise lexical com a ferramenta flex.

Interacção com o yacc.

Análise descendente

Analisadores preditivos descendentes.

Prioridade e associatividade.

Eliminação da recursão à esquerda e factorização à esquerda.

Conjuntos First e Follow.

Analisadores LL(1): construção da tabela e processamento de uma sequência de entrada

Recuperação de erro por conjunto de sincronização.

Gramáticas atributivas

Gramáticas e avaliação de atributos.

Eliminação de atributos herdados.

ferramenta yacc

Exemplos de aplicação da ferramenta yacc.

Análise semântica

Tipificação e a tabela de símbolos, tabid.

Construção da árvore sintáctica, node.

Verificações semânticas.

geração de código postfix

Geração de código postfix.

Geração de expressões inteiras.

Geração e invocação de funções.

A ferramenta pburg

Geração de código com selecção de instruções.

A ferramenta oburg.

 

Optimização de código

Geração de código para reais e ponteiros.

Optimização de ciclos e por agrupamento de instruções (selecção).

Análise ascendente SLR(1).

Análise ascendente SLR(1).

Construção da tabela de análise e processamento de uma sequência de entrada.

Gramáticas LALR(1)

Gramáticas LALR(1).

Autómato e transporte do símbolos de antevisão.

Compactação da tabela de análise.

Processamento de uma sequência de entrada.

Recuperação por símbolo de erro.

teste prático

Realização do teste prático.

Aulas Teóricas

Apresentação

Apresentação.

Programa.

Método de avalição.

 

Expressões regulares

Linguagens regulares. Expressões regulares. Autómatos finitos não deterministas e deterministas. Algoritmo de Thompson. Algoritmo de sub-conjuntos. Tabela de parsing.

Expressões regulares e flex

Minimização de AFDs.

Gramática regular.

Introdução à ferramenta lex (flex)

Analisador lexical

O analisador lexical flex.

Funções, variáveis,  declarações e agrupamentos.

Ligação à ferramenta de análise sintáctica (byacc).

Gramáticas livres de conteo

Gramáticas e gramáticas livres de contexto.

Notação BNF e extended BNF.

Derivação.

Prioridade e associatividade.

Conjuntos FIRST e FOLLOW.

Analisadores LL(1)

Analisadores de pilha.

Eliminação da recursão à esquerda.

Factorização à esquerda.

Construção da tabela de análise.

Processamento de uma sequência de entrada.

Conjunto de sincronização e recuperação de erro oor conjunto de sincronização.

 

Gramáticas atributivas

Gramáticas atributivas.

Atributos herdados e sintetizados.

Gramáticas de L-atributos e de S-atributos.

Avaliação de atributos e grafo de dependências.

Eliminação de atributos herdados.

Ferramenta yacc

Conversão de atributos na eliminação da recursão à esquerda.

Ferramenta yacc, declarações e acções.

Correcção da gramática

Recuperação de erros em yacc.

Depuração (debug)  de sequências de entrada em yacc.

Eliminação de conflitos na gamática.

tabela de símbolos e árvore sintáctica

Construção da árvore sintáctica e a estrutura Node.

Manipulação da tabela de símbolos e o módulo tabid.

Registo de alcance e manipulação de nomes.

Análise semântica

Verificações estáticas.

Tipificação e binding.

Registos de activação.

invocação de rotinas

Registos de activação.

Passagem de argumentos.

Convenções de chamada.

Geração de declarações globais.

 

Geração de código Postfix

Geração de código Postfix.

Geração de declarações.

Geração de funções e expressões simples.

 

Geração de código para inteiros

Vectores e estruturas: representação e acesso.

Condições e ciclos.

Branch prediction e optimização de ciclos.

selecção de instruções

Selecção de instruções.

A ferramenta pburg.

Declarações e gramática.

Correspondência entre a construção da árvore e a sua selecção.

Tratamento de tipos e variáveis locais.

selecção de instruções

Selecção de instruções.

A ferramenta pburg.

Processamento de declarações.

Utilização de tipificação na árvore sintáctica.

a ferramenta pburg

Optimização com a ferramenta pburg.

Alteração da ordem de avaliação das instruções.

Análise de fluxo de dados

Análise de fluxo de dados.

Diagrama de fluxo de dados.

Detecção de sub-expressões comuns.

Acessos a uma variável.

 

Análise de fluxo de controlo

análise de fluxo de controlo.

Identificação de blocos básicos.

Diagrama de fluxo de dados.

Dominantes e dominantes imediatos.

Detecção de ciclos.

 

Análise sintáctica ascendente

Análise sintáctica descendente.

Construção do AFND, conversão em AFD e preenchimento da tabela de análise.

Preencimento de reduções em analisadores LR(0) e SLR(1).

gramáticas LALR(1)

Analisadores LALR(1).

Transporte dos símbolos de antevisão.

Compactação da tabela de análise: estados unitários e quase unitário.

Recuperação por símbolo de erro.

geração de switch e estruturas

Geração optimizada da instrução switch: construção de buckets, computed goto e processamento da árvore binária.

Passagem e retorno de estruturas de funções.

Argumentos invisíveis de funções: this, ...

Herança e delegação.

Vectores em C e Fortran.

Reserva de registos e optimização

Escalonamento de instruções.

Algoritmos de reserva de registos: local e global.

Optimização: pelo utilizador, independente da máquina e dependente da máquina.