From 7e2e6ca176afbde66e1f5ae147470fd229da97de Mon Sep 17 00:00:00 2001 From: schodet Date: Wed, 8 Feb 2006 23:02:23 +0000 Subject: - restructuration du parser - création de ConfigParser - amélioration du report d'erreur - passage en 2006 --- i/marvin/src/config/config_parser.hh | 77 ++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 i/marvin/src/config/config_parser.hh (limited to 'i/marvin/src/config/config_parser.hh') diff --git a/i/marvin/src/config/config_parser.hh b/i/marvin/src/config/config_parser.hh new file mode 100644 index 0000000..abbf214 --- /dev/null +++ b/i/marvin/src/config/config_parser.hh @@ -0,0 +1,77 @@ +#ifndef config_parser_hh +#define config_parser_hh +// config_parser.hh +// marvin - programme du robot 2006. {{{ +// +// Copyright (C) 2006 Nicolas Schodet +// +// Robot APB Team/Efrei 2006. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +#include + +class ConfigData; + +/// Structure d'information passée au parser. +class ConfigParser +{ + public: + struct Extra + { + public: + /// Chaîne temporaire utilisée pendant l'analyse lexicale. + std::string tmp; + /// Référence vers le ConfigData qui doit recevoir la configuration. + ConfigData &configData; + /// Référence vers l'instance de ConfigParser. + ConfigParser &configParser; + /// Ligne courante. + int line; + private: + /// Permet de stocker l'erreur de bison. + std::string error_; + /// Indique si error est significatif. + bool errorValid_; + /// Utilise ou non le comptage de lignes. + bool useLine_; + public: + /// Constructeur pour initialiser les références. + Extra (ConfigData &configData_, ConfigParser &configParser_, + bool useLine); + /// Recueille l'erreur de bison. + void error (const std::string &e); + /// Accés réservé pour ConfigParser. + friend class ConfigParser; + }; + private: + /// Référence vers le ConfigData qui doit recevoir la configuration. + ConfigData &configData_; + public: + /// Constructeur. + ConfigParser (ConfigData &configData); + /// Lance le parseur sur un fichier. + void parseFile (const std::string &file); + /// Lance le parseur sur une chaîne. + void parseString (const std::string &s); +}; + +#define YY_EXTRA_TYPE ConfigParser::Extra * + +#endif // config_parser_hh -- cgit v1.2.3