Engenharia Informática

Licenciatura

UNIVERSIDADE DO ALGARVE

Compiladores Tutoria electrónica

Curso: Licenciatura em Engenharia Informática

Área Científica: I/CC – Ciências da Computação

Uc Anual     

Semestral   

Trimestral 

Obrigatória   T

Opcional    

Outra         T

Precedências recomendadas

Linguagens Formais e Autómatos

Objectivos

Esta disciplina tem como objectivo a aprendizagem dos conceitos fundamentais da geração de código a ser executado num microprocessador a partir de um programa descrito numa linguagem de programação imperativa. Estudo das componentes de um compilador, incluindo os módulos de análise lexical, sintáctica e semântica, além do gerador e optimizador de código final. O projecto de um compilador para uma linguagem simples é efectuado através de trabalhos práticos sobre cada uma das suas etapas.

Objecto da Aprendizagem (conteúdo programático)

Programa:

1.                 Introdução

a.        Objectivos de um Compilador

b.       Anatomia de um Compilador

c.        Aplicação de Conceitos a outras Ferramentas

d.       Interpretadores

e.        Factos históricos

f.        Da linguagem de alto-nível ao assembly

2.                 Análise lexical

a.        Do texto do programa aos símbolos terminais (tokens)

b.       Expressões regulares

c.        Autómatos finitos deterministas e não deterministas

d.       Criação de analisadores lexicais

e.        Construção automática de analisadores lexicais

3.                 Análise Sintáctica

a.        Dos tokens à árvore sintáctica

b.       Gramáticas livres do contexto

c.        Análise sintáctica descendente

d.       Análise sintáctica ascendente

e.        Árvores de sintaxe concretas

f.        Árvores de Sintaxe Abstractas (ASTs)

g.       Reconhecimento e tratamento de erros

h.       Criação automática de analisadores sintácticos

4.                 Análise Semântica

a.        Tabelas de símbolos e utilização de contentores

b.       Verificações de tipos em expressões

c.        Verificações de tipos em declarações

d.       Tradução para código intermédio

e.        Árvores de representação intermédia

f.        Estruturas de dados

g.       Tradução para árvores (expressões, variáveis escalares e arrays, instruções condicionais, ciclos, etc.)

5.                 Geração de código final

a.        Geração de código para blocos básicos

b.       Análise de fluxo de dados

c.        Determinação do tempo de vida de variáveis

d.       Afectação de registos por coloração de grafos

e.        Geração do código máquina

f.        Assemblers, Linkers, e loaders

6.                 Optimização de código

a.        Eliminação de sub-expressões comuns

b.       Substituição de expressões com constantes

c.        Propagação de constantes

d.       Simplificações algébricas

e.        Redução da força de operadores

f.        Transformações em ciclos

g.       Escalonamento

Processo de Avaliação – Classificação

Exame: 70%;  Avaliação prática (trabalho de grupo): 30%

 

Distribuição das horas creditadas para obtenção de 5 créditos ECTS

Resultados de

Aprendizagem (RA)

Horas de contacto

com o docente

Horas de trabalho

independente

Horas de

Avaliação

Total

Listagem de RAs  (4 a 6)

T

TP

PL

OT

Estudo

Trab.

Grupo

Trab.

Projecto

 

 

Compreender os objectivos e a arquitectura de um compilador

3

 

 

 

3

 

 

 

6

Compreender os princípios da análise lexical e saber implementar analisadores lexicais, quer de raiz, que usando ferramentas adequadas

3

 

5

2

3

6

 

 

19

Compreender os princípios da análise sintáctica e saber implementar analisadores sintácticos descendentes e ascendentes, quer de raiz, quer usando ferramentas adequadas

7

 

10

4

7

11

 

 

39

Compreender os princípios da análise semântica e saber implementar esse tipo de análise

4

 

8

2

4

9

 

 

27

Compreender os princípios da geração e optimização do código final, e saber implementar estas últimas etapas de um compilador

8

 

12

4

8

14

 

 

46

TOTAL

25

0

35

12

25

40

0

3

140

TOTAL/Sem (em 5 semanas)

5

0

7

2,4

5

8

 

 

28