Sunteți pe pagina 1din 40

Curs 6: Sisteme interactive cu

regiştri şi voci


2016-2017 Dezvoltarea aplicaţiilor interactive
1 / 40
Cuprins

1 rv-sisteme şi rv-programe

2 Exemplu: funcţia factorial

3 Sintaxa rv-programelor

4 Semantica operaţională

5 Semantica denotaţională

6 rv-programe structurate

2 / 40
rv-sisteme şi rv-programe

3 / 40
rv-sisteme

Un rv-sistem (sau sistem interactiv cu regiştri şi voci) este un FIS


ı̂mbogăţit cu următoarele elemente:
regiştri asociaţi stărilor şi voci asociate claselor, şi
transformări spaţio-temporale asociate acţiunilor din FIS.

Un scenariu (sau calcul) este similar cu un scenariu dintr-un FIS, dar care
are date concrete pentru regiştri şi voci ı̂n jurul fiecărei acţiuni, date care
respectă tranformarea spaţio-temporală asociată acţiunii.
În cele ce urmează ne vom ocupa de clasa rv-sistemelor programabile (cele
ale căror scenarii pot fi descrise cu rv-programe).

4 / 40
Programe cu regiştri

Programele cu regiştri pot calcula toate funcţiile calculabile cu


instrucţiuni de bază simple (”plus 1”, ”minus 1”, ”test la 0”)
x = x + 1 – adună 1 la registrul x
x = x - 1 – scade 1 la registrul x (dacă era 0, rămâne 0)
if x == 0 goto e1 else goto e2 – dacă registrul x este 0 se
trece la instrucţiunea cu eticheta e1, altfel la cea cu eticheta e2
structuri de control elementare formate din instrucţiuni cu goto
etichetate:
e1: x = x + 1 goto e2
e1: x = x - 1 goto e2
e1: if x == 0 goto e2 else goto e3
instrucţiuni de intrare-ieşire

5 / 40
Programe cu regiştri şi voci

În cadru teoretic, un rv-program (sau program cu regiştri şi voci) constă ı̂n:

o mulţime finită de registri şi voci


o listă de instrucţiuni de tipul
(A,a): x = x + 1 goto [B,b]
(A,a): if x == 0 goto [B,b]
else ( x = x - 1 goto [C,c])
unde x este un registru sau voce, iar A,B,C,a,b,c sunt etichete.

Obs: Definiţia este bazată pe o prezentare echivalentă a maşinilor cu


regiştri ı̂n care se combină instrucţiunile ”minus 1” şi ”test la 0”.

6 / 40
Programe cu regiştri şi voci

În practică,
ı̂ntr-un rv-program vom folosi un limbaj de programare ceva mai
avansat, precum nucleul elementar de programare din limbajele
imperative (C, Java);
sintaxa şi semantica limbajului se bazează pe FIS-uri şi pe scenariile
asociate;
vom prezenta sintaxa şi semantica limbajului printr-un exemplu,
folosind funcţia ”factorial”, dar acum extinsă cu o facilitate
interactivă.

7 / 40
Exemplu: funcţia factorial

8 / 40
Funcţia factorial interactivă

Funcţia MAFact:
are ca intrare n (de tip sInt - ı̂ntreg spaţial) şi calculează
f (n) = ((. . . ((1 ∗1 n) ∗2 (n − 1)) ∗3 . . . ∗n−1 2) ∗n 1)

operaţia care se calculează la fiecare pas ∗i este fie ı̂nmulţire, fie


adunare şi se determină folosind variabilele de interacţie m, a (de tip
tBool - booleene temporale) la pasul i:
dacă m este adevărată, atunci se face ı̂nmulţirea, altfel adunarea (cu
condiţia ca a să fie adevărată);

ı̂n fine, ı̂nmultirea este implementată folosind adunări repetate


efectuate ı̂n spaţiu (prin interacţie);
”codul” este prezentat mai jos

