Programa

Compiladores

Licenciatura (5 anos) em Engenharia Informática e de Computadores - Taguspark

Programa

* Análise lexical: o Desenvolver a capacidade de identificar e especificar sequências de símbolos terminais através de expressões regulares. o Construção de um autómato finito não-determinista (NDFA) a partir de uma expressão regular: algorítmo de Thompson. o Construção de um autómato finito determinista (DFA) a partir de um NDFA. o Reconhecimento de frases por DFAs. o O gerador de analisadores lexicais LEX: formato do ficheiro de especificação e rotinas auxiliares. * Análise sintáctica: o Desenvolver a capacidade de identificar e especificar uma gramática. o Derivação, recursividade e ambiguidade de gramáticas. Autómato de pilha. o Analisadores sintácticos descendentes recursivos, factorização à esquerda. o Identificação de analisadores sintácticos preditivos não recursivos. o Identificação dos conjuntos FIRST e FOLLOW, construção de tabelas pelo método LL(1). o O analisador sintáctico ascendente LR: arquitectura e reconhecimento de frases. o Identificação das tabelas pelo método SLR(1). o Conflitos nas tabelas e sua possível resolução. Compactação de tabelas de análise ascendente. o Construção das tabelas pelo método LALR(1). o O gerador de analisadores sintácticos YACC: formato de ficheiros, transporte de valores pela pilha, ligação entre o LEX e YACC, recuperação de erros. * Análise semântica: o Gramáticas atributivas. o Atributos sintetizados e herdados. Definições do tipo S e do tipo L. o Avaliação de definições por analisadores sintácticos ascendentes. o Estruturas de dados para representação em memória de árvores de derivação. o Manipulação de identificadores: tabelas de símbolos, visibilidade, alcance. o Tipificação: sistemas de tipos, verificação de tipos, polimorfismo. Invocação de rotinas, registos de activação. * Geração de código: o Interpretação por árvore e threading. o Geração no YACC de uma árvore sintática. o Geração de código intermédio. Código C3E. o Geração no YACC de expressões aritméticas, lógicas e de fluxo. o Árvores de activação: gestão de memória, o Geração de código final: máquinas baseadas em pilhas de dados (stack machines). o Tipos de processadores e alternativas de geração de código. o Optimização: blocos básicos, processo de análise, transformações. o Técnicas básicas de optimização: alto-nível, local, peephole e global. o Geração de código final: tópicos.