2 Le SDL de base
2.10 Exemples
task t3 := 0 /*example*/;
FIGURE 2.10.1/Z.100 Exemple de note (SDL/PR)
---
task ’task1’ comment ’example’;
task ’task2’;
---
FIGURE 2.10.2/Z.100 Exemple de commentaire (SDL/PR)
T1007690-93/d03 T3 := 0 /* example */
FIGURE 2.10.3/Z.100
Même exemple que celui de la Figure 2.10.1 en SDL/GR
T1007700-93/d04
’task1’
’task2’
example
FIGURE 2.10.4/Z.100
Même exemple que celui de la Figure 2.10.2 en SDL/GR
system Daemongame;
signal Newgame, Probe, Result, Endgame, Gameid, Win, Lose,
Score (Integer);
channel Gameserver.in
from env to Game
with Newgame, Probe, Result, Endgame;
endchannel Gameserver.in;
channel Gameserver.out
from Game to env
with Gameid, Win, Lose, Score;
endchannel Gameserver.out;
block Game referenced;
endsystem Daemongame;
FIGURE 2.10.5/Z.100
Exemple de spécification de système (SDL/PR)
T1007710-93/d05 1(1) signal
Newgame, Probe, Result, Endgame, Gameid, Win, Lose, Score(Integer);
Game
Newgame, Probe, Result, Endgame
Gameid, Win, Lose, Score Gameserver.in Gameserver.out
FIGURE 2.10.6/Z.100
Exemple de spécification de système (SDL/GR)
system Daemongame
block Game;
signal Gameover(PId);
connect Gameserver.in and R1,R2;
connect Gameserver.out and R3;
signalroute R1 from env to Monitor with Newgame;
signalroute R2 from env to Game with Probe, Result, Endgame;
signalroute R3 from Game to env with Gameid, Win, Lose, Score;
signalroute R4 from Game to Monitor with Gameover;
process Monitor (1,1) referenced;
process Game (0,) referenced;
endblock Game;
FIGURE 2.10.7/Z.100
Exemple de spécification de bloc (SDL/PR)
R4
R1 R2
R3
T1007720-93/d06 1(1) signal
Gameover(PId);
Gameover
Probe, Result, Endgame
Gameserver.in Gameserver.out
FIGURE 2.10.8/Z.100
Exemple de spécification de bloc (SDL/GR)
block Game
Monitor (1,1) Game (0, )
Gameid, Win, Lose, Score Newgame
FIGURE 2.10.8/Z.100...[D06] = 9 CM
process Game (0, ); fpar player Pid;
dcl count Integer := 0 ; /*counter to keep track of score */
start;
output Gameid to player;
nextstate even;
state even;
input none;
nextstate odd;
input Probe;
output Lose to player;
task count:= count-1;
nextstate -;
state odd;
input Probe;
output Win to player;
task count:= count+1;
nextstate -;
input none;
nextstate even;
state even, odd;
input Result;
output Score(count) to player;
nextstate -;
input Endgame;
output Gameover(player);
stop;
endprocess Game;
FIGURE 2.10.9/Z.100
Exemple de spécification de processus (SDL/PR)
T1007730-93/d07
1(1) process Game
fpar player PId
dcl count Integer := 0;
/* counter to keep /* track of score */
even,odd
Result End_
game
Score(count) to player
Gameover (player)
—
Gameid to player
even
none Probe
odd Lose
to player
Probe none count :=
count – 1
Win
to player even —
The hyphen means that the state is not changed
FIGURE 2.10.10/Z.100
Exemple de spécification de processus (SDL/GR)
count :=
count + 1
—
FIGURE 2.10.10/Z.100...[D07] = 17 CM
procedure Check;
fpar in/out x, y Integer;
/* The following signal definitions are assumed:
signal sig1(Boolean), sig2, sig3(Integer,PId); */
dcl sum, index Integer, nice Boolean;
start;
task sum := 0, index := 1;
nextstate idle;
state idle;
input sig1(nice);
decision nice;
(True): task ’Calculate sum’;
output sig3(sum, sender);
return;
(False): nextstate problems;
enddecision;
input sig2;
join 1;
...
endprocedure Check;
FIGURE 2.10.11/Z.100
Exemple de fragment de spécification de procédure (SDL/PR)
1
1(3)
T1007740-93/d08 /* The following signal
definitions are assumed signal sig1(Boolean),
signal sig2, sig3(Integer, PId); */
dcl sum, index Integer, dcl nice Boolean;
procedure check fpar in/out x, y Integer
sum := 0, index := 1
idle
sig1(nice) sig2
nice (True)
(False)
problems ‘Calculate
sum’
sig3 (sum, sender)
FIGURE 2.10.12/Z.100
Exemple de fragment de spécification de procédure (SDL/GR) FIGURE 2.10.12/Z.100...[D08] = 19 CM
/* The following signal definition is assumed:
signal inquire(Integer,Integer,Integer); */
process alfa;
dcl a,b,c Integer;
...
...
input inquire (a,b,c);
call check (a,b);
...
endprocess;
FIGURE 2.10.13/Z.100
Exemple d’appel de procédure dans un fragment de définition de processus (SDL/PR)
T1007750-93/d09 /* The following signal
definition is assumed:
signal
inquire (Integer,Integer, Integer); */
dcl
a,b,c Integer;
inquire (a,b,c)
check (a,b) process alfa
FIGURE 2.10.14/Z.100
Exemple d’appel de procédure dans un fragment de définition de processus (SDL/GR) FIGURE 2.10.14/Z.100...[D09] = 8 CM
Les Figures 2.10.15 à 2.10.20 ci-dessous donnent un exemple d'une définition <process definition> contenant des définitions <service definition> avec les définitions <service definition> correspondantes. Ce processus a le même comportement que le processus donné aux Figures 2.10.9 et 2.10.10.
process Game;
fpar player Pid;
signal Proberes (Integer);
signalroute IR1 from Game_handler to env with Score,Gameid;
signalroute IR2 from Game_handler to env with Gameover;
signalroute IR3 from env to Game_handler with Result,Endgame;
signalroute IR4 from env to Probe_handler with Probe;
signalroute IR6 from Probe_handler to env with Lose,Win;
signalroute IR7 from Probe_handler to Game_handler with Proberes;
connect R2 and IR3,IR4;
connect R3 and IR1,IR6;
connect R4 and IR2;
service Game_handler referenced;
service Probe_handler referenced;
endprocess Game;
FIGURE 2.10.15/Z.100
Exemple de processus (le même que celui de la Figure 2.10.9) décomposé en services (SDL/PR)
T1007760-93/d10 R4
IR2 IR3
IR7
IR6 IR4
R2 R3
IR1
FIGURE 2.10.16/Z.100
Exemple de processus (le même que celui de la Figure 2.10.10) décomposé en services (SDL/GR)
signal Proberes (Integer);
process Game fpar player Pid
Proberes Result, Endgame
Probe_handler Game_handler
Probe Score
Gameid Lose
Win
Gameover
FIGURE 2.10.16/Z.100...[D10] = 9 CM service Game_handler;
/* The service handles a game with actions to start a game, to end a game, to keep track of the score and to communicate the score */
dcl count Integer, /*Counter to keep track of the score*/
a Integer; /* counter increment */
start;
output Subscr;
output Gameid to player;
task count:=0;
nextstate started;
state started;
priority input Proberes(a);
task count:=count+a;
nextstate -;
input Result;
output Score(count) to player;
nextstate -;
input Endgame;
output Gameover;
stop;
endstate started;
endservice Game_handler;
FIGURE 2.10.17/Z.100 Exemple de service (SDL/PR)
1(1)
T1007770-93/d11 service Game_handler
/* The service handles a gamewith actions to start a game, to end a game, to keep track of the score and to communicate the score */
dcl count Integer;
/* Counter to keep track of the score */
dcl a Integer; /* counter incr */
Subscr
Gameid to player
Count := 0
started
Proberes
(a) Result Endgame
Count :=
count + a
Score (count)
to player Gameover
— —
FIGURE 2.10.18/Z.100
Exemple de service (le même que celui de la Figure 2.10.17) (SDL/PR)
FIGURE 2.10.18/Z.100...[D11] = 16 CM
service Probe_handler;
/* The service has actions to register the bumps and to handle probes from the player.
The probe result is sent to the player but also to the service Game_handler */
start;
nextstate even;
state even;
input Probe;
output Lose to player;
output Proberes(-1) to self;
nextstate -;
input none;
nextstate Odd;
endstate even;
state odd;
input none;
nextstate even;
input Probe;
output Win to player;
output Proberes(1) to self;
nextstate -;
endstate Odd;
endservice Bump_handler;
FIGURE 2.10.19/Z.100 Exemple de service (SDL/PR)
T1007780-93/d12 service Probe_handler 1(1)
/* The service has actions to register the bumps and to handle probes from the player.
The probe result is sent to the player but also to the service Game_handler */
even
Probe
Lose to player
none
odd
none
even
even Proberes
(–1) to self
—
Probe
Win to player
Proberes (1) to self
FIGURE 2.10.20/Z.100
Exemple de service (le même que celui de la Figure 2.10.19) (SDL/GR)
FIGURE 2.10.20/Z.100...[D12] = 16.5 CM