SVP j'ai besoin d'aide pour écrire un programme en Smalltalk.
Ce programme intervient sur un CDFG (Control and Data Flow Graph), qui est un graphe représentant des programmes écrits sur un outil de synthèse d'architecture reconfigurable.
L'algorithme prend en Input un CDFG G = (N, E, s, e), un treillis complet de valeurs D, les fonctions de transfert tf : E → D → D et la valeur initiale i <appartient à> D de s. Il renvoie en Output les valeurs abstraites v de chaque nœud dans D (v : N → D). L'algorithme est donné ci-après contenant des parties synthétisées de manière algébrique (point fixe, élargisseur et rétrécisseur).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 N do : [ :n | v(n) := nil. ]. v(s) := i. workset := {n | (s ,n) appartient à E}. (workset isEmpty) whileFalse : [ e := workset at : 1. workset removeAt : 1. X := ⊔{tf(e) (v(m)) | e = (m, n) appartient à E}. X := v(n) ∇ X. (X = v(n)) ifTrue : [ v(n) := X. workset add : {m | (n ,m) appartient à E}. ]. ]. (workset isEmpty) whileFalse : [ e := workset at : 1. workset removeAt : 1. X := ⊔{tf(e) (v(m)) | e = (m, n) appartient à E}. X := v(n) ∆ X. (X = v(n)) ifTrue : [ v(n) := X. workset add : {m | (n ,m) appartient à E}. ]. ].
Partager