|
Esta página contém informação relativa à cadeira de
Processamento de Linguagens e Compiladores
a decorrer no
ano lectivo 2005-2006
. Processamento de Linguagens e Compiladores é uma cadeira do 2º Semestre do 2º Ano da licenciatura em Matemática e Ciências da Computação.
Esta página está a ser gerada a partir de um documento XML, por uma ferramenta que utiliza os métodos de programação leccionados neste curso (eg, expressões regulares, autómatos finitos e gramáticas independentes do contexto). A partir da especificação XML é produzida esta página, bem como a sua representação em LaTeX. O formato LaTeX dá origem aos seguintes documentos em postscript e pdf:
[ ps ]
,
[ pdf ]
Novidades e Avisos
| (27-07-06) |
- As notas da época de recurso estão disponíveis.
- Os alunos podem consultar os exames na 6a feira (dia 28 de Julho).
|
| (17-07-06) |
- As notas finais estão disponíveis.
- Possíveis soluções dos trabalhos práticos (apresentadas pelos alunos) estão disponíveis na secção
Contribuições dos Alunos
|
| (14-07-06) |
- As notas da duas chamadas da época normal de exames estão disponíveis.
- Os enunciados dos exames estão também disponíveis
- Os exames podem ser consultados na próxima segunda-feira (dia 17)
- As notas dos testes práticos serão disponibilizadas na segunda-feira (tl como se pode ler em baixo...)
|
| (27-06-06) |
- Pela quantidade de emails que tenho recebido a perguntar quando é o dia 19, vejo que esta página está a ser acedida frequentemente. Já agora acedam também à página seguinte que permite ver resultados de análise de
performance de várias linguagens de programação
(cerca de 50) e dos seus compiladores:
The Computer Language Shootout Benchmarks
- Sim ! O ghc e a linguagem Haskell está com uma performance bem à frente do Java e cada vez mais próxima da linguagem C (gcc) ! !
- BTW, este concurso não está a ser organizado pelas pessoas das linguagens funcionais...
- Depois de todos os alunos terem consultado esta página as notas serão afixadas :-)
|
| (16-06-06) |
- As notas da apresentação/defesa dos Trabalhos Práticos já estão disponíveis.
- As notas dos testes práticos serão disponibilizadas na 2a feira (19 de Junho)
|
| (05-06-06) |
|
| (30-05-06) |
- Uma nova versão do Gram2C está disponível
. Apaguem a versão antiga e instalem esta nova versão.
- Esta nova versão tem na directoria de
Exemplos
o exemplo
List
estudado hoje nas aulas. Re-utilizem a Makefile e vejam como o código C gerado é incluído no lex e yacc
- Os apontamentos sobre as regras de conversão de Gramáticas Abstractas para C estão disponíveis em
pdf
e em
ficheiro fonte
- Vejam o exemplo Block, especialmente como o yacc cria a Árvore Abstracta que respresenta uma frase. No trabalho prático terão de criar uma Árvore Abstracta que repesenta BC--.
|
| (26-05-06) |
- O 2º trabalho prático já está disponível.
- Na secção de software está disponibilizado algum software necessário na resolução deste trabalho.
|
| (28-04-06) |
|
| (28-04-06) |
- A Fichas Teórico-Prática nº7 já está disponível.
- Um exemplo de um scanner escrito directamente em Haskell está disponível em
scanner.hs
- Exemplos de scanners escrito em Lex estão disponíveis nos apontamentos
Especificação e Processamento de Linguagens
(ver bibliografia)
|
| (12-04-06) |
- O 1º trabalho prático já está disponível.
|
| (11-04-06) |
- A Fichas Teórico-Prática nº6 já está disponível.
- As regras de conversão de expressões regulares em autómatos finitos não deterministas estão disponíveis em
conversaoRegExp2Ndfa.pdf.
|
| (25-03-06) |
- As Fichas Teórico-Práticas nº4 e nº5 já estão disponíveis.
|
| (20-03-06) |
- A Ficha Teórico-Prática nº3 já está disponível.
|
| (13-03-06) |
- A Ficha Teórico-Prática nº2 já está disponível.
|
| (06-03-06) |
- A Ficha Teórico-Prática nº1 já está disponível.
|
| (01-03-06) |
- Aula teórica de substituição:
5ª Feira, dia 2 de Março, 10:00,
sala DI 0.04
|
| (27-02-06) |
- A página da disciplina está no "ar".
|
1- Equipa Docente e Horário
- João Saraiva
| Teóricas: |
MCC |
T1 |
2ª Feira - 14:00-15:00 |
sala CP2-102 |
| |
|
T2 |
4ª Feira - 11:00-12:00 |
sala CP3-103 |
| Teórica-Prática: |
MCC |
TP1 |
2ª Feira - 15:00-16:00 |
sala ? ? |
| |
MCC |
TP2 |
4ª Feira - 09:00-10:00 |
sala CP3 205 |
| Prática: |
MCC |
P1 |
3ª Feira - 09:00-11:00 |
sala DI 1.09 |
| Dúvidas |
MCC |
|
3ª Feira - 14:00-18:00 |
|
- Tiago Alves
| Prática: |
MCC |
P2 |
3ª Feira - 11:00-13:00 |
sala DI 1.09 |
| Dúvidas |
MCC |
|
? ? ? |
|
2- Estrutura e Funcionamento
Exposição da matéria fundamental -- motivação, conceitos, definições, métodos e justificações -- a nível das aulas teóricas. Resolução de exercícios de consolidação, a nível das aulas teórico-práticas, no quadro. Realização no computador, no contexto das aulas práticas, de exercícios práticos e pequenos projectos. Resolução extra aulas de dois trabalhos concretos de aplicação, recorrendo às linguagens de programação Haskell e C.
3- Objectivos
É objectivo deste curso levar os alunos a:
- Compreender os conceitos de análise e geração automática de programas.
- Aprofundar os conceitos de Gramática Independentes do Contexto e a sua utilização na especificação e no desenvolvimento de processadores de linguagens formais.
- Analisar e compreender as diferentes técnicas de parsing: "Top-Down" e "Bottom-Up"
- Analisar e compreender as tarefas de unparsing/pretty priting, análise de nomes, optimização e geração de código.
- Reforçar a aptidão dos alunos para desenvolver programas correctos e eficientes.
4- Avaliação
A Avaliação tem uma componente teórica e uma componente prática, ambas obrigatórias.
De acordo com o regulamento actualmente em vigor na UM, a
nota teórica
(NT)
será obtida através da realização de
1 prova individual escrita
. Essa prova tem as instâncias a seguir indicadas (um aluno só poderá fazer melhoria na época de recurso):
- Exame, realizado na 1ª chamada da época normal, no fim do 1º semestre
- Exame, realizado na 2ª chamada da época normal, no fim do 1º semestre
- Exame, realizado na época de recurso
A
componente prática
será formada por 2 componentes
- 2 trabalhos práticos (
P1
e
P2
) a realizar durante o semestre
- Duas provas individuais escrita (
PE
) sobre os trabalhos práticos com 15 minutos de duração. Esta prova escrita será realizada imediatamente depois da entrega dos trabalhos práticos.
A
nota prática (
NP
) será obtida de acordo com a seguinte fórmula:
NP
=
P1
* 0.4 +
P2
* 0.4 +
PE
* 0.2
A nota final será determinada de acordo com a seguinte fórmula:
NF
= (
NT
+
NP
)/2
Exige-se 8 valores como nota mínima em cada uma das partes.
5- Programa
- Processamento de Linguagens Formais
- Conceitos e exemplos
- Arquitectura dos Processadores de Linguagens
- Análise Léxica de Linguagens Formais
- Conceitos e suas tarefas
- Especificação via Expressões Regulares
- Construção de Analisadores Léxicos basedos em Autómatos Finitos
- Geração Automática de Analisadores Léxicos
- Breve Introdução ao sistema
Lex
- Análise Sintática de Linguagens Formais
- Conceitos e suas tarefas
- Especificação da Estrutura de Linguagens via Gramáticas Independentes do Contexto
- Gramáticas/Estruturas Concretas versus Gramáticas/Estruturas Abstractas
- Representação de Gramáticas no Paradígma Imperativo
- De Gramáticas Concrectas para Especificações em
Yacc
- Breve Introdução ao sistema
Yacc
- De Gramáticas Abstractas para Tipos de Dados Estruturados em
C
- Técnicas de Parsing
- Parsers Top-Down
- Parsers Bottom-Up
- Análise Semântica de Linguagens Formais
- Conceitos e Tarefas
- Implementação de Analisadores Semânticos: Problemas e Soluções
- Analisadores Semânticos baseados em Multiplas Travessias na Estrutura Abstracta da Linguagem
- "Colagem" de Travessias: A solução Imperativa versus Funcional
6- Fichas Teórico-Práticas
As fichas a realizar em cada aula prática são disponibilizadas nesta secção. As fichas estarão disponíveis na sexta-feira da semana anterior à aula a que se destinam.
- Ficha Teórico-Prática nº 1:
Expressões Regulares
- Ficha Teórico-Prática nº 2:
Autómatos Finitos Deterministas
- Ficha Teórico-Prática nº 3:
Autómatos Finitos Não Deterministas
- Ficha Teórico-Prática nº 4:
> Conversão de Autómatos Finitos Não Deterministas em Deterministas
- Ficha Teórico-Prática nº 5:
Conversaõ de Expressões Regulares em Autómatos Finitos Não Deterministas
- Ficha Teórico-Prática nº 6:
Lex: Um gerador de Analisadores Léxicos
- Ficha Teórico-Prática nº 7:
Gramáticas Independentes do Contexto em Haskell
- Ficha Teórico-Prática nº 8:
Propriedades de Gramáticas Independentes do Contexto
- Ficha Teórico-Prática nº 9:
Gramáticas Independentes do Contexto em Yacc
- Ficha Teórico-Prática nº 10:
Árvores de Sintaxe Abstractas em C
7- Software
O seguinte software utilizado/recomendado nesta disciplina está já disponível:
- Expressões Regulares:
O sistema
HaLeX
está disponível na página oficial do sistema
HaLeX.html
e em
HaLeX_1.1.tgz
.
- Gramáticas Independentes do Contexto:
O Sistema HaGLR: Disponível em breve.
- Árvores de Síntaxe Abstractas:
Sistema Gram2C: Um Gerador de Árvores Abstractas em C
- O Gram2C utiliza o Bohem's Garbage Collector (ver abaixo)
- Este gestor de memória é distribuído com o Gram2C
(logo, instalando o Gram2C, instala-se também o gc ! )
- código fonte:
Gram2C.tgz
- Máquinas Virtuais:
- MSP - Um máquina de assembly muito simples:
- O Simulador WinMSP:
WinMSP.tgz
- O WinMSP é distribuído em binário para o SO Windows. Para o executar em Linux devem instalar o sistema wine :
Wine
- Regras de Conversão de esturturas condicionais e ciclicas para MSP:
msp.ps
- SPIM - A MIPS32 Simulator
- Gestão de Memória:
O Gestor de Memória Boehm-Demers-Weiser para C/C + +
- Literate Programming:
O Sistema de Literate Programming NoWeb
8- Contribuições dos Alunos
Soluções dos trabalhos práticos apesentados:
- 1º Trabalho Prático:
- 2º Trabalho Prático:
9- Notas & Exames
O enunciado( em versão electrónica) dos exames propostos neste ano lectivo foram:
Os resultados finais obtidos pelos alunos estão disponíveis
aqui
.
Os resultados finais incluindo a época de recurso estão disponíveis
aqui
.
10- Trabalhos Práticos
Os trabalhos práticos propostos são os seguintes:
- Trabalho Prático nº 1:
Processador de Gramáticas
- Trabalho Prático nº 2:
Um Interpretador da Linguagem BC--
Os resultados dos trabalhos práticos estão disponíveis
aqui
.
11- Sumários
A definir
Bibliografia
- Andrew W. Appel
Modern Compiler Implementation in C: basic techniques
Cambridge University Press
1997
- Andrew W. Appel
Modern Compiler Implementation in ML: basic techniques
Cambridge University Press
1997
- Alfred V. Aho and Ravi Sethi and Jeffrey D. Ullman
Compilers: Principles, Techniques and Tools
Addison-Wesley
1986
- João Saraiva
Language Processing (with a Functional Flavour)
DI/UM
1ª
Edicao
2000
- João Saraiva
Especificação e Processamento de Linguagens
DI/UM
1ª
Edicao
[PS]
[HTML]
1995
- William M. Waite and Lynn R. Carter
An Introduction to Compiler Construction
Harper Collins
1993
- Thomas Niemman
A Compact Guide to Lex & Yacc
[PDF]
[HTML]
- M. E. Lesk and E. Schmidt
Lex - A Lexical Analyzer Generator.
Computing Science Technical Report No. 39, Bell Laboratories, Murray hill, New Jersey
[PDF]
1975
- Stephen C. Johnson
Yacc: Yet Another Compiler Compiler
Computing Science Technical Report No. 32, Bell Laboratories, Murray hill, New Jersey
[PDF]
1975
- John Levine, Tony Mason and Doug Brown
lex & yacc
O'Reilly & Associates, Inc
1992
- João Saraiva
HaLeX: A Haskell Library to Model, Manipulate and Animate Regular Languages
ACM Workshop on Functional and Declarative Programming in Education (FDPE/PLI'02), Pittsburgh, USA,
[PS]
[HTML]
2002
- John Hopcroft, Rajeev Motwani and Jeffrey Ullman
Introduction to Automata Theory, Languages and Computation
Addison-Wesley
2nd Edition
Edicao
[HTML]
2001
- R. Floid and R. Beigel
The Language of Machines: An Introduction to Computability and Formal Languages
Computer Science Press
1994
- S.P.Jones, et al
Report on the Programming Language Haskell 98
[HTML]
[PS]
[PDF]
1999
- R. Bird
Introduction to Functional Programming using Haskell
Prentice Hall
1998
- S. Thompson
Haskell - The Craft of Functional Programming
Addison-Wesley
2ª
Edicao
1999
- N. Jones, C. Gomard and P. Sestoff
Partial Evaluation and Automatic Program Generation
Prentice Hall
[HTML]
1993
- E. Horowitz and S. Sahni
Fundamentos de Estruturas de Dados
Editora Campus
1984
|