1 #ifndef COMPILER_DISCARDPARSER_H_INCLUDED 2 #define COMPILER_DISCARDPARSER_H_INCLUDED 3 4 #include "parser.hpp" 5 #include "tokenloc.hpp" 6 7 namespace Compiler 8 { 9 /// \brief Parse a single optional numeric value or string and discard it 10 class DiscardParser : public Parser 11 { 12 enum State 13 { 14 StartState, CommaState, MinusState 15 }; 16 17 State mState; 18 TokenLoc mTokenLoc; 19 20 public: 21 22 DiscardParser (ErrorHandler& errorHandler, const Context& context); 23 24 bool parseInt (int value, const TokenLoc& loc, Scanner& scanner) override; 25 ///< Handle an int token. 26 /// \return fetch another token? 27 28 bool parseFloat (float value, const TokenLoc& loc, Scanner& scanner) override; 29 ///< Handle a float token. 30 /// \return fetch another token? 31 32 bool parseName (const std::string& name, const TokenLoc& loc, 33 Scanner& scanner) override; 34 ///< Handle a name token. 35 /// \return fetch another token? 36 37 bool parseSpecial (int code, const TokenLoc& loc, Scanner& scanner) override; 38 ///< Handle a special character token. 39 /// \return fetch another token? 40 41 void reset() override; 42 ///< Reset parser to clean state. 43 44 /// Returns TokenLoc object for value. If no value has been parsed, the TokenLoc 45 /// object will be default initialised. 46 const TokenLoc& getTokenLoc() const; 47 }; 48 } 49 50 #endif 51