4.6 Visual # Tool (VHT)
5.2.8 Execu¸c˜ao Repetida de A¸c˜oes (repeat until)
O combinador repeat modela a execu¸c˜ao repetida de uma a¸c˜ao. Sua semˆantica foi discutida na Se¸c˜ao 3.2.1. A tradu¸c˜ao do combinador repeat, com condi¸c˜ao de termina¸c˜ao especificada pela cl´ausula until, ´e ilustrada na Figura 5.10 e formalizada na Regra .. O argumento d, na fun¸c˜ao Υaction, indica a profundidade de aninhamento da ocorrˆencia do
combinador repeat em rela¸c˜ao a uma ocorrˆencia mais externa deste combinador. Caso esta n˜ao exista (o pr´oprio ´e o mais externo), o valor de d ´e 1.
Em ocorrˆencias do combinador repeat, a verifica¸c˜ao da condi¸c˜ao de termina¸c˜ao es- pecificada por meio da cl´ausula until exige a modelagem da caracteriza¸c˜ao da natureza do ´ultimo valor transmitido pelas portas stream referenciadas na condi¸c˜ao. Com essa finalidade, a rede de Petri que modela a semˆantica de um programa # inclui para cada porta desse tipo, identificada por i na discuss˜ao que se segue, um conjunto de lugares Loop Flagsi, satisfazendo a seguinte restri¸c˜ao:
Loop Flagsi= {f lagk| 0 ≤ k ≤ ai}, (.)
onde ai corresponde ao fator de aninhamento da i-´esima porta. Assim, para cada
porta de aninhamento ai, existem ai + 1 lugares, tais quais a presen¸ca de uma marca
caracteriza o recebimento de um valor de cada uma das naturezas poss´ıveis na sua mais recente ativa¸c˜ao. Formalmente, deve ainda ser obedecida a seguinte restri¸c˜ao:
∀i :Pp∈Loop Flagsip = 1 (.)
Ou seja, os lugares em Loop Flagsi podem ser interpretados como sem´aforos di-
vididos modelados com redes de Petri. Faz-se tamb´em necess´ario um conjunto de lu- gares Loop Flagsi, duais e mutuamente exclusivos aos lugares correspondentes no con-
junto Loop Flagsi, os quais ser˜ao tamb´em usados para modelagem de condi¸c˜oes de
uma repeti¸c˜ao. A seguinte restri¸c˜ao caracteriza o conjunto de lugares Loop Flagsi,
relacionando-o com o conjunto Loop Flagsi:
∀i, ∀k, 1 ≤ k ≤ ai: f lagk+ f lagk = 1 | f lagk ∈ Loop Flagsi∧ f lagk ∈ Loop Flagsi (.)
As restri¸c˜oes expressas pelas Equa¸c˜oes . e . s˜ao introduzidas na rede de Petri que modela o programa # pela fun¸c˜ao Υend sync, a qual ser´a definida adiante. Os
pr´oximos par´agrafos descrevem como os lugares em Loop Flagsi s˜ao usados para mod-
elar condi¸c˜oes de termina¸c˜ao em ocorrˆencias do combinador repeat.
O conflito no lugar p?modela a decis˜ao a cerca da finaliza¸c˜ao da repeti¸c˜ao ou execu¸c˜ao de uma nova itera¸c˜ao. Os disparo das transi¸c˜oes tr, tt e te modelam, respectivamente, a
execu¸c˜ao de uma nova itera¸c˜ao, a finaliza¸c˜ao do la¸co e a ocorrˆencia de um erro por falha de sincronia das streams transmitidas, caracterizada pela semˆantica dos delimitadores < e > quando empregados na condi¸c˜ao de termina¸c˜ao. Obviamente, deve-se garantir que o disparo destas seja mutuamente exclusivo.
Seja i uma das portas que aparecem na condi¸c˜ao da repeti¸c˜ao. Para calcular o valor do predicado ap´os uma itera¸c˜ao, foi mostrado na Se¸c˜ao 3.2.1 como caracterizar os valores l´ogicos (falso ou verdadeiro) que devem ser associados a cada porta. Baseado no que foi definido e supondo d o aninhamento da ocorrˆencia de repeat em quest˜ao, o valor verdadeiro pode ser verificado na rede de Petri pela presen¸ca de marcas em todos os lugares f lagk em Loop Flagsi, tais que d ≤ k ≤ n. De acordo com as Equa¸c˜oes . e ., esse estado garante que um valor marcador de final de lista com aninhamento maior
ou igual a d foi transmitido na mais recente ativa¸c˜ao da porta. Por dualidade da nega¸c˜ao, o valor falso pode ser verificado pela ocorrˆencia de uma marca¸c˜ao onde todos os lugares
f lagk, tais que 1 ≤ k ≤ d − 1, possuem marcas.
Na Se¸c˜ao 3.2.1 foi ainda discutido a caracteriza¸c˜ao da condi¸c˜ao para execu¸c˜ao de uma nova itera¸c˜ao (¬C, onde C corresponde a nega¸c˜ao de C asssumindo-se a semˆantica dos delimitadores < e > definida na Equa¸c˜ao .) e para a ocorrˆencia de um erro de sin- croniza¸c˜ao (¬C ∧ C). Estas causam o disparo das transi¸c˜oes tr e te, respectivamente. Por
constru¸c˜ao, tais condi¸c˜oes, bem como a condi¸c˜ao C original, s˜ao mutuamente exclusivas, o que exige o disparo mutuamente exclusivo das transi¸c˜oes tr, tt e te.
5.2.8.1 Habilita¸c˜ao de tt Para 1 ≤ k ≤ m, 1 ≤ j ≤ n
k, d ≤ i ≤ a(i,j), a sub-rede formada pelos lugares pt, pt e pt
(k,j,i) e pelas transi¸c˜oes ttj pode ser usada para verificar o
predicado que caracteriza a condi¸c˜ao de termina¸c˜ao da repeti¸c˜ao (C). Como o predicado encontra-se em sua forma normal disjuntiva (FND), deve-se garantir que pelo menos uma das condi¸c˜oes que constituem as disjun¸c˜oes seja verdadeiro. Isso ´e caracterizado pelo dep´osito de uma marca no lugar pt. O lugar pt evita que mais de uma marca seja
depositada neste lugar, uma vez que a condi¸c˜ao precisa ser testada uma ´unica vez. 5.2.8.2 Habilita¸c˜ao de tr Para 1 ≤ k ≤ m, 1 ≤ j ≤ n
k, 0 ≤ i < d, a sub-rede for-
mada pelos lugares pr, pr e pr
(k,j,i) e pelas transi¸c˜oes trj ´e capaz de verificar o predicado que
caracteriza a condi¸c˜ao de termina¸c˜ao da repeti¸c˜ao (¬C), em sua forma normal disjuntiva, obedecendo o que foi descrito na Se¸c˜ao 3.2.1, em especial no que concerne ao suporte `a semˆantica dos delimitadores < e >. Como o predicado encontra-se em sua forma normal disjuntiva (FND), deve-se garantir que pelo menos uma das condi¸c˜oes que constituem as disjun¸c˜oes seja verdadeiro. Isso ´e caracterizado pelo dep´osito de uma marca no lugar
pr. O lugar pr evita que mais de uma marca seja depositada neste lugar, uma vez que a
condi¸c˜ao precisa ser testada uma ´unica vez.
5.2.8.3 Habilita¸c˜ao de te A condi¸c˜ao de disparo da transi¸c˜ao te surge a partir da
percep¸c˜ao de que ´e suficiente existir pelo menos uma marca em algum lugar f lagk, d ≤
k ≤ n para que, com base na Equa¸c˜ao ., garanta-se que a transi¸c˜ao tf n˜ao seja
habilitada.
Observe que os lugares p(k,j,i)somente ser˜ao mapeados aos lugares em Loop Flags(k,j) quando na aplica¸c˜ao da fun¸c˜ao Υend sync, empregando o artif´ıcio de qualifica¸c˜ao para este
prop´osito. pi pf pf ti f t ti f t pi p1 p3 p2 n n
Υaction(repeat counter (a, n), Π, d) = (P ∪ P+, T ∪ T+, A ∪ A+, ρ+, pi, pf) onde: (P, T, A, ρ, pi, pf) = Υaction(a, Π, d + 1) P+= {pi, pf, p 1, p2, p3} T+= {ti, tf, ti, tf} A+= n (pi, ti), (ti, p1, n), (ti, p2), (p1, ti), (p2, ti), (ti, pi) (pf, tf), (tf, p2), (tf, p3), (p2, tf), (p3, tf, n), (tf, pf) o ρ+(t) = n ρ(t) , se t ∈ T λ , se t ∈ T+ (.)