// ******************************* // ******************************* #define MANY_MAG_LEV 10 class TMag_livelli { bool _enabled[MANY_MAG_LEV]; int _code_lenght[MANY_MAG_LEV]; TString _name[MANY_MAG_LEV]; TString _picture[MANY_MAG_LEV]; int _last_level; public: int last_level() const {return _last_level;}; // Ritorna il numero di livelli abilitati const bool enabled(int levnum=1); // Ritorna se il livello è abilitato const TString & name(int levnum); // Ritorna il nome (descrizione) di quel livello const TString & picture(int levnum);// Ritorna la stringa di picture per i codici gruppo di quel livello const int code_lenght(int levnum); // Ritorna la lunghezza dei codici gruppo di quel livello void pack_grpcode(TString & pc, const TString &codlev, const int levnum); // Inserisce il codice del gruppo del livello levnum in pc TString unpack_grpcode(const TString & pc, const int levnum); // Estrae il codice del gruppo del livello levnum da pc TMag_livelli(const char *tabname); // costruttore ~TMag_livelli() {}; // distruttore }; // ******************************* // ******************************* #define MAXSIMBOLS 256 #define MAXSTATES 25 class TStateset { unsigned char _container[MAXSTATES]; int _current; public: TStateset & empty(); TStateset & enclose(int e); TStateset & singleton(int e); TStateset & cap(TStateset & s); int get_first() ; int get_next() ; bool is_empty() const; bool is_member(int e) const; TStateset(); ~TStateset() {}; }; struct TAutoma_state { short _transaction[MAXSIMBOLS]; TString16 * _label; bool _final; }; // ******************************* // ******************************* // automa per il riconoscimento di metacaratteri class TR_automa { TAutoma_state st[MAXSTATES]; short _maxstate; protected: TStateset union_of_closures(TStateset &s); bool is_final(int statenum) const; bool is_final(TStateset states) const; TR_automa & set_label(int statenum, const char *label); bool is_state(int statenum); const char *label(int statenum); int label2state(const char * label); void del_trans(int statenum,unsigned char symbol); int trans_to(int statenum,unsigned char symbol); bool _isdeterministic; public: TR_automa & reset_state(int statenum=-1); void add_tran(int statenum,unsigned char symbol,int next);// aggiunge una transizione int add_state(const char * label);// aggiunge uno stato TR_automa & set_final(int statenum,bool v=TRUE); // pone lo stato come finale bool is_deterministic() {return _isdeterministic;}; // bool recognized(const char * s); // tenta di riconoscere la stringa passata TR_automa(TR_automa *a=NULL,bool makedet=FALSE); // duplica un automa (e lo rende deterministico) ~TR_automa(); static void set2label(const TStateset ss,TString16 & label); static void label2set(const TString16 & label,TStateset & ss); }; // ******************************* // ******************************* // riconoscimento di metacaratteri class TMetachar { TR_automa * _au; TString _language; char _metach_mand[10]; char _metach_opz[10]; void set_language(const char * language); // setta l'automa che ricosce il linguaggio passato void add_tran(int statenum,unsigned char symbol,int next);// aggiunge le transizioni all'automa public: const char * language() const; // restituisce la stringa di metacaratteri del linguaggio riconosciuto bool recognized(const char * pattern); bool has_opzchars(const char * pattern); bool has_mandchars(const char * pattern); int maxstrlen(const char * pattern) const; const char *mand_chars() {return _metach_mand;}; const char *opz_chars() {return _metach_opz;}; TMetachar(const char * str); TMetachar(); ~TMetachar(); };