|
Esta página contém informação relativa à cadeira de
Processamento de Linguagens I
a decorrer no
ano lectivo 2002-2003
. Processamento de Linguagens I é uma cadeira do 2º Semestre do 3º Ano das licenciaturas em Engenharia de Sistemas e Informática e em Matemática e Ciências da Computação. Referências para páginas de instâncias anteriores podem ser encontradas nos seguintes endereços:
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, gramáticas independentes do contexto e gramáticas de atributos). 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
| (18-07-03) |
- Notas Finais:
lESI
,
MCC
- Os grupos que ficaram de enviar o código fonte dos seus trabalhos práticos (para ser disponibizado nesta página), enviem-me por email o "tar.gz" do projecto.
|
| (21-07-03) |
Melhoria do Trabalho Prático
- Sexta-Feira, dia 25 de Julho (sexta-feira)
- Os grupos devem inscrever-se nos técnicos para reservarem o período para mostrarem o trabalho
- Caso algum grupo não possa entregar nessa altura, devem contactar um dos docentes de modo a marcar um outro dia para a entrega.
|
| (18-07-03) |
- Notas dos Exames e trabalhos Práticos:
lESI
,
MCC
- Na 2a Feira será definido o período para apresentarem a melhoria ao 2o. trabalho Prático.
Nesse dia estaremos cá para mostrar os exames e tirarmos dúvidas sobre o trabalho prático |
| (23-06-03) |
- Exames de anos anteriores:
exame 1
,
exame 2
e
exame 3
(notar que estes exames se referem a outra instância da disciplina em que se leccionou gramáticas de atributos com mais detalhe)
- Aula Teórica do Dr. Marjan Mernik:
- Slides da aula:
slides
e gramática de atributos, escrita em LISA, para o exemplo da máquina de calcular:
desk.lisa
- Extras/Melhoria ao Trabalho Prático nº 2:
- Os grupos podem apresentar os extras ao TP2 de modo a melhorar a respectiva nota
até à Época de Recurso
(26 de Julho).
- Em breve será anúnciado nesta página
o dia
(perto do dia 26 de Julho) em que nós receberemos as melhoria
- Um artigo (que será apresentado em breve) e que utiliza um dos trabalhos práticos proposto hà dois anos atrás como exemplo de estudo:
artigo
|
| (09-06-03) |
Trabalho Prático nº2: Entrega + Info:
- A entrega do trabalho prático será feita em:
- sexta-feira (dia 13 de Junho) - Manhã
- segunda-feira (dia 16 de Junho) - Tarde
- terça-feira (dia 17 de Junho) - Manhã
- Cada grupo deverá reservar uma hora para apresentar o trabalho num desses períodos
- As folhas para marcação estão disponíveis nos técnicos (junto da sala aberta)
- Compete ao grupo instalar e mostrar os dois trabalhos a executar nos laboratórios do DI
- Todos
os elementos do grupo têm de estar presente na defesa dos trabalhos práticos
- Extras ao Trabalho Prático nº 2
:
- Os extras (e apenas os extras) podem ser apresentados mais tarde (nunca depois da 2a Chamada) em data a combinar directamente com um dos docentes
- No caso do extra nº1 (combinadores de documentos) é necessário incluir na especificação SSL vários módulos da biblioteca ag_lib (distribuída com as sources C do LRC). Na Makefile que utilizei para gerar a solução do trabalho estão definidos esses módulos. Essa Makefile está disponível aqui
Makefile
.
- Os combinadores de documentos usam algumas funções C, definidas no módulo C "docCfiles.c". Este módulo é distribuído com a solução C do trabalho prático. Copiem esse ficheiro para a vossa directoria e alterem a vossa Makefile para o incluir na especificação: Vejam como este módulo C é incluído na especificação na Makefile do link acima.
- Depois de se definirem as regras para construir um documento abstracto será necessário usar gramáticas de atributos de ordem superior para aceder à reprsentação em LaTeX e HTML do documento criado. Para tal, será necessário falar 5 minutos com um dos docentes para ele explicar como isso é feito.
- Para utilizar dosi ficheiro diferentes para os estilos e a base de dados bibliográfica, criamos um ficheiro C com uma nova função main
evaDoc.c
. Este ficheiro está a ser utilizado pela solução C deste trabalho (ver respectiva Makefile acima). Este ficheiro assume o seguinte:
- Existe uma produção da forma:
BibTeXStyle : ConsBibTeXStyle (BibStyle Bibtex)
em que BibTeXStyle é a raiz da gramática abstracta que define a linguagem completa, onde: BibStyle respresenta abstractamente a linguagem de estilos e Bibtex respresenta abstractamente a linguagem BibTex--
- Existe uma gramática concreta única para ambas as linguagens. Porém, existem (pelo menos) dois não terminais por onde podemos iniciar derivação e que controem árvores abstractas do tipo BibStyle e Bibtex.
|
| (30-05-03) |
|
| (30-05-03) |
- Ficha nº2 totalmente resolvida :
postscript
e em
sources (ver ficheiro Ficha2.nw)
- Na distribuição C do LRC estão incluídos vários exemplos de processadores de linguagens e ambientes (gráficos) de programação: Block (falamos na aula), Desk (a linguagem Calculadora) e MicroC.
|
| (23-05-03) |
Ficha nº2 parcialmente resolvida:
ficha21.nw |
| (23-05-03) |
LRC:
- Para instalar o LRC em red-hat 8 ou 9 é necessário usar a versão 6.1 do
Boehm' garbage collector
(GC).
- A versão do LRC disponibilizada ontem, estava a usar uma versão anterior do GC. Actualizei hoje o LRC com a última versão do GC. As novas fontes em C do LRC estão disponíveis em:
[ lrc.tgz ]
|
| (22-05-03) |
Trabalho Prático nº2
LRC: Fontes em C
|
| (29-04-03) |
Aulas teórico práticas: Ficha 2
|
| (29-04-03) |
Entrega do 1º Trabalho Prático
Regras para a Entrega do Trabalho Prático:
- O trabalho prático deve ser entregue até, sexta-feira, dia 2 de Maio, à
24 horas
- A entrega é feita enviando um
email único
para
jas@di.uminho.pt
- O
Assunto (subject)
do email
tem
de ser:
PL1 TP1
- O
Conteúdo
deverá apenas indicar a constituição do grupo, no formato definido pela seguinte expressão regular:
(NUMERO,CURSO,NOME \newline) +
- Em
Anexo (attachment)
deverão incluir um ficheiro
único
que contém o trabalho (ie, o relatório, o código fonte, a makefile, o ficheiro readme, etc). Usem
zip
ou
tar
.
- Por cada dia de atraso na entrega do trabalho será aplicada uma penalização de
1 valor
.
(não adianta alterarem a hora do email, uma vez que onde me encontro são 8 horas mais cedo, e por isso vou estar online até às 24:00)
- Posteriormente será marcada uma apresentação do trabalho com todos os elementos do grupo presentes
- O 2º Trabalho Prático será divulgado na próxima semana
|
| (17-04-03) |
Aula Teórica do Dr. Anthony Sloane
|
| (03-04-03) |
- Sistema LRC
- Aulas teórico práticas: Ficha
- Na próxima semana não funcionam os turno teórico-práticos leccionados por João Saraiva. Os alunos desses turnos deverão assistir a uma aula de substituição na Sexta-feira, das 16:00 - 18:00 horas, dia 11 de Abril (sala DI 1.09).
|
| (24-03-03) |
Trabalho Prático nº1
- Enúnciado: documento
[ pdf ]
e literate programming
[ noweb ]
- Para produzir o ficheiro pdf a partir do ficheiro NoWeb fazer:
- O documento LaTeX/NoWeb utiliza uma base de dados bibliográfica BibTeX. A base de dados bibliográfica necessária está disponível no ficheiro
pli.bib
- Estilo NoWeb necessário para o LaTeX:
noweb.sty
- Extrair o LaTeX:
noweave -delay tp1.nw > tp1.tex
- produzir pdf usando o LaTeX:
- pdflatex tp1.tex
(por exemplo)
- bibtex tp1.tex
- pdflatex tp1.tex
(actualizar as citações biblio.)
- Para extrair os módulos C e Lex/Yacc a partir do ficheiro NoWeb fazer:
- Para extrair um módulo, utiliza-se a ferramenta
notangle
do NoWeb, em que a opção -R indica qual o fragmento a extrair. Por exmplo, para extrair o fragmento ArvoreAbst.c para o ficheiro com o mesmo nome fazemos:
notangle -RArvoreAbst.c tp1.nw > ArvoreAbst.c
- No caso da makefile temos de garantir que os "tabs" são considerados:
notangle -t8 -Rmakefile tp1.nw > makefile
|
| (17-03-03) |
Apontamentos sobre Gramáticas Abstractas em C:
- Versão PDF:
[ PDF ]
- Versão em
Literate programming
usando o sistema NoWeb:
[ NoWeb ]
|
| (18-02-03) |
A página da disciplina está no "ar". |
1- Informações Gerais
A cadeira de
Processamento de Linguagens I
é leccionada aos curso de Lincenciatura em Matemática e Ciências da Computação e Licenciatura em Engenharia de Sistemas e Informática, especialização em Tecnologias do Software.
- Engenharia de Sistemas e Informática
- Código: RT 5306O4
- Ano/Semestre: 3º Ano / 2º Semestre
- Escolaridade: 2 Teóricas + 2 Teórico-Práticas
- Matemática e Ciências da Computação
- Código: RT 7006N7
- Ano/Semestre: 3º Ano / 2º Semestre
- Escolaridade: 2 Teóricas + 2 Teórico-Práticas
1.1- Equipa Docente e Horário
- João Saraiva
| Teóricas: |
LESI/MCC |
T1 |
2ª Feira - 11:00-12:00 |
sala CP2-203 |
| |
|
T2 |
5ª Feira - 10:00-11:00 |
sala CP2-103 |
| Teórica-Prática: |
LESI |
TP1 |
3ª Feira - 08:00-10:00 |
sala DI 0.03 |
| Teórica-Prática: |
MCC |
TP2 |
5ª Feira - 14:00-16:00 |
sala DI 1.09 |
| Dúvidas |
LESI/MCC |
|
3ª Feira - 16:00-18:00 |
|
- José João Almeida
| Teórica-Prática: |
MCC |
TP1 |
4ª Feira - 11:00-13:00 |
sala DI 1.09 |
| Teórica-Prática: |
LESI |
TP2 |
5ª Feira - 17:00-19:00 |
sala DI 0.03 |
| Dúvidas |
LESI/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 e no computador. Realização, no computador, extra aulas de trabalhos concretos de aplicação, recorrendo a ferramentas como
Lex/Yacc
e o sistema
LRC
.
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"
- Aprender uma nova metodologia de programação: Programação baseada em Gramática de Atributos e a sua utilização na especificação e desenvolvimento de processadores de linguagens formais.
- Aprender o conceito de ambiente de programação e a sua especificação via gramáticas de atributos
- Relacionar gramáticas de atributos com programação funcional "lazy".
- 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
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 2º semestre
- Exame, realizado na 2ª chamada da época normal, no fim do 2º semestre
- Exame, realizado na época de recurso
A
componente prática
seré formada por 2 trabalhos para realização em grupo, sendo entregues acompanhados de um relatório sucinto e discutidos em frente ao computador: A nota prática será a média aritmética das classificações obtidas nos 2 trabalhos avaliados. A nota final será determinada de acordo com a seguinte fórmula:
NotaFinal = NotaTeorica * 0.50 + (NotaPratica - Delta / 2) * 0.50
sendo
Delta = | NT - NP |
Exige-se
8 valores
como nota mínima em cada parte.
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
- Especificação da Semântica de Linguagens via Atributos
- Programação com Atributos
- Gramáticas de Atributos
- Geração Automática de Analisadores Semânticos a partir de Gramáticas de Atributos
- O Sistema de Gramáticas de Atributos
LRC
Geração de analisadores semânticos na linguagem
C
e
Haskell
- De Gramáticas de Atributos para Programas Circulares "Lazy"
- Ambientes de Programação
- Introdução e Exemplos
- Especificação de Ambientes de Programação via Gramáticas de Atributos
- Especificação do Interface via Gramáticas de Atributos
- Geração de Ambientes de Programação no Sistem
LRC
6- Sumários
7- Software
Neste curso será utilizado o seguinte software:
- Ferramentas Lex/Yacc (ou Flex/Bison)
- Estas ferramentas fazem parte do sistema operative Unix/Linux
- Existem versões para windows incluídas no pacote Cygwin: Um ambiente Unix para Windows.
Cygwin
- O Sistema de Literate Programming NoWeb
- O Gestor de Memória Boehm-Demers-Weiser
- O Sistema Lrc
8- Trabalhos Práticos
- Trabalho Prático nº1:
Ver secção novidades e aviso
- Trabalho Prático nº2:
Bibliografia
- Alfred V. Aho and Ravi Sethi and Jeffrey D. Ullman
Compilers: Principles, Techniques and Tools
Addison-Wesley
1986
- 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
- João Saraiva, Matthijs Kuiper and Pedro Henriques
Tutorial on Language-based Environments
[PS]
2000
- Thomas Reps and Tim Teitelbaum
The Synthesizer Generator Reference Manual
third edition
Edicao
Springer Verlag
1989
- Brian Kernighan and Dennis Ritchie
The C Programming Language
Prentice Hall
1988
|