| 
		
		|  
  Análise e Transformação de Software  Sumários  31 Maio de 2010 
 Apresentação do Laboratório online GamaSlicer para verificação de componentes Java anotados em JML e realização de Slicing Semântico (specification-based, assertion-based e contract-based): arquitectura, discussão da abordagem e exemplificação.
 Apresentação do sistema integrado para edição,  análise, transformação e slicing de programas em C-- desenvolvido pelo aluno José Luis Freitas, usando a representação intermédia como uma hierarquia de classes discutida na aula anterior.
  24 Maio de 2010 
 Apresentação do sistema genérico para análise, visualização e exploração de documentos anotados em XML, eXVisXML: arquitectura, discussão da abordagem e exemplificação.
 Discussão da resolução do exercício prático da última aula backward slice de um programa em C--: representação intermédia como uma hierarquia de classes.
  17 Maio de 2010 
 Apresentação do sistema genérico para visualização e animação de programas, Alma: arquitectura, discussão da abordagem e demonstração.
 Proposta de exercício prático: backward slice de um programa em C-- 
 Formulação de um exemplo:
Em relação ao programa C-- abaixo
    0 void fun() {
    1   int a, b, flag;
    2   float res;
    3   scanf("%d",&flag);
    4   scanf("%d %d",&a,&b);
    5   if (flag)
    6     { res = a/2; }
    7   else
    8     { res = b/2; }
    9  printf("%f",res);
   10  printf("%f",res++)
   }
