Desenho de Linguagens de Programação e de Compiladores
(cod. 11482)

Departamento de Informática
Universidade da Beira Interior

Ano lectivo 2015/2016


Figure 1: as seen on http://xkcd.com

Esta página no formato pdf

1  Novidades

Contents

2  Docentes

Simão Melo de Sousa (regente) - Gabinete 3.17 - Laboratório Release/QuiVVer (6.25) - Bloco VI

3  Objectivos

Esta disciplina apresenta as principais fases do desenho de linguagens de programação e da construção dum compilador, com ênfase particular nas fases de análise semântica e de síntese de código para a produção de programas expressivos, eficientes e seguros.

Contexto da Aprendizagem

Esta UC pressupõe um conhecimento básico dos fundamentos e das tecnologias das análises léxica, sintáctica, e análises básicas de tipos e de porte (como introduzidas, por exemplo, na UC de Processamento de Linguagem (link) do primeiro ciclo em Engenharia Informática da UBI).

Nesta UC procura-se estudar como construir linguagens de programação (e respectivos compiladores) para que esses permitam a expressão ou síntese de programas expressivos, eficiente e bem comportados. Os métodos estudados permitam calcular estes programas com as garantias de eficiência e de correcção (por exemplo, relativamente ao código fonte). Assim a safety, correcção, eficiência, expressividade, análise comportamental são obtidas por desenho, por cálculo, em tempo de compilação, automaticamente. Este é o foco desta UC.

Neste sentido esta UC é complementar da UC de Computação Fiável - CF (link). Ambas estudam a essência das linguagens de programação, dos seus programas, introduzem técnicas relacionadas.

A UC CF visa instruir os seus alunos sobre os conceitos, técnicas, ferramentas e aplicações destas à construção de software fiável e seguro, de programas comprovadamente correctos. Uma introdução a cada familia de técnicas é dada mas nem todas são exploradas com todo o detalhe. A abordagem explorada em profundidade nesta UC introduz as familias de técnicas que permitam obter um perfil comportamental dos programas por análise, raciocínio e demonstração. Por natureza este escrutínio não é automático apesar de ser suportado e sistematizado computacionalmente, mas permite uma análise fina, expressiva e complexa.

Agradecimentos

O regente da disciplina gostaria de agradecer

Contexto e parcerias industriais/académicas

Esta UC contou na sua organização e leccionação com vários intervenientes industriais e académicos que citamos aqui (figura 2) como indicador da relevância e abertura desta UC ao meio tecnológico no qual evoluí e o seu compromisso firme e reconhecido em potenciar os seus alunos junto desta.

Estes intervenientes influenciaram, participaram na definição da componente prática, propuseram extensões a esta componente na forma de estágios, teses de mestrado, ou contratações. Estas parcerias justificaram a dinâmica escolhida e impressa na exposição teorica e prática da matéria, colaboraram em termos de investigação com a equipa docente em temáticas abordadas nesta UC o que resultou numa exposição que se pretendeu mais esclarecida.


Figure 2: parceiros e intervenientes (ordem alfabética)

4  Competências por adquirir e Resultados da Aprendizagem

Os estudantes deverão adquirir as seguintes competências:

5  Programa

5.1  Aulas teóricas

As aulas são organizadas da seguinte forma:

Nestas aulas, os tópicos seguintes serão abordados (em inglês):

Operational Semantics, Denotactional Semantics, Type Checking and (polymorphic) Type Systems, Activation Records, Translation to Intermediate Code, Basic Blocks and Traces, Instruction Selection, Liveness analysis, Register allocation, Garbage collection, Object-oriented languages, Functional Programming Languages, Loop Optimizations, Code Optimizations, Static Single-Assignment Form, Dataflow Analysis, Control Flow Analysis, Pointer Analysis and Other Static Program Analysis. Monotone Framework, Unification Framework, Cubic Framework.

5.2  Práticas Laboratoriais/ Trabalhos Dirigidos

6  Material de Apoio, Pedagógico e Referências Bibliográficas

Apontamentos apresentados (e disponibilizados) nas aulas.

Um vídeo para acompanhar a mensagem da aula 3 aqui (link).

Artigos referidos nos acetatos da aula 10: Framework Monótona e Artigo Rice.

(new!) enunciado do trabalho aqui (link).

Ferramentas

UCs Semelhantes e complementares

Apresenta-se aqui apontadores para 3 unidades curriculares que serviram de modelo a UC aqui definida (e cuja exploração se recomenda):

Bibliografia Principal

As seguintes obras cobram em profundidade e complementam os tópicos abordados nesta aula.

7  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 provas escrita e por um projecto prático de construção de um pequeno compilador.

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.

7.1  Componente Ensino/Aprendizagem Prática

7.2  Componente Ensino/Aprendizagem Teórica

7.3  Admissão e Avaliação por Exame

8  Datas Importantes

9  Horário

Tipo de aulaHorárioSala
TeóricaQuinta-Feira das 9h00 às 11h006.13
PráticaQuinta-Feira das 11h00 às 13h006.13

10  Atendimento

Horário
Terça das 11h00 às 13h00

ou por mail (medida anti spam, retire os UUU): desousaUUU@UUUdi.ubi.pt.

References

[1]
A. V. Aho, R. Sethi, and J. D. Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1985.
[2]
A. W. Appel. Modern Compiler Implementation in ML. Cambridge University Press, 1998.
[3]
Andrew W. Appel, Robert Dockins, Aquinas Hobor, Lennart Beringer, Josiah Dodds, Gordon Stewart, Sandrine Blazy, and Xavier Leroy. Program Logics for Certified Compilers. Cambridge University Press, New York, NY, USA, 2014.
[4]
E. Chailloux, P. Manoury, and B. Pagano. Developing applications with objective caml. http://caml.inria.fr/oreilly-book, 2003.
[5]
Robert Harper. Practical Foundations for Programming Languages. Cambridge University Press, New York, NY, USA, 2012.
[6]
Yaron Minsky, Anil Madhavapeddy, and Jason Hickey. Real world OCaml. Sebastopol, Calif. O’Reilly Media, 2013. Index.
[7]
J. Mitchell. Foundation for Programming Languages. Foundations of Computing, MIT Press, 1996.
[8]
John C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003.
[9]
Steven S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1997.
[10]
F. Nielson, H. R. Nielson, and C. L. Hankin. Principles of Program Analysis. Springer-Verlag, 1999.
[11]
H. R. Nielson and F. Nielson. Semantics with Applications. John Wiley & Sons, Chichester, 1993. http://www.daimi.au.dk/~bra8130/Wiley_book/wiley.html
[12]
Benjamin C. Pierce. Types and Programming Languages. MIT Press, Cambridge, MA, USA, 2002.
[13]
Benjamin C. Pierce. Advanced Topics in Types and Programming Languages. The MIT Press, 2004.
[14]
R. Wilhelm and D. Maurer. Compiler Design. Addison Wesley, 1995.
[15]
G. Winskel. The Formal Semantics of Programming Languages: An Introduction. Foundations of Computing series. MIT Press, Cambridge, Massachusetts, February 1993.




Enviar comentários e dúvidas para (retire os UUU) : desousaUUU@UUUdi.ubi.pt


This document was translated from LATEX by HEVEA.