STRUTTURA MODULARE Seconda versione

Lo sviluppo del main ha portato alla seguente modifica della struttura modulare del programma.

Le loro interfacce sono a questo punto:
BASIC_IO (operazioni elementari di I/O)
void A_Capo_Lettura(vod)
/*avanza la lettura sul file ingresso.txt alla riga successiva*/
void A_Capo_Stampa(vod)
/*avanza la scrittura sul file uscita.txt alla riga successiva*/
char Look_Char(vod)
/*ritorna il prossimo carattere sul file ingresso.txt,
  non avanza la lettura
  se la linea è finita ritorna '/0'*/  
void Salta(char c)
/*avanza la lettura sul file ingresso.txt fino a superare 
  la prossima occorenza di c */
void Salta_Blanks(char c)
/*avanza la lettura sul file ingresso.txt fino a raggiungere 
  il primo carattere diverso dal ' ' sulla linea corrente,
  altrimenti raggiunge la fine della linea  */
REALI_ENORMI (il tipo di dato reali enormi)
typedef ... REALE_ENORME
void Stampa_Reale_Enorme(REALE_ENORME re);
REALE_ENORME Leggi_Reale_Enorme(void);
REALE_ENORME Somma(REALE_ENORME re1, REALE_ENORME re2);
REALE_ENORME Prodotto(REALE_ENORME re1, REALE_ENORME re2);
REALE_ENORME Differenza(REALE_ENORME re1, REALE_ENORME re2);
...
IDENT (il tipo di dato identificatori)
typedef ... IDENT
IDENT Leggi_Ident(void);
int Uguali_Ident(IDENT id1, IDENT id2);
...
ESPRESSIONI (il tipo di dato espressioni)
typedef ...  ESPRESSIONE

ESPRESSIONE Leggi_Espressione(void);

int E_Identificatore(ESPRESSIONE esp);

int E_Valore(ESPRESSIONE esp);

int E_Chiamata_Funzione(ESPRESSIONE esp);
    
int E_Applicazione(ESPRESSIONE esp);

/*controllano se un'espressione è rispettivamente un identificatore, 
un valore di tipo reale enorme, una chiamata di funzione o un'applicazione di un operatore.*/
  
  
IDENT Ident(ESPRESSIONE esp);

REALE_ENORME Valore(ESPRESSIONE esp);

ESPRESSIONE Parametro_Attuale(ESPRESSIONE esp);
  
IDENT Funzione(ESPRESSIONE esp);
    
ESPRESSIONE Primo_Arg(ESPRESSIONE esp);
 
ESPRESSIONE Secondo_Arg(ESPRESSIONE esp);

char Operatore(ESPRESSIONE esp);
/*ritornano le varie parti di un'espressione;
tale espressione deve essere del tipo giusto, cioè deve avere tale parte*/

MEMORIA (le memorie per immagazzinare i valori delle costanti e dei parametri delle funzioni)
typedef ...  MEMORIA
const MEMORIA Vuota = ...;

MEMORIA Valori_Costanti = Vuota;
/*variabile globale che contiene i valori delle costanti*/

MEMORIA Modifica(IDENT id, REALE_ENORME re, MEMORIA m)
/*ritorna la memoria ottenuta modificando m in modo che il valore di id  sia re*/

REALE_ENORME Valore_Di(MEMORIA m, IDENT id)
/*ritorna il valore associato ad id in m,
  si assume che ci sia sempre un'associazione per id in m */
...
AMBIENTE (gli ambienti per immagazzinare le definizioni delle funzioni)
typedef ...  AMBIENTE
const AMBIENTE Vuoto = ...;

AMBIENTE Funzioni = Vuoto;
/*variabile globale che contiene le definizioni delle funzioni*/

void Aggiungi_Funzione(IDENT funz, IDENT param, ESPRESSIONE cor)
/*aggiunge a Funzioni la definizione della funzione funz con 
  parametro formale param e corpo cor*/

IDENT Parametro_Formale(IDENT funz)
/*ritorna il parametro formale della funzione funz come registrato in Funzioni,
  si assume che ci sia sempre una definizione per funz in Funzioni */

ESPRESSIONE Corpo(IDENT funz)
/*ritorna il corpo della funzione funz come registrato in Funzioni,
  si assume che ci sia sempre una definizione per funz in Funzioni */
...