#include #include #include #define EXIT_SUCCESS 0 #define EXIT_WRONGCOMMANDLINE 1 #define EXIT_MEMORY 2 #define EXIT_OPENFILE 3 #define EXIT_WRONGINPUTFORMAT 4 #define EXIT_TAPEEXCEEDED 5 enum _boolean {FALSE = 0, TRUE = 1}; typedef enum _boolean boolean; #define LUNGHEZZA_NOME 80 #define LUNGHEZZA_SIMBOLO 10 #define DIM_NASTRO 1000 typedef char Simbolo[LUNGHEZZA_SIMBOLO]; typedef char Stato[LUNGHEZZA_SIMBOLO]; typedef Stato* InsiemeStato; typedef Simbolo* Alfabeto; typedef Simbolo* VettoreSimboli; enum _mossa {Sinistra = 'S', Destra = 'D'}; typedef enum _mossa Mossa; typedef struct _struct_transizione Transizione; typedef Transizione* FunzioneTransizione; struct _struct_transizione { Stato StatoIn; Simbolo Input; Stato StatoFin; Simbolo Output; Mossa Spostamento; }; typedef struct _struct_TuringMachine TuringMachine; struct _struct_TuringMachine { int NumStati; InsiemeStato Q; Stato StatoIniziale; int NumStatiAccettanti; InsiemeStato A; int CardAlfabetoIngresso; Alfabeto AlfabetoIngresso; Simbolo Blank; int CardAlfabetoLavoro; Alfabeto AlfabetoLavoro; int NumTransizioni; FunzioneTransizione Delta; int DimNastro; VettoreSimboli Nastro; Stato StatoCorrente; int Pos; int NumPassi; }; void LeggeIstruzioni (int argc, char *argv[], char *TuringFile, char *InstanceFile); void CaricaMacchina (char *TuringFile, TuringMachine *TM); void CaricaIstanza (char *InstanceFile, TuringMachine *TM); void SimulaTuringMachine (TuringMachine *TM); void StampaRisultati (TuringMachine *TM); void DistruggeMacchina (TuringMachine *TM); int CercaStato (Stato S, InsiemeStato I, int CardI); int CercaSimbolo (Simbolo S, Alfabeto A, int CardA); int CercaTransizione (Stato StatoIn, Simbolo Input, FunzioneTransizione Delta, int NumTransizioni); void EsegueTransizione (int t, TuringMachine *TM); int main (int argc, char *argv[]) { char TuringFile[LUNGHEZZA_NOME+1]; char InstanceFile[LUNGHEZZA_NOME+1]; TuringMachine TM; // 1) Interpretazione della linea di comando LeggeIstruzioni(argc,argv,TuringFile,InstanceFile); // 2a) Caricamento della macchina di Turing da simulare CaricaMacchina(TuringFile,&TM); // 2b) Caricamento dell'istanza da elaborare CaricaIstanza(InstanceFile,&TM); // 4) Elaborazione SimulaTuringMachine(&TM); // 6) Stampa della risposta e del nastro di lavoro StampaRisultati(&TM); // 7) Deallocazione della macchina di Turing DistruggeMacchina(&TM); return EXIT_SUCCESS; } void LeggeIstruzioni (int argc, char *argv[], char *TuringFile, char *InstanceFile) { } void CaricaMacchina (char *TuringFile, TuringMachine *TM) { } void CaricaIstanza (char *InstanceFile, TuringMachine *TM) { } void SimulaTuringMachine (TuringMachine *TM) { } int CercaStato (Stato S, InsiemeStato I, int CardI) { return 0; } int CercaSimbolo (Simbolo S, Alfabeto A, int CardA) { return 0; } int CercaTransizione (Stato StatoIn, Simbolo Input, FunzioneTransizione Delta, int NumTransizioni) { return 0; } void EsegueTransizione (int t, TuringMachine *TM) { } void StampaRisultati (TuringMachine *TM) { } void DistruggeMacchina (TuringMachine *TM) { }