Engenharia Linguagens

Engenharia de Linguagens

Análise e Transformação de Software

Fichas Práticas

Ficha I

Com a intenção de levar os alunos a fazer um exercício de transformação de SW que os obrigue a pensar no problema, nas fases, nas estratégias e nas ferramentas -- percebendo a necessidade de fazer a análise sintatica e semantica, de construir uma representação intermédia (RI), tipo ASD+TabDefs, e de criar uma Base de Regras de Transformação e um Sistema de Reescrita de ASDs para facilitar a especificação e sistematizar a implementação -- pretende-se que crie uma ferramenta para fazer o upgrade de programas escritos em SQL1 para SQL2.

A questão está que em SQL1 não existe a instrução UPDATE TABLE para alterar um ou mais campos não-chave de um registo. Isso leva a que a actualização é sempre feita à custa de uma remoção (REMOVE TABLE T WHERE chv="X") seguida de uma inserção (INSERT INTO TABLE T (chv="X", a1=...) ).

O upgrader a implementar deve detectar os pares (REMOVE,INSERT) e substituir por um UPDATE.

Sistematize a implemetação da sua ferramenta de modo a poder gerar automaticamente o máximo de módulos e a poder reaproveitar essas componentes para exercícios análogos. A sua implementação deve ser, sucinta e legível.

  • Link útil sobre construção de árvores usando o ANTLR: Tree Construction
  • Download do ANTLR (linha de comandos): ANTLR 3
  • Configurar CLASSPATH para permitir a invocação via linha de comandos (Windows): set CLASSPATH = %CLASSPATH%;pathANTLR;pathST; onde a pathANTLR/pathST é a respectiva path para o ANTLR/StringTemplate (.jar) para onde descomprimiram a pasta.
  • Exemplo para testar as Tree grammars: Expr
  • Exemplo para testar o módulo StringTemplate: Exemplo simples de uma atribuição. (em Windows executar o comando "compile")

Ficha II

Com a intenção de levar os alunos a sedimentar os conhecimentos base sobre análise e transformação de SW e a reutilizar a plataforma desenvolvida para resolução da Ficha I, pretende-se que crie uma ferramenta para fazer o upgrade de programas escritos em num linguagem orientada aos objectos LOO1 após a actualização de uma classe que presta serviços básicos às restantes classes da aplicação.

A questão está que em a nova versão da classe de serviços SUPORTE() introduziu um método designado por setall() que permite actualizar todos os N atributos da classe, dispensando a invocação sequencial dos métodos setAi() para actualização individual dos N atributos.

O upgrader a implementar deve detectar essa sequência de invocações individuais e substituir por uma só invocação ao novo método setall().

A sua implementação deve ser, sucinta e legível e deve reaproveitar ao máximo a bancada construída nas aulas.

Ficha III

Partindo de uma versão "light" da gramática do C, pretende-se que os alunos construam para um dado programa de entrada:
  • Tabela de identificadores;
  • Data Dependence Graph (DDG) usando a técnica de Single Static Assignment (SSA)
  • Control Flow Graph (CFG)
  • Extra: Program Dependence Graph (PDG).

Material útil:

  Attachment Action Size Date Who Comment
pdf codeAnalysisSlicingATS.pdf props, move 1229.0 K 03 Jul 2008 - 23:20 DanielaCruz Capítulo de "code analysis" e "slicing"
r11 - 03 Jul 2008 - 23:20:59 - DanielaCruz
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Syndicate this site RSSATOM