9 / 40
Exemplu: rv-program
Exemplu: rv-program
Programul MAFact:
Programul MAFact:
in: A,1; out: C,4
X::
(A,1) n,y : sInt
a,m s,t : tInt;
: if(m == 1){
tBool if(n == 1){
goto [C,4];
}else{
s = n; t = y; n = n-1;
goto [B,3];
}
} elseif(a == 1){
y = y+n; n = n-1; goto
[C,1];
}
Slide 8.9 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu
10 / 40
..Exemplu: rv-program
Exemplu: rv-program
..(programul MAFact, cont.)
Y::
(A,3) n : sInt
t,p : tInt;
t = 0; p = n; goto [D,4];

Z::
(A,4)
goto [A,4];

U::
(B,1)
s,t y : sInt;
: if(s == 0){
tInt y = nill; goto [C,3];
}else{
y = t; s = s-1; goto [B,3];
Slide 8.10 }} CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu

11 / 40
Exemplu: rv-program
..Exemplu: rv-program
..(programul MAFact, cont.)
V::
(D,3) y : sInt
t,p n : sInt;
: if(y != nill){
tInt t = t+y; goto [D,4];
}else{
y = t; n = p; goto [C;1];
}
W::
(C,1)
goto [C,1];

Slide 8.11 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu 12 / 40


Sintaxa rv-programelor

13 / 40
Sintaxă

Sintaxa este asemănătoare cu cea uzuală din limbajele imperative.


Blocul de bază ı̂ntr-un rv-program este modulul.
Un rv-program este o listă de astfel de module.
Explicăm sintaxa folosind primul modul.

14 / 40
Exemplu: rv-program
Exemplu: modul
Programul MAFact:
in: A,1; out: C,4
X::
(A,1) n,y : sInt
a,m s,t : tInt;
: if(m == 1){
tBool if(n == 1){
goto [C,4];
}else{
s = n; t = y; n = n-1;
goto [B,3];
}
} elseif(a == 1){
y = y+n; n = n-1; goto
[C,1];
}
Slide 8.9 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu

15 / 40
Sintaxa

Primul modul are un nume X şi patru zone.


Zona stânga-sus:
aici avem o pereche etichetată (A,1) care specifică coordonatele de
interacţie şi control necesare pentru a aplica modulul;
să notăm ca perechi similare ı̂n zona de cod din dreapta-jos, dar
formatul [B,3] şi sensul sunt diferite.

16 / 40
Sintaxa

Zona dreapta-sus:
aici se declară variabilele de intrare spaţiale;
aceste variabile specifică starea memoriei ı̂nainte de aplicarea
modulului;
pentru a le distinge de celelalte variabile, prefixăm tipul lor cu ”s”;
modulul X are două variabile de intrare de tip ı̂ntreg spaţial, notat
sInt.

17 / 40
Sintaxa

Zona stânga-jos:
este similară cu partea dreaptă-sus, dar declară variabilele temporale
de intrare;
astfel de variabile apar la interfaţa de interacţie a modulelor;
prefixăm tipul acestor variabile cu ”t” (datele au reprezentare
temporală)
modulul X are două variabile de intrare de tip boolean temporal, notat
tBool.

18 / 40
Sintaxa

Zona dreapta-jos:
această zonă conţine corpul modulului, incluzând declaraţii locale de
variabile şi cod, similar cu codul C;
ı̂n modul nu se face distincţie ı̂ntre tipul spaţial sau temporal al
variabilelor, codul utilizându-le liber;
calculul ı̂ntr-un sistem interactiv are două dimensiuni:
una verticală: capturează secvenţa de calcul a firului de execuţie
una orizontală: specifică secvenţa de interacţie ı̂ntre module

ieşirea din modul se face cu o instrucţiune goto.

19 / 40
Sintaxa

Zona dreapta-jos: (cont.)


o instrucţiune ca goto [B,3] specifică următoarele:
datele variabilelor spaţiale din modulul curent se folosesc ı̂ntr-un nou
modul cu eticheta de control 3;
nu se ştie din modulul curent care vor fi datele de interacţie ı̂n noul
modul (ele se află folosind proprietăţile generale ale sistemului
interactiv)

şi similar
datele variabilelor temporale din modulul curent se folosesc la
interfaţa de interacţie a unui modul cu eticheta de interacţie B;
nu se ştie din modulul curent care va fi starea memoriei acolo,
depinzând de proprietăţile generale ale sistemului interactiv.

