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 verificadas.
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).
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)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.input(sel2)
...
input(seln)