Código |
14460
|
Ano |
1
|
Semestre |
S1
|
Créditos ECTS |
6
|
Carga Horária |
PL(30H)/T(30H)
|
Área Científica |
Informática
|
Objectivos de Aprendizagem |
Os estudantes deverão adquirir as seguintes competências:
Conceber, planear, desenhar 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. Conceber front end e back-ends de compiladores, sistemas de tipo poderosos e modernos, optimizadores de código; Conceber, planear, desenhar e implementar linguagens de programação; Conceber e implementar em software as várias etapas relacionadas com a construção de compiladores, perceber em que medida podem ser usadas fora do contexto da compilação; Concerber desenhar e implementar analisadores estáticos de programas para a optimização e o controlo comportamental de programas (segurança, perfil, depuração, optmização, etc.); Perceber os detalhes internos da linguagens de programação.
|
Conteúdos programáticos |
Aula 1 - Assembly x86-64 Aula 2 - Sintaxe abstracta, semântica formal, interpretadores Aula 3 - Tipagem, sistemas e algoritmos Aula 4 - Análise léxica Aula 5 - Análise sintáctica (descendente) - ficheiro com o código do analisador exposto nas aulas (aqui) Aula 6 - Análise sintáctica (ascendente) Aula 7 - Compilação de linguagens imperativas, modos de passagem de parâmetros Aula 8 - Compilação das linguagens funcionais Aula 9 - Compilação das linguagens orientadas a objectos Aula 10 - Alocação de memória Aula 11 - Produção de código eficiente - Aula 12 - Ordens, reticulados e a framework monótona Aula 13 - Análise de fluxo de dados Aula 14 - Path Sensitivity, análise interprocedural e análise de fluxo de controlo Aula 15 - Análise de apontadores
|
Metodologias de Ensino e Critérios de Avaliação |
A avaliação avaliará a aprendizagem teóricas e prática dos conceitos introduzidos. Como tal, esta será constituida
por uma provas escrita; por um projecto prático de construção de um pequeno compilador acompanhada da justificação teórica das diferentes fases de compilação implementadas pela entrega do código completo resultante da realização das práticas laboratoriais.
Fraudes A equipa docente gostaria de realçar que qualquer tipo de fraude em qualquer dos itens desta disciplina implica a reprovação automática do aluno faltoso, podendo ainda vir a ser alvo de processo disciplinar. Listamos a seguir as diferentes componentes da avaliação.
|
Bibliografia principal |
Andrew A. Appel. Modern Compiler Implementation in ML. A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman, Compilers: Principles, Techniques, and Tools, 2nd edition, Addison Wesley, 2006. ISBN 0-321-48681-1. Benjamin C. Pierce. Types and Programming Languages. Flemming Nielson, Hanne R. Nielson, and Chris L. Hankin. Principles of Program Analysis. Hanne. R. Nielson and Flemming Nielson. Semantics with Applications - an appetizer. Anders Møller and Michael I. Schwartzbach. Static Program Analysis. Randal E. Bryant et David R. O’Hallaron. Computer Systems: A Programmer’s Perspective.
|
Língua |
Português
|