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
-
Trabalho prático publicado. Ver secção 6.3.
Contents
2 Docentes
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?
-
Em primeiro porque é interessante e formador!
- Porque as técnicas de processamento de linguagens e de
construção de compiladores têm aplicações fortes em muitas áreas da
informática, e não só em construção de compiladores.
- Através do estudo da compilação, tentaremos mostrar o quão úteis
para a informática em geral são as técnicas e as ferramentas
oriundas deste estudo assim como procuraremos perceber as
características das linguagens de programação. De facto um
compilador é um programa de tamanho importante que é necessário bem
estruturar. Este deve ser também eficiente e é importante que esteja
isento de erro. Ser capaz de escrever um compilador é assim uma
competência desafio para qualquer programador que se quer exímio.
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:
-
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, nomeadamente:
-
expressões regulares e autómatos finitos;
- analisadores
sintácticos;
- analisadores semânticos.
- 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 das linguagens de programação e dos seus compiladores como a optimização de código, as implicações técnicas impostas pelas características próprias da linguagem de programação, ou do paradigma na qual se inscreve.
5 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 um projecto prático de construção de um pequeno
compilador acompanhada da justificação teórica das diferentes fases de compilação implementadas.
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.
6 Programa e Material Pedagógico
6.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.
6.2 Práticas Laboratoriais/ Trabalhos Dirigidos
-
TD
1 - Assembly X86-64
-
TD
2 - Interpretador Mini-Python
-
TD
3 - Inferência de tipos e Algoritmo W
-
TD
4 - Construção de autómatos deterministas a partir de
expressões regulares
-
TD
5 - Análise Descendente
-
TD
6 - Análise sintáctica de uma pequena linguagem
- TD
7 - Produção de Código
- TD
8 - GC stop & Copy
- TD
9 - Coloração de grafos
- TD
10 - Análise estática de programas na Framework Monótona
- TD
11 - A segurança de software como uma análise estática de programas
6.3 Trabalho Prático
Enunciado do trabalho NATRIX aqui (link).
Enunciado do trabalho RUST aqui (link).
7 Material de Apoio 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.
-
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.
8 Datas Importantes
-
Entrega do trabalho: última semana de aulas
- Exame Época 1 : conferir nos SA.
- Exame Época 2 : conferir nos SA.
- Exame Época Especial : conferir nos SA.
9 Horário
|
Tipo de aula | Horário | Sala |
|
Teórica | Quinta-Feira das 14h00 às 16h00 | Lab Release |
|
Prática | Quinta-Feira das 16h00 às 18h00 | Lab. Release |
10 Atendimento
|
Horário |
|
Sexta-feira das 9h00 às 11h00 |
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.