20 / 40
Semantica operaţională

21 / 40
Semantica operaţională

Definim semantica rv-programelor folosind scenarii.

Exemplu
Variabila de intrare spaţială n = 4 şi interfaţa de interacţie A alimentează m
cu true, deci rezultatul este:
(((1 × 4) × 3) × 2) × 1 = 24

Exemplu
Ca mai sus n = 4, dar acum ı̂n pasul 3 variabila m este false şi a este true,
deci rezultatul este:
(((1 × 4) × 3) + 2) × 1 = 14

22 / 40
Exemplul 1: ..Semantica operationala
Exemplul 1:
.
1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1:
n=4
A: y=1 B: B: B: B: B: C: C: C: C: C: C: C: C:
m=1 X s=4 U s=3 U s=2 U s=1 U s=0 U W W W W W W W
a=0 3: t=1 3: 3: 3: 3: 3: 1: 1: 1: 1: 1: 1: 1:
n=3 y=1 y=1 y=1 y=1 y=nill
A: D: D: D: D: D: C: C: C: C: C: C: C: C:
Y t=0 V t=1 V t=2 V t=3 V t=4 V W W W W W W W
4: p=3 4: 4: 4: 4: 1: 1: 1: 1: 1: 1: 1: 1:
y=4
A: A: A: A: A: A: n=3 B: B: B: B: C: C: C: C:
m=1 Z Z Z Z Z X s=3 U s=2 U s=1 U s=0 U W W W
a=0 4: 4: 4: 4: 4: 3: t=4 3: 3: 3: 3: 1: 1: 1:
n=2 y=4 y=4 y=4 y=nill
A: A: A: A: A: A: D: C: C: C: C:
Z Z Z Z Z Y t=0 V t=4 V t=8 V t=12 V W W W
4: 4: 4: 4: 4: 4: p=2 4: 4: 4: 1: 1: 1: 1:
y=12
A: A: A: A: A: A: A: A: A: A: n=2 B: B: B: C:
m=1 Z Z Z Z Z Z Z Z Z X s=2 U s=1 U s=0 U
a=0 4: 4: 4: 4: 4: 4: 4: 4: 4: 3: t=12 3: 3: 3:
n=1 y=12 y=12 y=nill
A: A: A: A: A: A: A: A: A: A: D: D: D: C:
Z Z Z Z Z Z Z Z Z Y t=0 V t=12 V t=24 V
4: 4: 4: 4: 4: 4: 4: 4: 4: 4: p=1 4: 4: 1:
y=24
A: A: A: A: A: A: A: A: A: A: A: A: A: n=1 C:
m=1 Z Z Z Z Z Z Z Z Z Z Z Z X
a=0 4: 4: 4: 4: 4: 4: 4: 4: 4: 4: 4: 4: 4:

Slide 8.21 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu


23 / 40
..Semantica operationala
Exemplul 2:
Exemplul 2:
.
1: 1: 1: 1: 1: 1: 1: 1: 1: 1:
n=4
A: y=1 B: B: B: B: B: C: C: C: C: C:
m=1 X s=4 U s=3 U s=2 U s=1 U s=0 U W W W W
a=0 3: t=1 3: 3: 3: 3: 3: 1: 1: 1: 1:
n=3 y=1 y=1 y=1 y=1 y=nill
A: D: D: D: D: D: C: C: C: C: C:
Y t=0 V t=1 V t=2 V t=3 V t=4 V W W W W
4: p=3 4: 4: 4: 4: 1: 1: 1: 1: 1:
y=4
A: A: A: A: A: A: n=3 B: B: B: B: C:
m=1 Z Z Z Z Z X s=3 U s=2 U s=1 U s=0 U
a=0 4: 4: 4: 4: 4: 3: t=4 3: 3: 3: 3:
n=2 y=4 y=4 y=4 y=nill
A: A: A: A: A: A: D: C:
Z Z Z Z Z Y t=0 V t=4 V t=8 V t=12 V
4: 4: 4: 4: 4: 4: p=2 4: 4: 4: 1:
y=12
A: A: A: A: A: A: A: A: A: A: n=2 C:
m=0 Z Z Z Z Z Z Z Z Z X
a=1 4: 4: 4: 4: 4: 4: 4: 4: 4: 1:
y=14
A: A: A: A: A: A: A: A: A: A: n=1 C:
m=1 Z Z Z Z Z Z Z Z Z X
a=0 4: 4: 4: 4: 4: 4: 4: 4: 4: 4:

