Programa

Compiladores

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

Programa

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