
Interpretação e Compilação de Linguagens
Código
8152
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
João Ricardo Viegas da Costa Seco, Luís Manuel Marques da Costa Caires
Horas semanais
5
Total de horas
61
Língua de ensino
Português
Objectivos
Saber
- Conhecer a arquitetura e técnicas usadas no desenho de interpretadores, compiladores e sistemas de tipos
- Conhecer os elementos base das linguagens de programação e a sua semântica
- Definir linguagens de programação por composição de elementos fundamentais
Saber Fazer
- Representar e manipular a sintaxe abstracta de uma linguagem como dados de um programa transformador
- Descrever a semântica de linguagens através de interpretadores, compiladores e verificadores de tipos
- Conceber e implementar compiladores para uma máquina virtual industrial
Competências complementares
- Raciocinar sobre sistemas complexos a vários níveis de abstração
- Propor e concretizar soluções gerais com base em princípios
Conteúdo
A.Princípios
- Sintaxe das Linguagens de Programação
- Semântica das Linguagens de Programação
- Níveis de Interpretação (Interpretação, compilação e sistemas de tipos)
B.Interpretação de Programas
- Valores e Expressões: Definições e Ambiente
- Estado e Referências: Modelo ambiente-memória
- Abstração funcional: funções de primeira classe e ordem superior
- Definições recursivas e ambientes circulares
- Valores estruturados: registos e valores recursivos
- Objetos e classes: representação de objetos usando registos e fechos
C.Sistemas de Tipos
- Princípios, objectivos e limitações da análise estática
- Sistemas de tipos simples
- Algoritmos de verificação e inferência de tipos
D.Compilação de Programas
- Arquitetura de um compilador
- Ambientes de suporte à execução (máquinas de registos, pilha de avaliação, pilha de chamada)
- Tradução de código dirigida pela sintaxe
- Geração de código para uma máquina virtual industrial (CLR,LLVM)
Bibliografia
- “Concepts in Programming Languages”, John C. Mitchell, Cambridge University Press. ISBN 0 521 78098 5
- “Essentials of Programming Languages”, Daniel Friedman, Mitchell Wand, Christopher Haynes, MIT Press.
- “Compiling for the .Net Common Language Runtime (Clr) (.NET Series)”, John Gough, Prentice Hall PTR
- “Modern Compiler Implementation in Java” Andrew W. Appel, Cambridge University Press
- “The Study of Programming Languages”, Ryan Stansifer, Prentice Hall International Edition.
Método de ensino
A metodologia pedagógica proposta para esta unidade curricular centra-se na construção gradual de uma linguagem de programação. O ponto de partida é uma linguagem núcleo de expressões aritméticas, à qual se vão acrescentando novos elementos fundamentais numa espiral até se obter uma linguagem com funções de primeira classe e de ordem superior, capazes de exprimir as construções mais sofisticadas das linguagens de programação como classes, mixins ou closures.
Método de avaliação
Esta avaliação está elaborada com base no regulamento de avaliação recentemente aprovado na FCT.
Aviso: Esta página poderá mudar para pequenas afinações até ao primeiro dia de aulas.
A avaliação divide-se em três componentes: teórico-prática, projeto e sumativa. As componentes teórico-prática e de projeto têm classificação mínima de 10 valores.
A componente de avaliação teórico-prática é realizada através de dois testes durante o semestre, ou por exame.
A componente de projeto consiste no desenvolvimento de um trabalho prático, realizado individualmente ou em grupo, avaliado através de um relatório e de uma apresentação e discussão oral. Tem frequência na unidade curricular quem obtiver aprovação na componente de projeto.
A componente sumativa é realizada através da resposta a trabalhos de casa por escrito ou online.
A classificação final será calculada como a média ponderada das 3 componentes arredondadas às décimas, com os seguintes pesos: componente teórico-prática 60%, componente projeto 30%, componente sumativa 10%.