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: