A Inclusão dos Tipos <A NAME=cdtipos> </A>



next up previous contents
Next: Estrutura Geral do Up: O Controlador de Previous: O Interpretador de

A Inclusão dos Tipos  

Como foi dito na secção 5.6, ao nível da especificação os valores dos argumentos são sempre considerados como tokens léxicos, independentemente do seu tipo. Na implementação, no entanto, torna-se necessário controlar a leitura desses valores. Se os tipos básicos (inteiros, strings, etc.) não apresentam problemas, o mesmo já não se pode dizer dos que são definidos à custa dos modelos. A leitura de uma Função Finita ou de um Conjunto não é uma tarefa trivial, existem vários valores a serem lidos e condições que devem ser verificadasgif. Coloca-se, então, o problema de decidir quem/como controlar esse diálogo.

Numa primeira fase pretendeu-se atribuir esta responsabilidade ao Modelo da Apresentação. Se os valores são tokens léxicos, então deverá ser a camada léxica a proceder à sua construção. Tal solução mostrou-se pouco adequada, principalmente por "furar" o esquema de funcionamento já existente, nomeadamente no que diz respeito à leitura concorrente de valores. Digamos que se introduzia uma (grande) singularidade no Modelo da Apresentação.

A ideia seguinte foi colocar o controlo da leitura no Controlador de Diálogo. Assim, quando uma variável é de um tipo definido com recurso a modelos estruturados, o seu tipo léxico é substituído pela indicação do GI que deverá controlar a interacção a ela referente. No Controlador de Diálogo, por sua vez, esse Guião é definido como sendo de um tipo especial e o controlador "desvia" o processamento dos eventos a ele dirigidos para um módulo de tratamento apropriado. Este processo é transparente uma vez que o protocolo de comunicação continua a ser o mesmo.

Este modo de funcionamento permite ter vários métodos de leitura para cada um dos modelos, bastando para tal definir tipos de Guiões e os respectivos módulos de processamento associados. Actualmente estão definidos tipos de Guiões para a leitura de Funções Finitas (FFSYNTH), Relações (RELSYNTH), Listas (LISTSYNTH), Conjuntos (SETSYNTH) e Tuplos (TUPSYNTH). A definição dos módulos de processamento para cada um destes Guiões baseou-se, em parte, na experiência adquirida em [CM92].

Os Guiões do tipo FFSYNTH e RELSYNTH geram um diálogo em que os pares domínio/contradomínio (variáveis dom e ran) são apresentados/lidos um a um, sendo disponibilizados, para além de OK e CANCEL, os comandos NEW (inicializar a vazio), UP (par anterior), DOWN (par seguinte) e DEL (apagar o par actual)gif. Internamente, o valor é representado por quatro listas de valores:

Os Guiões do tipo SETSYNTH e LISTSYNTH são semelhantes aos anteriores mas a variável utilizada para apresentar os valores é elem.

Por último, os Guiões TUPSYNTH geram um diálogo correspondente à expressão

input(sel1) input(sel2) ... input(seln)
com os comandos OK e CANCEL e em que sel1 a seln são os selectores do tuplo. Importa notar que a representação sintática utilizada para os tuplos é uma função finita de nome do selector para valor correspondente.



next up previous contents
Next: Estrutura Geral do Up: O Controlador de Previous: O Interpretador de



Jose Franscisco Creissac Campos
Wed Jan 31 20:30:35 MET 1996