Topic outline
- General
- Topic 1
Topic 1
Objectivo
A disciplina tem como objectivo fornecer aos alunos um conhecimento sólido na área de concepção e implementação das linguagens de programação, efectuando um estudo sistemático dos conceito sintácticos, semânticos e pragmáticos fundamentais subjacentes, que são centrais na ciência e na Engenharia Informática.
Os alunos adquirem ao longo de um semestre, a capacidade de analisar de forma objectiva as linguagens de programação, de compreender e saber utilizar as técnicas básicas de implementação de linguagens de programação, incluindo interpretadores, máquinas virtuais, e compiladores. Os alunos desenvolvem uma capacidade acrescida de aprender novas linguagens de programação de forma mais madura, assim como uma acrescida capacidade de concepção e desenvolvimento de software.
Tópicos
O estudo da semântica das linguagens será baseado essencialmente em técnicas operacionais, envolvendo o estudo de técnicas de interpretação e compilação dirigidas pela sintaxe, sendo cobertos os mecanismos em que se baseam a maior parte das linguagens funcionais, imperativas e centradas em objectos, incluindo os respectivos sistemas de tipos. Sempre que possível, ilustrar-se-ão os conceitos com exemplos retirados de linguagens de programação existentes (Pascal, Java, C, C++, ML, etc) ou “extintas” (Algol, Simula).
Esta disciplina ensina os princípios, técnicas e ferramentas envolvidos na construção e validação de sistemas de software de alta tecnologia, de forma aplicada às plataformas de suporte à execução standard de indústria (Java, .NET, C, C#). O foco é em temas de programação avançada, linguagens de programação por objectos e componentes, ferramentas de validação e detecção de erros em software. As competências transmitidas nesta cadeira são indispensáveis aos alunos com vocação para actividades de desenvolvimento e liderança de desenvolvimento de software de alta tecnologia.
Links
- Calendário
Calendário
Data Tópico TPC Projeto Código 28 Fev. Overview da unidade curricular 1 Mar. Arquitetura de interpretadores e compiladores Parser CALC 7 Mar. Sintaxe e Semântica Calc.hs 8 Mar. Declaração e uso de identificadores (Ligação) Interpretador CALC 14 Mar. Semântica de uma linguagem com Ligação. Ambientes. 15 Mar. Estado e Linguagens Imperativas TPC1 (entrega a 4 Abr) Interpretador CALCI 21 Mar. Não há aula. Será marcada para outra data 22 Mar. Linguagens Imperativas Interp. CALCSTATE CalcState.hs 4 Abr. Linguagens Imperativas (II) 5 Abr. Não há aula. ExpoFCT 11 Abr. Abstração funcional TPC2 (entrega a 18 Abril) CalcF.hs 12 Abr. Semântica com ambientes. Fechos. Resolução de nomes. Interp. CALCF CalcFEnv.hs CalcFClo.hs 18 Abr. Primeiro Teste 19 Abr. Resolução do teste. Estratégias de avaliação e passagem de parâmetros. Continuação 25 Abr. Não há aula. Feriado 26 Abr. Sistemas de tipos Interp. TCALCF
2 Mai. Inferência de tipos infer.ml 3 Mai. Ambientes de execução. Geração de código. LLVM e SSA. Comp. CALCI CalcComp.hs 9 Mai. Compilação de linguagens imperativas. Variáveis de stack e variáveis na heap (referências). TPC3 (entrega a 17 de Maio) CalcCompVar.hs
CalcStateComp.hs10 Mai. Compilação de estruturas de controlo. Geração de blocos básicos, ordenação de blocos. Comp. CALCState CalcControlComp.hs 16 Mai. Chamada de funções. 17 Mai. Segundo teste Comp. CALCState 23 Mai. Chamada de funções. Closure conversion. Stack digests. 24 Mai. Chamada de funções. Comp. Core. (on bitbucket)
30 Mai. Declarações recursivas. 31 Mai. Gestão de Memória. Continuação 3 Jun. Entrega projeto. Discussões 4 e 5 de Jun.
- Materiais
Materiais
Nesta secção poderão ser encontrados para download alguns materiais de ajuda.
Código de iniciação
Notas e Enunciados
Entregas de trabalhos
- Topic 4
Topic 4
- Topic 5
Topic 5