Compiladores
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Programação |
Ocorrência: 2010/2011 - 2S
Ciclos de Estudo/Cursos
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.
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;
- optimizações de código;
- geradores de código para processadores ou para máquinas virtuais;
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.
- Técnicas de geração de código final e de optimização.
Bibliografia Obrigatória
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
Alfred V. Aho... [et al.];
Compilers. ISBN: 0-321-49169-6
Bibliografia Complementar
Cooper, Keith D.;
Engineering a compiler. ISBN: 1-55860-699-8
Terence Parr; The Definitive ANTLR Reference - Building Domain Specific Languages, The Pragmatic Bookshelf, 2007. ISBN: 978-09787392-4-9
Louden, Kenneth C.;
Compiler construction. ISBN: 0-534-93972-4
Muchnick, Steven; Advanced Compiler Design and Implementation, Morgan Kaufman Publishers, 1997. ISBN: ISBN 1-55860-320-4
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.
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/.
ANTLR - Another Tool for Language Recognition
COINS, http://www.coins-project.org/international/
JavaCC, https://javacc.dev.java.net/
NetBeans 6
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
Descrição |
Tipo |
Tempo (Horas) |
Peso (%) |
Data Conclusão |
Participação presencial (estimativa) |
Participação presencial |
51,00 |
|
|
Realização do trabalho prático |
Defesa pública de dissertação, de relatório de projeto ou estágio, ou de tese |
45,00 |
|
|
Exames escritos |
Exame |
3,00 |
|
|
|
Total: |
- |
0,00 |
|
Componentes de Ocupação
Descrição |
Tipo |
Tempo (Horas) |
Data Conclusão |
Estudo semanal |
Estudo autónomo |
51 |
|
Estudo para os Exames |
Estudo autónomo |
12 |
|
|
Total: |
63,00 |
|
Obtenção de frequência
Realização do trabalho prático com aproveitamento (nota igual ou superior a 50% da nota máxima do trabalho prático).
Fórmula de cálculo da classificação final
ÉPOCA NORMAL:
Nota final = ROUND(0,70*AD + 0,15*T1 + 0,15*T2)
- AD: nota da avaliação distribuída (trabalho prático) [0..20]
- T1: nota no primeiro teste [0..20]
- T2: nota no segundo teste [0..20]
O aluno obtém aproveitamento na disciplina na época normal se obtiver frequência (i.e., AD >=10), se obtiver uma nota média nos testes (T1 e T2) igual ou superior a 8 valores, e se obtiver Nota final superior ou igual a 10 valores.
ÉPOCA DE RECURSO:
Nota final = ROUND(0,70*AD + 0,30*EX)
- AD: nota da avaliação distribuída (trabalho prático) [0..20]
- EX: nota no exame de recurso [0..20]
O aluno obtém aproveitamento na disciplina na época normal se obtiver frequência (i.e., AD >=10), se obtiver uma nota no exame (EX) igual ou superior a 8 valores, e se obtiver Nota final superior ou igual a 10 valores.
Avaliação especial (TE, DA, ...)
- Realização do trabalho prático com aproveitamento (nota igual ou superior a 50% da nota máxima do trabalho prático). O trabalho prático, devido à sua extensão, terá de ser realizado no decurso do semestre lectivo.
ÉPOCA NORMAL:
- Testes T1 e T2.
ÉPOCA DE RECURSO:
- Exame de recurso (EX).
A classificação final é obtida como previamente estipulado na secção: "Cálculo da Classificação Final".
Melhoria de classificação
A classificação da componente distribuída (AD) não é susceptível de melhoria no ano lectivo em curso e conta para todas as épocas (normal e de recurso).
A classificação obtida na componente relativa aos dois testes efectuados (T1 e T2) poderá ser melhorada através da realização do exame de recurso (EX) ou na ocorrência seguinte da UC.
A classificação obtida na componente relativa ao exame de recurso (EX) poderá ser melhorada na ocorrência seguinte da UC.
Observações
Trabalho prático:
- Desenvolvimento das 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 deverá ser realizado em grupos de no máximo 2 alunos.
Os testes (T1 e T2) e o exame de recurso (EX) são provas com consulta.
Os estudantes que tenham obtido frequência no ano lectivo anterior (2008/2009) podem abdicar de uma nova classificação da componente distribuída (AD). Nesse caso, a nota AD obtida no ano lectivo anterior será utilizada nas fórmulas apresentadas para cálculo da nota final na disciplina.