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