Compiladores
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2024/2025 - 1S 
Ciclos de Estudo/Cursos
Docência - Responsabilidades
Língua de trabalho
Português
Objetivos
Estudo e implementação dos conceitos e técnicas usados para a construção de compiladores e interpretadores de linguagens de programação imperativas.
Resultados de aprendizagem e competências
No final desta UC os estudantes deverão ser capazes de:
1) Conhecer a decomposição em fases de um compilador: análise léxica, análise sintática, análise semântica, geração de código intermédio e geração de código de máquina
2) Compreender os conceitos de sintaxe concreta e abstrata e linguagem intermédia
3) Implementar um compilador para uma pequena linguagem imperativa estruturado seguindo as fases do ponto 1)
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Conhecimentos básicos em programação imperativa e funcional.
Conhecimento básico de linguagem assembly.
Modelos de computação (expressões regulares, automatos finitos e gramáticas livres de contexto).
Programa
Introdução ao processamento de linguagens de programaçao. Compiladores versus Interpretadores. Análise Léxica. Geradores automáticos de analisadores léxicos. Sintaxe abstracta. Análise sintáctica usando técnicas LL, LR e LALR. Geradores de analisadores sintáticos (parsers). 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: grafo de controlo de fluxo de dados, alocação de registos.
Bibliografia Obrigatória
Torben Mogensen; Basics of Compiler Design, 2010 (http://hjemmesider.diku.dk/~torbenm/Basics/)
Appel Andrew W. 1960-;
Modern compiler implementation in ML. ISBN: 978-0-521-60764-3 pbk
Bibliografia Complementar
Andrew W. Appel;
Modern compiler implementation in C. ISBN: 0-521-58390-X
Louden Kenneth C.;
Compiler construction. ISBN: 978-0-534-93972-4 hbk
Alfred V. Aho;
Compilers. ISBN: 0-321-48681-1
Métodos de ensino e atividades de aprendizagem
Aulas teóricas presenciais com exposição de conceitos suportada por demonstração interativa.
Aulas laboratoriais presenciais com resolução de exercícios propostos e acompanhamento do projeto prático.
Projecto prático para grupos de 2 estudantes: construção de um compilador de uma pequena linguagem imperativa.
Palavras Chave
Ciências Físicas > Ciência de computadores
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
70,00 |
Trabalho prático ou de projeto |
30,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Elaboração de projeto |
60,00 |
Estudo autónomo |
54,00 |
Frequência das aulas |
48,00 |
Total: |
162,00 |
Obtenção de frequência
Para obtenção de frequência o estudante deverá comparecer na apresentação nos dois momentos de avaliação do trabalho de projeto.
Fórmula de cálculo da classificação final
Classificação final = 15%*P1 + 15%*P2 + 70%*E
onde:
P1 : Classificação da 1º fase do projeto laboratorial
P2 : Classificação da 2º fase do projeto laboratorial
E : Classificação no exame
Para obter aprovação, o estudante deverá atingir classificação mínima de 40% na componente de exame.
Avaliação especial (TE, DA, ...)
A avaliação segue os mesmos parâmetros de inscrição ordinária.
Para os trabalhadores-estudantes a obtenção de frequência requer apenas a apresentação das duas fase do trabalho de projeto.
Melhoria de classificação
Os estudantes inscritos em melhoria poderão realizar o exame e melhorar a classificação dessa componente, mantendo as classificações do projeto e exercícios de aulas laboratoriais que obteve na aprovação.