Compiladores
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Engenharia Informática e Computação |
Ocorrência: 2022/2023 - 2S 
Ciclos de Estudo/Cursos
Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
L.EIC |
248 |
Plano Oficial |
3 |
- |
6 |
52 |
162 |
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
Fornecer os conceitos que permitam:
- compreender as fases de compilação de linguagens, em especial das linguagens imperativas e orientada por objectos;
- especificar a sintaxe e semântica de uma linguagem de programação;
- compreender e utilizar as estruturas de dados e os algoritmos principais usados na implementação de compiladores;
- realizar a engenharia de um compilador como projecto software de larga escala
Resultados de aprendizagem e competências
As competências adquiridas permitirão aos estudantes:
- desenvolver e implementar em software processadores de linguagens artificiais e de informação especificada textualmente segundo determinadas regras lexicais e sintácticas;
- conceber e implementar em software as várias etapas relacionadas com compiladores, nomeadamente:
- expressões regulares e autómatos finitos;
- analisadores sintácticos e semânticos;
- analisadores semânticos;
- ambientes de execução e máquinas virtuais;
- geração de código intermédio e estruturas de suporte de análise (tabela de simbolos);
- analise de fluxo de dados e de controle e optimizações de código;
- geradores de código para processadores ou para máquinas virtuais;
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
- Linguagens de programação imperativas, orientadas por objetos.
- Algoritmos e estruturas de dados.
- Teoria da Computação.
- Arquitectura de Computadores.
Programa
- Introdução. Fases da compilação e estrutura típica de um compilador.
- Análise lexical. Expressões regulares e autómatos finitos.
- Análise sintáctica. Gramáticas. Implementação de analisadores sintácticos. Tratamento de erros.
- Análise semântica. Implementação de analisadores semânticos. Verificação de tipos.
- Ambientes de execução. Organização de memória e mecanismos para a passagem de parâmetros.
- Geração de código intermédio de baixo e de alto-nível.
- Escalonamento e alocação de registos.
- Análise de fluxo de dados e controle - blocos básicos.
- Transformação (optimização) de código.
Bibliografia Obrigatória
Cooper, Keith D.;
Engineering a compiler. ISBN: 1-55860-699-8
Bibliografia Complementar
A. Aho, M. Lam, R. Sethi, J. Ullman;
Compilers: Principles, Techniques, and Tools, 2nd Edition, Addison Wesley, 2007. ISBN: 0321486811 (Existe 1.a edição (1986) na biblioteca)
Appel, Andrew Wilson;
Modern Compiler Implementation in Java, Cambridge University Press, 2002. ISBN: ISBN 0-521-82060-X
Métodos de ensino e atividades de aprendizagem
- Aulas teóricas: exposição dos assuntos, acompanhada por exemplos e pela apresentação de pistas para resolução dos problemas das aulas práticas e do trabalho prático ou projecto de programação.
- Aulas teórico-práticas: resolução de problemas e discussão de questões relacionadas com o trabalho prático.
Software
JASMIN, http://jasmin.sourceforge.net/.
JavaCC, https://javacc.dev.java.net/
ANTLR, https://www.antlr.org
Palavras Chave
Ciências Tecnológicas > Tecnologia > Tecnologia de computadores > Tecnologia de software
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Teste |
50,00 |
Trabalho laboratorial |
50,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Elaboração de projeto |
50,00 |
Estudo autónomo |
56,00 |
Frequência das aulas |
56,00 |
Total: |
162,00 |
Obtenção de frequência
Para obtenção de frequência: nota do projeto (PRJ) >= 8.0.
A presença nas aulas TP não é obrigatória mas altamente decomendada. Presença requerida durante s sessões de demonstração dos projectos de programação.
Fórmula de cálculo da classificação final
Para obtenção de aprovação: nota final >= 9.5 e nota de cada um dos dois testes (T1 e T2) >= 8.0.
Nota final - componentes e fórmula de cálculo (todas as classificações de 0 a 20)
- T1: nota no primeiro teste (e correspondente melhoria M1)
- T2: nota no segundo teste (e correspondente melhoria M2)
- PRJ: projeto do compilador
- Nota de avaliação contínua (AC) = 0.5 * T1 + 0.5 * T2
- Nota final (NF) =
- If abs(AC-PRJ) > 4.0 Then NF = minimo(AC,PRJ) + 2.0
- case contrário, NF = 0.5 * AC + 0.5 * PRJ
Componentes que contribuem para a classificação do projeto (PRJ):
- Avaliação intermédia do projeto (1:10% e 2:20%): 25%
- Trabalho final: 60%
- Presentação/discussão do trabalho: 15%
Os elementos de classificação de anos anteriores não podem ser reutilizados.
Os testes (T1 e T2) e o exame de melhoria (M1 e M2) são provas com consulta limitada a 1 folha tamanho A4 com notas frente e verso.
Trabalho de estágio/projeto
Compreensão e extensão de vários elementos e fases de análise léxica, análise sintática, análise semântica e geração de código de um compilador para uma linguagem imperativa simples.
Este trabalho é executado em grupos de 3 alunos máximo e 2 mínimo e será baseado numa infra-estrutura existente.
Avaliação especial (TE, DA, ...)
As regras de avaliação aplicam-se a todos os estudantes, independentemente dos seus estatutos.
Melhoria de classificação
A classificação do projeto não é susceptível de melhoria no ano lectivo em curso e conta para todas as épocas (normal e de recurso). A nota da avaliação contínua (testes) poderá ser melhorada através da realização do exame de recurso, sendo levada em consideração a melhor das duas classificações nos testes que o aluno escolher efectuar recurso.