Analisi Statica

Esercizio 6

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


 
  1. 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]
  2. 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]

 
 
  
Ultimo aggiornamento 3 Maggio 1999