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