Engenharia de Linguagens
A necessidade de processar com eficácia linguagens (formais ou naturais)
levou à criação de formalismos para especificação das linguagens e respectivo
tratamento e introduziu na programação alguns conceitos que se revelaram
relevantes e poderosos no sentido de permitir um desenvolvimento rápido e
seguro dos programas responsáveis pelo reconhecimento e transformação das
frases dessas linguagens (os textos-fonte). Desses conceitos destacamos: a
abordagem sintáctico-semântica aos problemas (que também costumamos
designar por
abordagem gramatical); o uso de _árvores de sintaxe
abstractas decoradas com atributos_ para representação interna do
conhecimento;
e a
geração automática, ou síntese, de programas.
Nesta UCE pretende-se ensinar essas bases e transportar os métodos, técnicas
e ferramentas para três campos de aplicação prática mais vastos:
engenharia documental e engenharia Web, para anotar e processar estruturalmente
documentos e distribuí-los, de modo a permitir construir, gerir e usar bibliotecas, arquivos
e museus virtuais;
engenharia de software, fornecendo meios de
compreender e transformar programas, tarefas essas que estão na base da
manutenção de software;
engenharia do conhecimento, fornecendo meios
de explorar documentos (textos em língua natural e documentos anotados) e
extrair deles informação necessária para a sua classificação, sumarização,
tradução, etc.
Coordenação Científica
Módulos
- Engenharia Gramatical?
- Scripting no Processamento de Linguagem Natural?
- Análise e Transformação de Software?
- Processamento Estruturado de Documentos?
Resultados de Aprendizagem
Depois da breve introdução dos vários módulos é fácil concluir o aluno
frequentador desta UCE terá um leque bastante alargado de competências o que
lhe permitirá actuar num série de contextos diversos.
As competências a adquirir ao longo da UCE podem dividir-se em três grupos:
tecnológicas,
específicas e
genéricas.
Competências Tecnológicas
Toda a aprendizagem da Engenharia de Linguagens requer o domínio de um
conjunto alargado de tecnologias. Estas competências devem ser adquiridas
numa fase inicial pois tudo o resto dependerá delas.
Assim, as competências tecnológicas que um aluno deverá adquirir são as
seguintes:
- Modelação de dados estruturados e semiestruturados baseada em gramáticas: Gramáticas Independentes de Contexto, Gramáticas de Atributos, XML Schema e RelaxNG.
- Programação baseada em regras: autómatos reactivos, programação por eventos, programação estratégica (uso do Strafunski).
- Especificação e Processamento de Linguagens de Anotação: XML, XPath e XQuery.
- Utilização de ferramentas de geração de compiladores, dos casos mais simples como o lex/yacc, ou o Halex/Happy, aos mais evoluídos como o SGen ou o LRC, passando pelos intermédios e clássicos como o LISA, CoCO/R, AntLR, PCCTS, Eli.
- Programação funcional com XML/XSLT.
- Programação Web com HTML, JavaScript, CGI Script, PHP, Perl, ou similares.
- Utilização de ferramentas para extracção automática, manipulação e navegação em ontologias, como o Metamorphosis, ou o Omnigator.
- Criação de serviços Web a partir de aplicações locais: SOAP, WSDL, ...
- Utilização de ferramentas para compreensão de programas, como o !CodeSurfer, SHriMP, WARE/WANDA, PBS.
- Utilização de ferramentas de edição especializada como editores estruturados: XMLSpy, Oxygen, Eclipse.
Competências Específicas
No fim da UCE, um aluno deverá ter adquirido as competências específicas que
lhe permitem desempenhar as tarefas chave no processo de desenvolvimento
dentro das áreas científicas características desta unidade:
- Ver a Engenharia de Linguagens como uma área multidisciplinar que junta factores de engenharia, tecnológicos e pedagógicos.
- Compreender a filosofia de desenvolvimento baseada na separação sintáctico-semântica, ou seja, da estrutura/conteúdo do problema, e no uso de uma representação interna do significado para travessia sucessiva a fim de a transformar na solução desejada.
- Compreender o contexto das aplicações e sistemas baseados em regras.
- Modelar um sistema: levantamento dos requisitos, especificação dos requisitos do utilizador usando casos de uso e cenários; especificação dos requisitos da informação; especificação dos atributos de apresentação.
- Especificar a interface.
- Prototipar incrementalmente e iterativamente: programação; integração e teste de módulos; testes de consistência.
- Reflectir, avaliar, explicar e justificar soluções de Engenharia de Linguagens.
Competências Genéricas
Independentemente das áreas científicas específicas de cada UCE, um futuro
mestre em engenharia terá de adquirir competências relacionadas com a
capacidade genérica de
projectar e desenvolver em equipa
sistemas complexos, nomeadamente:
- Planeamento e Gestão de Projectos.
- Trabalho em equipa.
- Reutilização de materiais.
- Pesquisa, relato e apresentação, escrita ou oral, do
processo de desenvolvimento e dos resultados obtidos.
Parcerias
- Instituto Politécnico de Bragança
Áreas Científicas (classificação ACM)
A distribuição dos 30 ECTS da UCE pelas áreas científicas
classificadas no ACM Computing Curricula (1998), é apresentada a seguir:
- Grammars and Other Rewriting Systems (5 ECTS)
ACMCCS98/Theory of Computation/Mathematical logic and formal languages/
Grammars and Other Rewriting Systems/
ACMCCS98/Software/Programming languages/Processors/
- Natural Language Processing (5 ECTS)
ACMCCS98/Computing Methodologies/Artificial intelligence/
Natural Language Processing
- Program transformation (5 ECTS)
ACMCCS98/Computing Methodologies/Artificial intelligence/
Automatic Programming/Program transformation/
- Information interfaces and presentation (5 ECTS)
ACMCCS98/Information Systems/Information interfaces and presentation/
- Document and text processing (5 ECTS)
ACMCCS98/Computing Methodologies/Document and text processing/
Requisitos
Para frequentar esta UCE o aluno deverá ter conhecimentos de programação
(algoritmia e estruturas de dados). As restantes competências irá adquiri-las
ao longo da frequência da UCE.