C[i:1..n]:: j, pere, file, filsreq1 : 0..n; -- 0 correspond à nil ; file représente la SDD, tandis que filsreq1 représente le fils d'où provient la requête en tête de liste jeton_pris, demandeEM : boolean; -- creation de la structure initale file := 0; [i=1 -> pere, jeton_pris := 0, true []i<>1 -> pere, jeton_pris := 1,false ]; demandeEM := false; *[A[i]?bsc() -> demandeEM := true; [pere<>0 -> C[pere]!req(i); -- i représente la requête (i,]]) []pere=0 -> empiler(i,file); -- on ajoute la requête (i,]]) sur la file de i A[i]!dsc() ] []A[i]?fsc() -> demandeEM := false; depiler(tete,file); -- on dépile la tête de liste [file<>0 -> empiler_depiler_sc(file); -- on retire la tête du chemin d'accès (ici, filsreq1) de tous les chemins qui démarrent par ce site et on empile i de tous les autres chemins C[filsreq1]!jeton(file); jeton_pris, file := false, 0; []file = 0 -> skip ] []C[j:1..n]?req(k) -> [pere=0 -> [demandeEM -> empiler(k,file) []not demandeEM -> jeton_pris := false; fils := depiler(filsreq1,k); -- on retire le récepteur du prochain message, fils de la racine C[fils]!jeton(k); pere := fils ] []pere<>0 -> empiler(i,k); -- on ajoute i dans la requête (k,]i,...,k]) C[pere]!req(k) -- on transmet la nouvelle requête au père ]; []C[j:1..n]?jeton(k) -> pere := 0; [i = demandeur(k) -> jeton_pris := true; A[i]!dsc() []i<>demandeur(k) -> pere := tete_chemin(k); empiler_depiler_sc(k);-- on retire la tête du chemin d'accès de tous les chemins qui démarrent par ce site et on empile i de tous les autres chemins C[pere]!jeton(k) ] ]