#ifndef __SCANNER_H #define __SCANNER_H #ifndef INCSTR_H #include #endif #ifndef __STRINGS_H #include #endif // @doc EXTERNAL // @class TScanner | Classe per le lettura e la traduzione dei file // // @base private | ifstream class TScanner : public ifstream // @author:(INTERNAL) Guido { // @access:(INTERNAL) Private Member // @cmember:(INTERNAL) Prossimo token TString _token; // @cmember:(INTERNAL) Chiave del token (prime due lettere) TString _key; // @cmember:(INTERNAL) Buffer utilizzato per la lettura della riga da file TString _tmp; // @cmember:(INTERNAL) Indica se il token e' stato ritornato al file bool _pushed; // @cmember:(INTERNAL) Numero della linea in corso di lettura size_t _line; // @access Public Member public: // @cmember Costruttore TScanner(const char* filename); // @cmember Distruttore virtual ~TScanner(); // @cmember Legge il token dal file e lo ritorna const TString& pop(); // @cmember Ritorna la chiave del token attivo const TString& key() const { return _key; } // @cmember Legge il token dal file e ne ritorna la chiave const TString& popkey() { pop(); return key(); } // @cmember Legge una stringa (la stringa deve essere tra apici) dal file const TString& string(); // @cmember Ritorna la linea letta dal file TString& line(char eol = '\n'); // @cmember Ritorna il contenuto della linea fino al segno di uguale (chiama ) const TString& equal() { return line('='); } // @cmember Legge le coordinate di un rettangolo void rectangle(short& left, short& top, short& right, short& bottom); // @cmember Ritorna un intero letto dal file int integer(); // @cmember Ritorna un double letto dal file double number(); // @cmember Ritorna un operando letto dal file const TString& operand(); // @cmember Cerca il paragrafo specificato e ci si posiziona sopra bool paragraph(const char* name); // @cmember Ritorno TRUE se il file non e' in nessun stato di errore virtual bool ok() const { return good() != 0; } // @cmember Mette nel file l'ultima stringa letta o quella specificata void push(const char* tok = NULL); // @cmember Ritorna il token letto const TString& token() const { return _token; } // @cmember Ritorna il numero di linea corrente size_t linenum() { return _line; } }; #endif // __SCANNER_H