Processamento de Linguagens
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2010/2011 - 2S
Ciclos de Estudo/Cursos
Língua de trabalho
Português
Objetivos
Compreensão e implementação de um compilador e interpretador de uma linguagem de programação.
Programa
Introdução ao processamento de linguagens de programaçao. Compiladores versus Interpretadores. Análise Léxica. Geradores automáticos de analisadores léxicos. Análise sintáctica (parsers LL, LR e LALR). Geradores de parsers. Sintaxe abstracta. Análise semântica: tabelas de símbolos, verificação de tipos. Registos de activação. Tradução para código intermédio. Geração de código: grafos de fluxo de dados, alocação de registos. Optimização de ciclos.
Bibliografia Obrigatória
000002179. ISBN: 0-521-58390-X
000089025. ISBN: 0-321-48681-1
000088450. ISBN: 0-534-93972-4
000002180. ISBN: 0-521-58274-1
Tipo de avaliação
Avaliação distribuída com exame final
Fórmula de cálculo da classificação final
13/20 - Exame final
7/20 - Trabalho prático
Provas e trabalhos especiais
TRABALHO PRÁTICO DE PROCESSAMENTO DE LINGUAGENS
O objectivo do trabalho é fazer um compilador de uma linguagem imperativa simples (a descrição
está no final do email) para assembler (MIPS ou Apoo). A linguagem
utilizada é o C. O trabalho deverá ser enviado por email para mim até ao
final dia 29 de Maio e deverá ser apresentado na aula prática do dia 30
de Maio.
É um trabalho em grupo de 2 pessoas ou individual e a valorização (no
total 7 valores) é a seguinte:
- Analisador léxico: 0.5 valor
- Analisador sintáctico: 2 valores
- Construção da árvore sintáctica (numa estrutura em C): 1.5 valores
- Verificação de tipos: 1 valor
- Geração de código final: 2 valores
A linguagem tem comandos if then, if then else, atribuições instruções
de read e write e ciclos repeat until. Só tem variáveis e números
inteiros embora possa ter instruções booleanas nos testes.
Um exemplo de programa, para o factorial, é:
read x;
if x> o then
fact = 1;
repeat
fact = fact * x;
x = x - 1
until x == 0;
write fact
endif