Departamento de Informática (UM)

Página de Unidade Curricular

DesignaçãoCódigoCursoRegimeRegente

Engenharia Gramatical

14607 [ME78ME7800006544]

Mestrado em Engenharia Informática [MEINF]

S2

Pedro Manuel Rangel Santos Henriques

Objetivos

Programa

1. Gramáticas de Atributos (GA) como instrumento de especificação formal da semântica: introdução do conceito, sua formalização e uso; abordagens ao cálculo dos atributos, concorrência e cálculo incremental; visão da GA como suporte à geração automática de Processadores de Linguagens.
2. Qualidade de Linguagens e Gramáticas, caraterização e interligação.
3. Design-patterns e recurso ao padrão dos 'Visitors' para especificar e desenvolver Processadores de Linguagens.
4. Análise estática e dinâmica de código para compreensão ou deteção de anomalias.
5. Paradigmas para visualização de programas.
6. Transformação de programas.

Bibliografia

P.R. Henriques, "Brincando às Linguagens com rigor: Engenharia Gramatical". UM, 2012.

P.R. Henriques, "Atributos e Modularidade na Especificação de Linguagens Formais''. PhD thesis, UM, 1992.

P. Deransart, M. Jourdan, and B. Lorho, "Attribute grammars: Main results, existing systems and bibliography''. LNCS 341. Springer-Verlag, 1988.

A. van Deursen and P. Klint, "Little languages: Little maintenance?''. Journal of Software Maintenance, 1998.

C.A.R. Hoare, "Hints on programming language design''. Technical Report CS-TR-73-403, Stanford Univ, 1973.

Resultados da aprendizagem

- Desenvolver especificações formais da sintaxe/semântica de linguagens com gramáticas de atributos;
- Analisar e discutir a qualidade de linguagens de programação e de gramáticas;
- Gerar programas (processadores de linguagens) usando ferramentas automáticas baseadas em gramáticas de atributos e na estratégia do padrão designado por ‘visitors’;
- Conceber e implementar estruturas de dados complexas (tabelas de mapeamento, árvores e grafos) para representação intermédia da informação extraída da análise do código;
- Criar representações visuais adequadas à compreensão clara do conhecimento complexo extraído dos programas;
- Desenvolver software como uma tarefa de transformação de programas e/ou especificações em implementações eficientes;
- Desenvolver ferramentas para ajuda à compreensão de código com vista à sua otimização, ou deteção de vulnerabilidades.

Método de avaliação

A avaliação envolve:
um trabalho experimental, a realizar em grupo, com peso 30% ; uma prova teórica individual, com peso 60%; e informação relativa à participação nas aulas, a pesar 10%. Todas as partes são obrigatórias e a média deve ser maior ou igual a 10.

Funcionamento

Turno: T 1; Docente: Pedro Manuel Rangel Santos Henriques; Dep.: DI; Horas: 15.
Turno: TP 1; Docente: Tiago João Fernandes Baptista; Dep.: DI; Horas: 30.

[ Outras UCs do Departamento ]