STRUTTURA MODULARE Terza versione

Lo sviluppo del modulo IDENT ha portato alla seguente modifica della struttura modulare del programma; tali modifiche riguardano solo la parte interfacce e non la struttura complessiva.
Le interfacce dei moduli 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'*/  
char Get_Char(vod)
/*ritorna il prossimo carattere sul file ingresso.txt,
  avanza la lettura
  se la linea è finita va a capo*/  
void Salta(char c)
/*avanza la lettura sul file ingresso.txt fino a superare 
  la prossima occorenza di c */
void Salta_Blanks(void)
/*avanza la lettura sul file ingresso.txt fino a raggiungere 
  il primo carattere diverso dal ' ' sulla linea corrente,
  altrimenti raggiunge la fine della linea  */
void Print_Char(char c)
/*scrive il carattere c sul file `uscita.txt'*/
REALI_ENORMI (il tipo di dato reali enormi)
typedef char CIFRE[50];
typedef REALE_ENORME struct 
    {   char Segno;
        CIFRE Decimale, Intera;
    };
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 char IDENT[21];

void Leggi_Ident(IDENT id);

void Stampa_Ident(IDENT id);

int Uguali_Ident(IDENT id1, IDENT id2);

void Copia_Ident(IDENT id1, IDENT id2);
/*copia id2 in id1*/
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.*/
  
  
void Ident(ESPRESSIONE esp, IDENT id);

REALE_ENORME Valore(ESPRESSIONE esp);

ESPRESSIONE Parametro_Attuale(ESPRESSIONE esp);
  
void Funzione(ESPRESSIONE esp, IDENT funz);
    
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*/

void Parametro_Formale(IDENT funz, IDENT par)
/*ritorna il parametro formale della funzione funz come registrato in Funzioni,
nel parametro variabile par,
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 */
...