Slide 8.22 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu


24 / 40
Semantica operaţională

Explicaţii privind construcţia scenariilor (folosind Exemplul 2):


Fiecare celulă din grid are o etichetă din {X , Y , Z , U, V , W } care
indică modulul din program folosit ı̂n acea celulă.
Fiecare celulă are date concrete pentru stări ı̂n zonele de sus/jos şi
date concrete pentru interacţie ı̂n zonele stânga-dreapta.
Gridul se construieşte din stânga-sus ı̂n direcţia dreapta-jos
completând noi celule când datele din stânga-sus sunt deja calculate.
O zonă poate conţine informaţii adiţionale, ca s = 2 indicând că ı̂n
acea zonă valuarea lui s devine 2.

25 / 40
Semantica operaţională

Informaţia completă despre starea curentă a unui proces [celulă] se


obţine colectând pe verticală variabilele spaţiale cu ultimele lor valori
actualizate.
Exemplu: Z din prima coloană, jos are n = 3, y = 1.
Similar, informaţia completă privind variabilele temporale se obţine
colectând ultimele valori mergând orizontal spre stânga.
Exemplu: X din coloana a 6-a are m = 1, a = 0.
Prima coloană are o clasă de intrare (aici A) şi tuple particulare de
valori pentru variabilele sale temporale.
Prima linie are o stare iniţiala (aici 1) şi tuple particulare de valori
pentru variabilele sale spaţiale.

26 / 40
Semantica operaţională

Cu cele de mai sus, calculul local al unei celule α constă ı̂n:


1 Se ia un modul β al programului care are ca etichetă de (clasă, stare)
ce apare ı̂n zonele (stânga, sus) ale celulei α.
2 Se execută codul din β folosind valorile concrete din α (stânga, sus)
pentru variabilele temporale şi spaţiale.
3 Dacă execuţia locală ı̂n β se termină cu o instrucţiune goto [Γ, γ],
etichetăm zonele din dreapta (resp. jos) ale lui α cu Γ (resp. γ).
4 Inserăm ı̂n zonele din dreapta (resp. jos) ale lui α valorile variabilelor
temporale (resp. spaţiale), actualizate de β.

27 / 40
Semantica operaţională

Un scenariu parţial (pentru un rv-program) este unul construit cu


regulile de mai sus.
Un scenariu este scenariu complet dacă ı̂n dreapta sunt numai clase
finale, iar jos numai stări finale.

Exemplele 1 şi 2 de mai sus dau scenarii complete pentru programul


MAFact.

28 / 40
Semantica denotaţională

29 / 40
Semantica denotaţională

Semantica denotaţională (sau relaţională) se defineşte folosind semantica


operaţională de mai sus astfel:
Fiecare modul, fiind un program clasic, specifică
R ⊆ (N_m × N⊗m ) × (N_n × N⊗q )
ı̂ntre vocile şi regiştrii de intrare şi cei de ieşire.
Folosind operaţiile de compunere a relaţiilor, aceasta denotaţie locală
se extinde la nivelul scenariilor.
Denotaţia intrare-ieşire a unui rv-program este relaţia intrare-ieşire
dată de scenariile complete asociate programului.
Să notăm că tipul acestor denotaţii nu este unic; de exemplu,
interfaţa temporală a lui MAFact creşte odată cu n.

30 / 40
Exemplu intrare-ieşire
Exemplu: rv-program
Programul MAFactcuintroducând
MAFact
Completăm intrari-iesiri:
instrucţiuni intrare-ieşire astfel:

Noul tip in-out: in: E,5,n,mt[n],at[n]; out: F,C,4,y


