Processamento de Linguagem
(cod 11567)

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

Departamento de Informática
Universidade da Beira Interior


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

Este página web visa introduzir a oferta formativa e pedagógica do DIUBI na área disciplinar das linguagens de programação. Assim esta 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 léxica, sintáctica, semântica e de síntese de código para a produção de programas expressivos, eficientes e seguros.

Contexto da Aprendizagem

Na sua componente introdutória apresentamos o 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. Esta matéria é a componente inicial da UC de Processamento de Linguagem do primeiro ciclo em Engenharia Informática da UBI.

Na sequência, 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 da matéria exposta da UC Desenho de linguagens de Programação e de compiladores.

Neste sentido esta componente curricular é 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.

Para quê estudar os Processos de Compilação?

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

Revisão OCaml.

O seguinte curso poderá ser consultado Curso OCaml (link)

Matéria lecionada.

As aulas são organizadas da seguinte forma:

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

Compilers front-end, Lexical Analysis, (Ascendent and Descendent) Syntactical Analysis, 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 13: Framework Monótona e Artigo Rice.

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.