#ifndef INC_PARSER #define INC_PARSER #include "facet.h" #include #include #include namespace MM_PARSER { static void erreur(char *mesg) { printf("ERROR in parser : %s\n",mesg); exit(0); } const int CASE_SENSITIVE=0x0001; const int EOL_TOKEN=0x0010; typedef int Token; const Token NATUREL=1; const Token REEL=2; const Token INCONNU=3; const Token CONST_CHAINE=4; const Token FIN=100; class Lexer { FILE *f; bool endline; // si fin de ligne = token bool sensitive; Token le_token; char la_chaine[50]; float le_float; int le_int; double le_reel; char le_car; bool the_end; int nb_ligne; bool SkipCar(); bool EstDigit(); bool EstSeparateur(); public: Lexer(char *nom,int mode=0); ~Lexer(); void Check(); bool IsEnd(); bool IsEol(); void SkipNaturel(); void SkipNombre(); void SkipToken(); bool IsDigit(); Token &token() {return le_token;} char *Chaine() {return la_chaine;} int Entier() {return le_int;} double Reel() {return le_reel;} void LireLigne(); void PasserEspaceLigne(); void PasserAcco(); inline int NbLigne() {return nb_ligne;} }; class Parser { Lexer lex; protected: std::map mots; public: Parser(char *nom,int mode=0); ~Parser(); Lexer &Lex() {return lex;} virtual void SkipToken(); void Analyse(); int LireEntier(); double LireReel(); Token &token(); }; /**************************************************************/ /* PARSER BRP */ /**************************************************************/ class ParserBRP: public Parser { public: ParserBRP(char *nom) : Parser(nom,EOL_TOKEN) { SkipToken(); }; ~ParserBRP() {}; MObjet *Lire(); void Lire(MObjet *l); virtual void SkipToken() {Parser::SkipToken();} }; }; // namespace MM_PARSER #endif