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 |
Por trabalhos em grupos de dois ou três estudantes. O trabalho exercitará todas as materias lecionadas.
|
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
|