Processamento de Linguagens
(Opção do MI / CEI)
Ano Lectivo: 05/06 (2º semestre)
Departamento de Informática / Escola de Engenharia
Universidade do Minho
AVISOS
Apresentação
-
Cursos a que é leccionada:
- Mestrado e Curso de Especialização em Informática -- 1º ano
-
Escolaridade:
- 2 + 0 + 0
-
Responsável:
- Pedro Rangel Henriques
-
Equipe Docente:
- Pedro Rangel Henriques [prh@di.uminho.pt] (1ºMódulo)
- João Alexandre Saraiva [jas@di.uminho.pt] (2ºMódulo)
- José João Dias de Almeida [jj@di.uminho.pt] (3ºMódulo)
- José Carlos Ramalho [jcr@di.uminho.pt] (3ºMódulo)
-
Motivação:
-
O uso de linguagens de programação ou de comandos é a base em que assenta toda a
Comunicação Humano/Computador, ou seja, é o suporte de toda a actividade do Programador. Mas usar linguagens variadas e de diferentes níveis de abstracção na interacção com uma máquina que só entende uma linguagem primitiva (o código-máquina), requer que se desenvolvam tradutores entre essas linguagens. Tais programas, ditos compiladores ou processadores de linguagens (para se ser mais genérico), são complexos e sujeitos a apertados requisitos de alta performance.
Esta disciplina opcional visa precisamente clarificar todos estes conceitos(sobre linguagens, gramáticas e seus reconhecedores/tradutores) de modo a habilitar os alunos a serem capazes de produzir (automaticamente) processadores para as novas linguagens de que tenham necessidade. Ao fazê-lo, pretende-se, ensinar técnicas de programação e ferramentas que possam ser úteis em outras áreas, nomeadamente no processamento de língua natural, na manipulação (extracção de conhecimento) de textos e no tratamento de documentos. Em particular, falar-se-á ainda da estruturação de documentos com linguagens de anotação (como o XML) e na sua transformação automática (recorrendo a XSL).
-
Estrutura de Funcionamento:
-
Curso teórico-prático.
Exposição da matéria fundamental
---motivação, conceitos, definições, métodos e justificações---
completada com a resolução de exercícios de consolidação (especificação e implementação), no quadro e no computador.
-
Objectivos:
-
Os objectivos fundamentais deste curso são:
-
Rever/introduzir a noção de linguagem formal e caracterizar o conceito
de processamento de linguagens, estabelecendo os objectivos, as
tarefas dum processador, as exigências que lhe são impostas e as técnicas de
desenvolvimento (face às restrições e à complexidade do problema).
-
Rever/introduzir o conceito de gramática como formalismo para especificação
da sintaxe e da semântica das linguagens e enfatizar o seu
papel no desenvolvimento de Processadores de Linguagens (PL's),
estudando a possibilidade de derivar dela automaticamente os analisadores/tradutores.
-
Clarificar a importância e diferenças entre os métodos mais comuns para desenvolver PL:
a Tradução Dirigida pela Sintaxe (TDS) e a
Tradução Dirigida pela Semântica (TDSem).
-
Introduzir o conceito de engenharia gramatical como um estilo de programação baseado na noção de
gramática de atributos e em toda a tecnologia associada.
-
Introduzir o papel das linguagens de scripting no processamento de documentos com base no reconhecimento
de padrões; a importância das Expressões Regulares; Sistemas de Reescrita Textual.
-
Apresentar e discutir o conceito Linguagens de Domínio Específico (Domains Specific Languages).
-
Introduzir a noção de documento não-estruturado, semi-estruturado e estruturado,
bem como a noção de anotação.
-
Introduzir a linguagem XML como linguagem de anotação para estruturação de documentos,
bem como a linguagem XSL para o seu procesamento estrutural.
A tónica fundamental deste curso será posta na ampla e detalhada caracterização desta área de trabalho,
procurando evidenciar problemas e soluções, indicando o que está bem estabelecido e quais são as
principais linhas de investigação ainda em aberto.
Avaliação
-
Critério:
-
A Avaliação tem apenas uma componente teórico-prática ---dissertação sobre
alguns tópicos desenvolvidos ao longo do semestre--- de acordo com o carácter do curso.
A nota final, na escala de 0 a 20 cf. a regulamentação em vigor,
será obtida através da realização de 3 provas escritas parciais, propostas ao longo do
semestre (avaliação contínua) e nesse caso será a soma das 3 notas, ou
então através da realização dum exame escrito final.
Conteúdo Programático
-
Programa detalhado:
-
Módulo I: Processamento de Linguagens - Ontem, Hoje e Amanhã:
- I.1 Apresentação e Caracterização da área de Processamento de Linguagens:
Conceitos básicos; assuntos envolvidos; evolução histórica e estado da arte; temas de investigação.
- I.2 Gramáticas.
- I.3 Geração automática de Programas.
- I.4 Programação Gramatical: o princípio.
-
Módulo II. Gramáticas de Atributos:
- II.1 Gramáticas de Atributos na Análise, Transformação, Interpretação e Visualização de Programas.
- II.2 Apresentação de um sistema para geração de processadores de linguagens baseado em GAs
-
Módulo III. Processamento de Linguagens & Scripting:
- III.1 Programação orientada às Expressões Regulares -- implementação de Sistemas de Reescrita textual.
- III.2 Domain Specific Languages: caracterização e formas de abordar o problema.
-
Módulo IV. Processamento Estruturado de Documentos:
- IV.1 Noção de Documento Semi-Estruturado e de Linguagens de Anotação
- IV.2 Introdução ao XML.
- IV.3 Introdução ao XSL.
- IV.3 Bibiotecas e Arquivos digitais.
Bibliografia
-
Material bibliográfico proposto para apoio ao curso:
- 1. J. A. Saraiva, "Especificação e Processamento de Linguagens", versão 1.0, Textos Pedagógicos, Univ. do Minho, 1995
- 2. R. G. Crespo, "Processadores de Linguagens: da concepção à implementação", IST-Press, 1998
- 3. J.J. Almeida & J.B. Barros, "Linguagens", Notas Pedagógicas, Univ. do Minho, 1990
- 4. J.J. Almeida & F.J. Ferreira, "YACC", Notas Pedagógicas, Univ. do Minho, 1991
- 5. Aho & Sethi & Ullman, "Compiler Principles, Techniques and Tools", Addison-Wesley, 1986
- 6. Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992
- 7. Waite & Carter, "An Introduction to Compiler Construction", HarperCollin College Publishers, 1993
- 8.Andrew W. Appel, "Modern Compiler Implementation in Java", Cambridge University Press, 1997
- 9. Andrew W. Appel, "Modern Compiler Implementation in C", Cambridge University Press, 1997
- 10. Andrew W. Appel, "Modern Compiler Implementation in ML", Cambridge University Press, 1997
- 11.M353 Programming and Programming Languages, "Unit 13: Compiling -- volume I", The Open University, 1994
- 12. M353 Programming and Programming Languages, "Unit 14: Compiling -- volume II", The Open University, 1994
- 13. M353 Programming and Programming Languages, "Unit 15: Compiling -- volume III", The Open University, 1994
- 14. B. Teufel & S. Schmidt & T. Teufel, "C2 Compiler Concepts"}, Springer-Verlag, 1993
- 15. R. Hunter, "Compiladores: sua concepção e programação em Pascal", Editorial Presença, Colecção Sistemas, 1986
- 16. J.R. Levine & T. Mason & D. Brown, "Lex & Yacc", Ed. Dale Dougherty, O'Reilly & Associates Inc., 1992
- 17. Manuais das ferramentas flex e yacc
- 18. Manuais da ferramenta LRC
Notas Pedagógicas e Material de Apoio Diverso
De momento e para além do material bibliográfico recomendado, encontram-se disponíveis
os seguintes elementos complementares de apoio:
Avisos Importantes
- (2006.05.15)
- Os sumários do 3º Módulo já estão acessíveis e serão actualizados semanalmente.
author: prh@di.uminho.pt;
Last modified: 14 de Maio de 2006