Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
QuickBrainFuck - BrainFuck.h

BrainFuck.h

Caricato da: TheDarkJuster
Scarica il programma completo

  1. #ifndef __BRAINFUCK__
  2. #define __BRAINFUCK__
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <malloc.h>
  8. #include <iostream>
  9. #include <vector>
  10. #include <stack>
  11.  
  12. using namespace std;
  13.  
  14. #define NO_ERRORS -1
  15. #define FILE_UNAVAILABLE 0
  16. #define FILE_EMPTY 1
  17. #define NOT_CORRESPONDING 2
  18. #define NOINSTRUCTIONS 3
  19.  
  20. enum Format
  21. {
  22.         Numbers = 0x00, Characters = 0x01
  23. };
  24.  
  25. struct Byte
  26. {
  27.         struct Byte *Next;
  28.         struct Byte *Previous;
  29.         unsigned char Data;
  30. };
  31.  
  32. struct Report
  33. {
  34.         unsigned long opAritmetiche; //numero di istruzioni + e - eseguite
  35.         unsigned long istruzioniCaricate; //numero di istruzioni caricate
  36.         unsigned long byteUtilizzati; //numero di byte utilizzati
  37.         unsigned long istruzioniEseguite; //numero di istruzioni già eseguite
  38.         int ultimoErrore; //ultimo errore riscontrato
  39.         bool terminato; //il programma è gia terminato?
  40. };
  41.  
  42. class BrainFuck
  43. {
  44.         public:
  45.                 BrainFuck(char*, Format); //costruttore di classe. Richiere il percorso di un programma e il formato (unico) per le operazioni di input ed output
  46.                 ~BrainFuck(); //pulisci la memoria allocata per l' esecuzione del programma (elimina dalla memoria i byte utilizzati e le istruzioni caricate)
  47.                 unsigned long Esegui(); //esegue l' intero programma e stampa a video un report
  48.                 bool EseguiIstruzione(); //esegue l' istruzione attuale (si parte dalla prima) e prepara l' esecuzione dell' istruzione successiva
  49.                 struct Report GeneraReport(); //genera un report sullo stato attuale del programma
  50.                
  51.         private:
  52.                 unsigned long numeroIstruzioneAttuale; //istruzione da eseguire
  53.                 unsigned long totaleIstruzioniEseguite; //istruzioni eseguite
  54.                 unsigned long numeroOperazioniAritmetiche; //istruzioni aritmetiche eseguite (incrementi e decrementi)
  55.                 unsigned long numeroIstruzioniCaricate; //numero di istruzioni pervenute all interno del file
  56.                 vector<unsigned short> istruzioni; //istruzioni del programma
  57.                 unsigned long bytesUsati; //numero di byte utilizzati dal programma
  58.                 stack <unsigned long> Cicli; //stack per la gestione degli '[' e ']'
  59.                 struct Byte *Nastro; //il nastro "infinito"
  60.                 bool valido; //validità programma
  61.                 int fileError; //errori relativi al file
  62.                 bool esecuzioneTerminata; //memorizza se l' esecuzione del programma è già stata terminata
  63.                 Format formato; //formato dell' output/input, scpecifica se gli output devono essere mostrati come numero o come carattere
  64. };
  65.  
  66. #endif