Schimbări in modulul X: adăugăm write y ı̂nainte de goto [C,4];
Adăugăm noi module:

X1::
(E,5) n : sInt
mt[n], i : sInt, ms[n],as[n] :
at[n]: sArray of sBool;
tArray read n;
of listen mt[1..n], at[1..n];
tBool ms[1..n] = mt[1..n];
as[1..n] = at[1..n];
i = 1; goto [F,6];

31 / 40
..Exemplu: rv-program
Exemplu intrare-ieşire
..(programul MAFact cu intrări-ieşiri, cont.)
X2::
n,i : sInt, ms[n],as[n] : sArray of
(E,6)
sBool
m,a : tBool;
m = ms[i];
a = as[i];
i = i+1;
if (i > n) then goto [A,4] else goto
[A,6];

X3::
(F,5)
p : n : sInt;
tInt n = p; goto [F,1];

Slide 8.31 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu32 / 40


..Exemplu: rv-program
Exemplu intrare-ieşire
Explicatii:
• operaţiile de intrare-ieşire sunt descrise cu instrucţiunile
read/write pentru datele spaţiale şi listen/speak pentru cele
Explicatii:
temporale;
operaţiile de intrare-ieşire sunt descrise cu instrucţiunile read/write
spre adatele
• pentru restrânge interfaţa
spaţiale temporală,pentru
şi listen/speak colectăm valorile booleene
cele temporale;
m,a ı̂n vectori (cu indicii 1..n, nu 0..n-1 ca ı̂nbooleene
pentru a restrânge interfaţa temporală, colectăm valorile C) şi le as-
m,a ı̂n vectori (cu indicii 1..n) şi le ascultăm la ı̂nceput;
cultăm la ı̂nceput; ulterior, ı̂n program, sunt generate valorile ulterior ı̂n
program sunt generate valorile necesare la fiecare pas şi folosite ca
necesare la fiecare pas şi folosite ca anterior;
anterior.
• cucunoul
noultip,tipdenotaţia
denotaţia programului
programului este este
⟨m[1..n], a[1..n] | n⟩
#→ ⟨ | ((. . . ((1 ∗1 n) ∗2 (n − 1)) ∗3 . . . ∗n−1 2) ∗n 1)⟩
unde∗i∗este
unde i este
× ‘×’
dacădacă = 1 şi=+1dacă
m(i) m(i) şi ‘+’ dacă
m(i) = 0 m(i) ==0 1∧ a(i) = 1,
şi a(i)
iar ∗n nu este ‘+’.
Slide 8.32 CS-52xx / Dezvoltarea Aplicatiilor Interactive, Sem.2 / G Stefanescu

33 / 40
rv-programe structurate

34 / 40
Limbajul AGAPIAAGAPIA
- sintaxa v0.1: Syntax

Syntax of AGAPIA v0.1:


Interfaces Programs
SST ::= nil | sn | sb W ::= null | new x : SST | new x : ST T
| (SST ∪ SST ) | (SST, SST ) | (SST )∗ | x := E | i f (B){W }else{W }
ST ::= (SST ) | W ;W | while(B){W }
| (ST ∪ ST ) | (ST ; ST ) | (ST ; )∗ M ::= module{listen x : ST T }{read x : SST }
ST T ::= nil | tn | tb { W }{speak x : ST T }{write x : SST }
| (ST T ∪ ST T ) | (ST T, ST T ) | (ST T )∗ P ::= null | M | i f (B){P}else{P}
T T ::= (ST T ) | P%P | P#P | P$P
| (T T ∪ T T ) | (T T ; T T ) | (T T ; )∗ | while t(B){P} | while s(B){P}
Expressions | while st(B){P}
V ::= x : ST | x : T T
| V (k) | V.k | V.[k] | V @k | V @[k]
E ::= n | V | E + E | E ∗ E | E − E | E/E
B ::= b | V | B&&B | B||B | !B | E < E

Slide 14/38 High-level srv-programs / Spring, 2015


35 / 40
rv-programe structurate

Exemplu (Specificaţie pentru numere perfecte)


