dog.csp 894 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. EMETTEUR ==
  2. message : string; cpt : integer := 0;
  3. alea : integer;
  4. * [ true ->
  5. cpt := cpt + 1;
  6. message := "message " + cpt;
  7. recepteur!message;
  8. sleep(1000);
  9. alea := random (1, 10); /* action aleatoire */
  10. [
  11. alea <= 2 -> recepteur?relance()
  12. []
  13. alea > 2 -> skip
  14. ]
  15. ]
  16. RECEPTEUR ==
  17. message : string; alive : boolean := true;
  18. *[
  19. alive; emetteur?message -> dog!ack(); print (message + "\n")
  20. []
  21. alive; dog?erreur() -> print("erreur\n"); emetteur!relance(); dog!ackErreur ()
  22. ]
  23. DOG ==
  24. delai : integer := 4;
  25. *[
  26. recepteur?ack() -> delai := 4
  27. []
  28. horloge?bip() -> delai := delai -1
  29. []
  30. delai = 0 -> recepteur!erreur(); recepteur?ackErreur(); delai := 4
  31. ]
  32. HORLOGE ==
  33. *[true -> dog!bip();sleep(1000)]
  34. MAIN ==
  35. [
  36. emetteur :: EMETTEUR
  37. ||
  38. recepteur :: RECEPTEUR
  39. ||
  40. dog :: DOG
  41. ||
  42. horloge :: HORLOGE
  43. ]