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 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
5 / 40
Programe cu regiştri şi voci
În cadru teoretic, un rv-program (sau program cu regiştri şi voci) constă ı̂n:
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)
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];
13 / 40
Sintaxă
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
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
19 / 40
Sintaxa
ş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ă
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:
25 / 40
Semantica operaţională
26 / 40
Semantica operaţională
27 / 40
Semantica operaţională
28 / 40
Semantica denotaţională
29 / 40
Semantica denotaţională
30 / 40
Exemplu intrare-ieşire
Exemplu: rv-program
Programul MAFactcuintroducând
MAFact
Completăm intrari-iesiri:
instrucţiuni intrare-ieşire astfel:
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];
33 / 40
rv-programe structurate
34 / 40
Limbajul AGAPIAAGAPIA
- sintaxa v0.1: Syntax
36 / 40
rv-programe structurate
39 / 40
Pe săptămâna viitoare!
40 / 40