Trei componente:
Cx : citeşte n din nord şi scrie
n_ b n2 c_ (b n2 c − 1)_ . . ._ 2_ 1 la est;

Cy : citeşte n_ b n2 c_ . . ._ 2_ 1 de la vest şi scrie


n_ bφ( n2 c)_ (b n2 c − 1)_ . . ._ φ(2)_ φ(1) la est, unde φ(k) = ”dacă k
divide n atunci k altfel 0”

Cz : citeşte n_ bφ( n2 c)_ (b n2 c − 1)_ . . ._ φ(2)_ φ(1) de la vest şi


scade din primul număr, restul numerelor.

Aceste componente se compun orizontal.


Specificaţia globala de intrare-ieşire: dacă intrarea ı̂n Cx este n, atunci
ieşirea ı̂n Cz este 0 ddacă n este perfect (suma divizorilor săi).

36 / 40
rv-programe structurate

..Srv-programs for perfect numbers


Exemplu (Specificaţie pentru numere perfecte)
Two scenarios
Scenarii: for perfect numbers:
x=6
tx=6 tx=6 x=5
X Y Z
x=3 y=6 z=6 tx=5 tx=5
X Y Z
tx=3 tx=3 x=2 y=5 z=5
U V W
x=2 y=6 z=3 tx=2 tx=0
U V W
tx=2 tx=2 x=1 y=5 z=5
U V W
x=1 y=6 z=1 tx=1 tx=1
U V W
tx=1 tx=1 x=0 y=4 z=4
U V W
x=0 y=6 z=0
(a) (b)
ypes are denoted as ⟨west|north⟩ → ⟨east|south⟩ 37 / 40
..Srv-programs
rv-programe for perfect numbers
structurate
The 1st AGAPIA program Perfect1 (construction by rows):
Exemplu (Specificaţie pentru numere perfecte)
(X # Y # Z) % while t(x>0){U # V # W}
Programul ı̂n AGAPIA Perfect1 (construit pe linii):
Perfect1
Its type is (X # Y # :Z)⟨nil|sn;
% whilenil;t(x
nil⟩> → # V #sn;
⟨nil|sn;
0){U W}sn⟩.
Modules:
Modulele:
X:: module{listen nil;}{read x:sn;}
{tx:tn; tx=x; x=x/2;}{speak tx;}{write x;}
Y:: module{listen tx:tn;}{read nil;}
{y:sn; y=tx;}{speak tx;}{write y;}
Z:: module{listen tx:tn;}{read nil;}
{z:sn; z=tx;}{speak nil;}{write z;}
U:: module{listen nil;}{read x:sn;}
{tx:tn; tx=x; x=x-1;}{speak tx;}{write x;}
V:: module{listen tx:tn;}{read y:sn;}
{if(y%tx != 0) tx=0;}{speak tx;}{write y;}
W:: module{listen tx:tn;}{read z:sn}
{z=z-tx;}{speak nil;}{write z;}
lide 10/38 High-level srv-programs / Spring, 201538 / 40
rv-programe structurate
..Srv-programs for perfect numbers
The 2nd AGAPIA program Perfect2 (construction by columns):
Exemplu (Specificaţie pentru numere perfecte)
(X % while t(x>0){U} % U1)
Programul ı̂n AGAPIA Perfect2 (construit pe coloane):
# (Y % while t(tx>-1){V} % V1)
# (Z % while t(tx>-1){W}
(X % while t(x > 0){U} % % U1)W1)
# (Y % while t(tx > -1){V} % V1)
Its type is Perfect2
# (Z % :while
⟨nil|sn; nil;>nil⟩
t(tx % W1) nil; sn⟩.
→ ⟨nil|nil;
-1){W}
New modules:
Module noi:
U1:: module{listen nil;}{read x:sn;}
{tx:tn; tx=-1;}{speak tx;}{write nil;}
V1:: module{listen tx:tn;}{read y:sn;}
{null;}{speak tx;}{write nil;}
W1:: module{listen tx:tn;}{read z:sn}
{null;}{speak nil;}{write z;}

39 / 40
Pe săptămâna viitoare!

40 / 40

S-ar putea să vă placă și