Sistema de Transformação para a linguagem OO1 Adeline Sousa Gustavo Santos
Relembrando o Objetivo... Definição de um sistema de transformação para a linguagem OO1 Instanciação do “modelo JaTS” Possibilidade de criação de duas linguagens Para escrita de templates Para especificação de transformações
Relembrando a Motivação... Transformações de programas dão suporte a: Refactoring Desenvolvimento formal de software Geração automática de código Obtenção de uma base conceitual para um modelo de sistema de transformação independente de linguagem Tese de Adeline
O modelo de transformação OOTS Arquivo Fonte OO1 Template Fonte OOTS Template Destino OOTS Arquivo OO1 gerado
Metodologia Adotada Unificação dos nós OO1 Construção do parser OOTS Implementação dos nós OOTS Implementação dos Visitors Clonagem, substituição e impressão Reestruturação da árvore sintática etc...
Unificação dos Nós INode SimpleNode Nós OO1
Unificação dos Nós Motivação Interface única para manipulação Atributos comuns Operações comuns Transformação de parte do código com o sistema JaTS
O Parser OOTS Suporte a todas as construções OO1 + construções OOTS Identificadores OOTS ( #Id ) Variáveis FieldDeclarationSet e ProcDeclarationSet Declarações iterativas ( forall ) Declarações condicionais ( #If ) Declarações executáveis ( # # )
Implementação dos Nós OOTS Para cada nova construção no parser, um novo nó na árvore Nós adicionais para suporte a conjuntos do tipo FDS e PDS
Implementação dos Visitors Parte das operações sobre a árvore são realizadas através do padrão Visitor Clonagem Substituição Impressão Geração automática de parte do código
Reestruturação da Árvore Estrutura da árvore inconveniente para realização de matching Optou-se por substituir estrutura hierárquica de declarações de atributos e métodos
Exemplo de Transformação Suportada { classe Conta { int saldo = 0, string numero = “”; proc printSaldo() { write("O saldo atual e':"); write(this.saldo) } ; skip } Arquivo Fonte { classe #NOME_CLASSE { FieldDeclarationSet : #FDS ; ProcDeclarationSet: #PDS } ; skip } Template de Casamento
Exemplo de Transformação Suportada { classe #NOME_CLASSE { int juros = 10, FieldDeclarationSet : #FDS ; proc renderJuros() { this.saldo := this.saldo + this.juros }, ProcDeclarationSet: #PDS } ; skip } Template de Geração { classe Conta { int juros = 10, int saldo = 0, string numero = “”; proc renderJuros() { this.saldo := this.saldo + this.juros }, proc printSaldo() { write("O saldo atual e':"); write(this.saldo) } ; skip } Código Gerado
Demonstração O tão aguardado momento...