Faço o slice em relação aos critérios:
SC1: ( i8, {b} )
SC2: ( i8, {res} )
SC3: ( i9, {res} )
SC4: ( i10,{res} ) 
  03 Maio de 2010 
 Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 3ªfase.
  26 de Abril de 2010 
 Introdução formal ao Slicing: 
 o conceito de Slicing Estático clássico, Backward e Forward.
 
 Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas: 
 System Dependence Graph (SDG) --- construção de exemplos
  19 de Abril de 2010 
 Introdução informal ao Slicing: 
 o papel do Slicing na Análise de Programas -- como instrumento de debug; como instrumento de cálculo incremental.
 
 Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas: 
 Control Flow Graph (CFG); construção de um exemplo.
 Program Dependence Graph (PDG); construção de um exemplo.
 System Dependence Graph (SDG).
  12 de Abril de 2010 
 Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas: 
 FermaT: pelos alunos André Santos e Miguel Regedor --- PDF.
 
 Discussão (à laia de balanço dos trabalhos práticos e estudos anteriores) em torno dos requisitos desejáveis para uma Ferramentas de Transformação de Programas (FTP, ou PTT) tendo sido identificados os seguintes: 
 Existem duas abordagens possíveis que podem ser integradas no mesmo ambiente de transformação: 
 1 - Filtro de texto para pequenas transformações dirigidas ao padrão. Neste caso era importante poder integrar a definição de gramaticas incompletas (fuzzy?) no filtro, tipo:  X  ->   ...  (Decls) ...   2 - Processador de linguagens com a definição da gramática da linguagem do programa que se tenciona transformar. Neste caso, a transformação poderá ocorrer caso a regra seja verificada sintacticamente e também semanticamente (a pensar) e deve ser especificada na forma:  Padrão(regra) -> Acção  Deve haver a possibilidade de integrar transformações pre-definidas (standard?); por exemplo: 
 substituição sistemática de palavras-chave;
 troca de ordem de sub-árvores.
  15 de Março de 2010 
 Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:  
 
 Distribuição de novas tarefas pelos 4 grupos, na sequência das apresentações feitas; desenvolvimento de uma solução para a transformação de C-- nas 3 primeiras ferramentas e procura de uma alternativa para o último caso.
 
 Resolução de exercícios: 
 Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos alunos José Luis Freitas (inserção na escrita) e Daniel Rocha (inserção na árvore).
  08 de Março de 2010 
 Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:  
  01 de Março de 2010 
 Resolução de exercícios: 
 Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
 
 Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos: definição clara dos objectivos a atingir com este estudo (comparação de "filosofias" de trabalho e de capacidades oferecidas); discussão da possibilidade de esrita de um artigo conjunto sobre esta temática, para submissão ao CoRTA2010.
  22 de Fevereiro de 2010 
 Resolução de exercícios: 
 Ficha II -- o 2ª requisito: detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
 
 Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos: 
 Jorge + Daniel: Stratego
 José Luís + Hélder: TXL
 André + Miguel: DMS
 André + Márcio: Meta-Environment/Rascal
  25 de Janeiro de 2010 
 Cont. da Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas": discussão de tipos de transformação; ferramentas.
 
 Introdução à novidade do AnTLR para transformação de programas por Tree Pattern Matching: conceito básico e exemplo.
  18 de Janeiro de 2010 
 Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas".  
 Discussão de tipos de transformação: 
 Translation: nesta categoria incluem-se os seguintes processos - program synthesis, program migration, reverse engineering e program analysis.
 Rephrasing: nesta categoria incluem-se os seguintes processos - Program Normalization, Program Optimization, Program Refactoring, Program Reflection e Software Renovation.
 Discussão dos paradigmas introduzidos pelos alunos Márcio Coelho e André Rocha: 
 Mesmo input, diferentes outputs;
 Diferentes inputs, mesmo outputs;
 Mesmo input, mesmo outputs;
 Diferentes inputs, diferentes outputs.
  11 de Janeiro de 2010 
 Continuação da Resolução da Ficha da aula anterior.
  04 de Janeiro de 2010 
 Resolução de exercícios: 
 Ficha II -- continuação da discussão sobre o 1ª requisito: implementação em AnTLR da construção de uma Tabela de Identificadores para a linguagem C--; análise e discussão das propostas apresentadas por todos os grupos que, de uma forma geral:  
 implementaram a TabId como uma HashMap em Java indexado por uma chave dupla formada pelo Id e pelo seu Scope, recorrendo a um VectorArray para guardar os respectivos atributos; 
 usaram uma Tree-Grammar (GA Abstracta);
 recorreram a atributos herdados para fazer descer na árvore a TabId actual e o Scope;
 recorreram a atributos sintetizados para trazer para a raiz da árvore a nova TabId e as características de cada identificador (de variável, de parâmetro, ou de função) encontrado.
 
 Para continuar a resolver a Ficha II (transformação do código fonte, para reorganizar declarações de variáveis face ao seu uso), foi apreentada a nova, muito recente, funcionalidade do AntLR (3ª estratégia disponível) que permite implementar a transformação usando Tree-Patterns.
  14 de Dezembro de 2009 
 Resolução de exercícios: 
 Ficha II -- continuação da discussão sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, possíveis implementações deste mapping em Java; implementação em AnTLR, possíveis estratégias clássicas (usando apenas 1 GA concreta, ou usando uma Tree-Grammar abstracta com atributos).
  07 de Dezembro de 2009 
 Transformação e manipulação de Programas usando gramáticas de atributos; sistematização das diferentes abordagens possíveis (cálculo durante o parsing e cálculo em fase posterior, sobre a AST).
 
 Resolução de exercícios: 
 Ficha II -- discussão muito profunda e detalhada sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, conceito, atributos a armazenar e estrutura; aproximação conceptual/abstracta e estratégia de implementação em AnTLR.
  30 de Novembro de 2009 
 Transformação e manipulação de Programas usando gramáticas de atributos; implementação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
 GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
 
 Resolução de exercícios: 
 Ficha I -- Discussão/comparação das soluções já desenvolvidas por alguns dos alunos e continuação do trabalho nesse problema.
 Ficha II -- apresentação do enunciado.
  23 de Novembro de 2009 
 Transformação e manipulação de Programas usando gramáticas de atributos; implentação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
 GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
 
 Resolução de exercícios: 
 Ficha I: Conversão de um programa de SQL1 (sem UPDATES) para SQL2 (substituindo sequências de REMOVE/INSERT na mesma chaves por UPDATE).
  16 de Novembro de 2009 
 Classificação das Gramáticas de Atributos e sua relação com o cálculo---*PureS, LAG, OAG*; o impacto das classes no Grafo de Dependências Global e o problema da determinação de uma ordem topológica (e total); as classes e os Geradores de Compiladores (Calculadores de Atributos); manuseamento de gramáticas OAG em AntLR -- as TreeGrammars.
 
 Resolução de exercícios sobre gramáticas de atributos em AnTLR: 
 Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai (conclusão deste exerc+icio da aula anterior). 
 Processar uma Declaração de Variáveis em Pascal (lista de identificadores seguidos do seu tipo) inserindo na Tabela de Identificadores os pares (IdVar? ,IdTipo).
  9 de Novembro de 2009 
 Resolução de exercícios sobre gramáticas de atributos em AnTLR: 
 Processar uma lista de items (números inteiros ou palavras) e calcular a soma dos números encontrados na respectiva lista.           Porém o somatório só deve iniciar-se após surgir a 1ª ocorrência da palavra "agora";          a resolução em AnTLR deste exercício pode ser encontrada aqui: (listaAgora.g).          No fim da aula foi proposta, como trabalho para casa, uma alteração a este exercício em que a palavra "agora" actuasse como "toggle", i. é, começa a adicionar quando aparece a palavra "agora" e deixa de adicionar quando chega ao fim ou aparece de novo a palavra "agora" e assim sucessivamente para as próximas corrências dessa palavra.
 Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai.           Para cada um dos filhos na lista, gerar uma instrução SQL para adionar a uma base de dados um registo para o filho compondo o seu nome próprio com o apelido do pai seguido do apelido da mãe (à espanhola).
  2 de Novembro de 2009 
 Introdução à construção de Árvores de Sintaxe Abstractas (AST, Abstract Syntax Tree) em ANTLR. Construção da      gramática em AnTLR com ouput AST para o exemplo da aula anterior: (declarations.g)
 Introdução à utilização de Tree Grammars em AnTLR. Introdução dos operadores ->, ^ e !
 Construção da respectiva Tree Grammar para o exemplo anterior:      (declarationsAST.g)
 Introdução de atributos, na Tree Grammar, para cálculo da Tabela de Identificadores.
  26 de Outubro de 2009 
 Resolução das alínea f1-4) do Exercício 2 com recurso às Gramáticas de Atributos.
 Discussão com os alunos das diferenças em relação às Gramáticas Tradutoras.
  19 de Outubro de 2009 
 Resolução da alínea f1,2) do Exercício 2 ( a alínea f3) ficou como trabalho de casa e f4) será desenvolvida na próxima aula): 
 criação de uma Gramática Tradutora, juntando Acções Semânticas (com um ou mais atributos sintetisados associados ao LHS) à GIC optimizada escrita pelo Daniel (ver aqui GICexe2) para calcular e imprimir diversos resultados que se podem extrair de frases concretas da linguagem-fonte; 
 exploração de todas as facetas do ambiente AnTLR-Works.
  12 de Outubro de 2009 
 Resolução do Exercício 1 (enunciado descrito nas Fichas Práticas de Engenharia Gramatical). 
 Ficheiro com resolução em AnTLR: black.g
 Resolução das alíneas a), b) e c) do Exercício 2.
  28 de Setembro de 2009 
 A. Apresentação da disciplina 
 I.1 Introdução e Motivação para a área de Análise e Transformação de SW; sua inserção no contexto da Engenharia de Software: 
 noção de análise de código-fonte (outras hipóteses para análise de código intermédio ou máquina);
 avaliação do software analisado -- métricas;
 transformação como meio para melhorar o software avaliado.
 I.2 As quatro grandes componentes envolvidas na disciplina: 
 extracção de informação do código (fase de análise);
 armazenamento da informação extraída;
 visualização (paradigmas/exemplos);
 transformação.
  B. Apresentação dos Temas de Tese paa os alunos do 2ºano do MI/MEI (edic. 2008/09) 
 
 |  
	  |  | 
 
	
	    Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.   Ideas, requests, problems regarding TWiki? Send feedback |  |