Si considerino programmi consistenti di una sequenza di dichiarazioni di
procedura. Le procedure possono avere parametri tutti di un medesimo unico
tipo. Il corpo di una procedura consiste di una dichiarazione di dati locali
(tutti dell'unico tipo assunto) e di una sequenza di istruzioni che possono
essere lettura di una sequenza di variabili, stampa di una sequenza di
variabili, assegnamento a una variabile di una variabile o di somma di
variabili, chiamata di procedura, while-do controllato dall'uguaglianza
di due variabili. Si suppone che le chiamate siano fatte a procedure dichiarate
prima nel programma e che i parametri siano passati per riferimento. L'ultima
procedura della sequenza è il programma principale. Si vuole uno
schema deterministico discendente che segnali come attributo del programma
se ci sono while-do il cui corpo non modifica l'espressione di controllo
(e che perciò se eseguiti lo sarebbero indefinitamente).
Esempio:
procedure pippo (v,w);
var a;
a := v + w
end;
procedure Main();
var b,c,d,e,f,g;
input c,d,e,f,g;
while f = g
do b := b + e;
call pippo (f,g) od;
output b
end
Si vuole uno schema deterministico discendente che segnali come attributo
del programma se ci sono while-do il cui corpo non modifica l'espressione
di controllo (e che perciò se eseguiti lo sarebbero indefinitamente).
[impegnativo]
Si vuole uno schema deterministico ascendente che associ ad ogni procedura
la lista delle coppie <nome, pars> delle procedure, e associata lista
dei parametri, che hanno questa procedura nel proprio "scope", ovvero la
cui dichiarazione precede questa procedura. [semplice]