• Nenhum resultado encontrado

Aqui descrevemos alguns trabalhos envolvendo defini¸c˜oes de sistemas de tipos de lingua- gens formais e projetos de verificadores de tipos para tais linguagens.

A defini¸c˜ao formal do sistema de tipos de Z ´e encontrada em [61, 72], onde s˜ao definidos os ambientes de se¸c˜ao e de tipos, e s˜ao listadas todas as regras de inferˆencia de

tipos de Z. Em [72] ´e apresentada a defini¸c˜ao de um padr˜ao ISO para Z. Isto envolve n˜ao apenas a defini¸c˜ao do sistema de tipos da linguagem, mas engloba tamb´em a defini¸c˜ao da sua sintaxe concreta, sintaxe anotada e semˆantica. Como j´a citamos, a defini¸c˜ao formal do sistema de tipos de Circus foi inteiramente baseada na defini¸c˜ao padr˜ao do sistema de tipos de Z. O formato das regras ´e bem semelhante, sendo que optamos por definir algumas premissas das regras atrav´es de aplica¸c˜oes de fun¸c˜oes definidas, e isto simplifica o entendimento de muitas regras.

Uma implementa¸c˜ao do verificador de tipos de Z, que segue a defini¸c˜ao padr˜ao do seu sistema de tipos, ´e proposto em [37, 39]. Trata-se do projeto de implementa¸c˜ao do verifi- cador de tipos de Z do CZT, o qual utilizamos como base para constru¸c˜ao do verificador de tipos de Circus. J´a em [29] ´e definido um verificador de tipos para Z, chamado ZTC, que determina se uma especifica¸c˜ao Z est´a sintaticamente coerente e corretamente tipada. Em [48], ´e apresentado um algoritmo para verifica¸c˜ao de tipos de especifica¸c˜oes Z e ´e dada uma breve introdu¸c˜ao para implementa¸c˜ao de um verificador de tipos para a linguagem. No entanto, tanto esta proposta de constru¸c˜ao de verificador, quanto a ferramenta ZTC, n˜ao implementam a defini¸c˜ao formal do sistema de tipos de Z de acordo com o padr˜ao ISO. O trabalho apresentado em [64] prop˜oe o desenvolvimento de um verificador de tipos incremental e polim´orfico para Z, com o objetivo de evitar a verifica¸c˜ao completa de um especifica¸c˜ao Z quando apenas algumas partes s˜ao modificadas. O conceito de verifica¸c˜ao de tipos incremental ´e apresentado, alguns problemas da verifica¸c˜ao incremental para Z s˜ao apontados, e uma proposta de algoritmo para o verificador incremental ´e descrita. Diferentemente deste, o verificador de tipos de Circus n˜ao permite a verifica¸c˜ao incre- mental (ou parcial) de especifica¸c˜oes ou programas. Entretanto, conforme citamos na Se¸c˜ao 5, j´a foi sinalizada a necessidade de tal recurso para melhorar o desempenho do nosso verificador em algumas situa¸c˜oes.

O trabalho apresentado em [32] tem por objetivo equipar CSP com um sistema de tipos de segunda ordem para tornar a linguagem uma base para a modelagem formal da programa¸c˜ao orientada a objetos distribu´ıda e concorrente. Um sistema de tipos ´e de se- gunda ordem quando inclui quantificadores universais e existenciais para modelar fun¸c˜oes gen´ericas, tipos de dados abstratos e subtipos [9]. O trabalho define as regras de tipos apenas para algumas estruturas sint´aticas de CSP e regras para subtipos. Diferentemente do sistema de tipos que propomos para Circus, este trabalho foca no c´alculo de processos, n˜ao sendo definidas regras, por exemplo, para declara¸c˜ao de canais. Adicionalmente, n˜ao existe a no¸c˜ao de enriquecimento de ambiente. Desta forma, em c?v → p, n˜ao ´e explicitado nas regras de tipos de CSP que o processo p tem o seu ambiente enriquecido com a vari´avel v , podendo us´a-la internamente na defini¸c˜ao do processo. E, no caso da comunica¸c˜ao c!e, a regra de tipos definida em CSP n˜ao requer que o tipo da express˜ao e corresponda ao tipo do canal c. O sistema de tipos proposto constitui, portanto, um primeiro passo para a formaliza¸c˜ao do sistema de tipos de CSP. At´e ent˜ao desconhecemos trabalhos que apresentam uma defini¸c˜ao formal completa para um sistema de tipos de CSP.

Em [22], ´e apresentado um algoritmo para verifica¸c˜ao de tipos de CSP que identifica tipos polim´orficos. Este verificador n˜ao implementa as regras de tipos de CSP definidas em [32]. J´a a Formal Systems (Europe) Limited desenvolveu e disponibiliza um verificador

de tipos para CSP1. No entanto, nenhuma literatura sobre este trabalho foi publicada.

Uma defini¸c˜ao das regras de inferˆencia de tipos de Object-Z ´e encontrada em [53]. J´a em [30], ´e apresentado um verificador de tipos para a linguagem. S˜ao descritas as implementa¸c˜oes do ambiente de tipos, das tabelas de s´ımbolos e das express˜oes, classes e predicados de Object-Z. A ferramenta suporta polimorfismo e disponibiliza mensagens precisas dos erros detectados. Entretanto, nenhuma rela¸c˜ao ´e feita entre este verificador e as regras de inferˆencia apresentada em [53]. Diferentemente do verificador de tipos de Circus, este verificador de Object-Z cancela a verifica¸c˜ao quando o primeiro erro ´e detectado. Na implementa¸c˜ao do verificador de tipos de Circus optamos pela mesma estrat´egia do CZT de continuar a verifica¸c˜ao mesmo quando erros s˜ao detectados e, ao final, disponibilizar todos os erros encontrados.

Uma proposta de extens˜ao das regras de inferˆencia de Object-Z para suportar os construtores adicionais de TCOZ ´e descrita em [14]. Neste trabalho tamb´em ´e descrito o desenvolvimento de um verificador de tipos para TCOZ. O verificador de tipos desen- volvido analisa especifica¸c˜oes no formato XML. Assim como o verificador de tipos de Circus, este verificador de tipos de TCOZ foi projetado para suportar modularidade e reusabilidade, e tamb´em foi implementado em Java.

O projeto do CZT tamb´em j´a disponibiliza vers˜oes iniciais de verificadores de tipos para Object-Z e TCOZ. Da mesma forma que o verificador de tipos de Circus, estes tamb´em est˜ao sendo desenvolvidos tendo como base o verificador de tipos de Z do CZT. O sistema de tipos do m´etodo B ´e apresentado em [31], onde s˜ao listadas as regras de tipos da linguagem e explicados os algoritmos de verifica¸c˜ao de tipos. J´a em [65], ´e pro- posta uma plataforma experimental para o m´etodo B. Dentre as ferramentas dispon´ıveis nesta plataforma, encontra-se um verificador de tipos para B. Uma breve descri¸c˜ao do verificador de tipos da linguagem ´e apresentada, mas nenhuma regra de tipos ´e definida e nenhuma rela¸c˜ao com as regras listadas em [31] ´e realizada.