Engenharia de Linguagens

Engenharia de Linguagens (2009/10)

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

  • 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)


  Attachment Action Size Date Who Comment
else declarations.g props, move 0.5 K 05 Nov 2009 - 00:08 DanielaCruz  
else declarationsAST.g props, move 0.3 K 05 Nov 2009 - 00:08 DanielaCruz  
r36 - 27 May 2011 - 21:52:54 - PedroRangelHenriques
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