117 lines
3.7 KiB
C++
Executable File
117 lines
3.7 KiB
C++
Executable File
// *******************************
|
|
// *******************************
|
|
#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();
|
|
};
|
|
|