(actualizado em 6/12/2006) |
![]() |
A ideia geral de fazer o parsing por agente passa pela construção de agentes autónomos, que são libertados nos símbolos que possivelmente fazem blocos e dar-lhes a autonomia necessária para se reorganizarem. O fluxograma possui os símbolos de decisão (losango) e o símbolo de conexão (circunferência) que sinalizam o inicio e o fim dos blocos do programa. Os restantes símbolos são símbolos de passagem.
O resultado esperado do algoritmo é um conjunto de agentes que sinalizem onde começam e onde terminam os blocos. A partir do momento em que sabemos onde começam e terminam os ciclos a verificação formal do programa passa pela verificação de cada um dos ciclos.
Os agentes têm dois comportamentos distintos: quando estão em adaptação e quando estão em competição:
Quando os agentes estão em adaptação percorrem o fluxo até encontrem um símbolo de inicio/fim de bloco. Quando a atingem param e geram um ou dois filhos (agentes), conforme o numero de fluxos que saem do símbolo, que continuam com o comportamento de adaptação.
O processo começa quando se cria um agente no símbolo "inicio" e termina quando todos os agentes estiverem adaptados.
De todos os agentes que povoam o fluxograma existem alguns que representam ciclos. Estes agentes são promovidos a ciclos e obrigam os agentes vizinhos (pais e filhos) a reorganizar-se de forma a que também eles possam ser promovidos ou são definitivamente eliminados.
O processo termina quando todos os agentes forem promovidos a ciclos, e isto significa que o fluxograma está correcto, ou não existirem mais promoções a fazer e significa que os símbolos dos agentes não promovidos não estão correctamente definidos no algoritmo.
Detecção : Um agente verifica que é um ciclo
enquanto se a figura do pai é a mesma que a sua figura final e esta figura é da
classe Decisor.
Reorganização :O agente tem um irmão que seguir pelo caminho do apontador
falso. O agente desliga-se do pai e faz com que o final do pai seja o final do
seu irmão. O irmão não é mais necessário e é destruído.
Inicial | Final |
![]() |
![]() |
Detecção :Um agente detecta que é um ciclo Faz enquanto se o inicio for um conector, se o fim for um decisor e se o filho que nasceu do apontador verdadeiro terminar na figura que é o seu inicio.
Reorganização : O agente tem de eliminar os filho que nasceu do seu decisor pelo ponteiro da verdade e modificar o final do seu pai para o final do filho que nasceu no lado falso e por fim eliminar também este filho.
Inicial | Final |
![]() |
![]() |
O ciclo Repete Até funciona nos mesmos moldes do ciclo Faz Enquanto com a excepção que o ciclo é feito com a condição falsa, e o seu irmão é o que nasceu da condição verdadeira.
Detecção :Um agente sabe que é uma estrutura de selecção se tiver um irmão gémeo que tenham o mesmo inicio, o mesmo fim, que o inicio seja um decisor e o fim seja um conector.
Reorganização : para fazer uma estrutura de decisão é necessário eliminar o irmão gémeo, e desviar o final do pai paro o final do filho do agente e eliminar o seu filho.
Inicial | Final |
![]() |
![]() |
Inicial | Final |
![]()
|
![]()
|
(C) António Manso / Dezembro 2006