Planeamento
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.
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.