diff options
Diffstat (limited to 'src/include/recursivedescent.h')
-rw-r--r-- | src/include/recursivedescent.h | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/src/include/recursivedescent.h b/src/include/recursivedescent.h index 1200211..bf1fee4 100644 --- a/src/include/recursivedescent.h +++ b/src/include/recursivedescent.h @@ -9,63 +9,67 @@ #define expectcommand_h_inluded #include "imapparser.h" +#include "session.h" #include <stack> #include <string> namespace Binc { - extern std::stack<int> inputBuffer; - extern int charnr; + class Parser { + std::stack<int> inputBuffer; + int charnr; + Session &session; - int readChar(); - void unReadChar(int c_in); - void unReadChar(const std::string &s_in); + public: + Parser(Session &session) : charnr(0), session(session){}; + Parser(const Parser &) = delete; - namespace Parser { - enum class ParseResult { ACCEPT, REJECT, ERROR, TIMEOUT }; - } + int readChar(); + void unReadChar(int c_in); + void unReadChar(const std::string &s_in); - using ParseResult = Parser::ParseResult; + enum class ParseResult { ACCEPT, REJECT, ERROR, TIMEOUT }; - ParseResult expectTag(std::string &s_in); - ParseResult expectTagChar(int &c_in); - ParseResult expectSPACE(); + ParseResult expectTag(std::string &s_in); + ParseResult expectTagChar(int &c_in); + ParseResult expectSPACE(); - ParseResult expectFlag(std::vector<std::string> &v_in); + ParseResult expectFlag(std::vector<std::string> &v_in); - ParseResult expectListMailbox(std::string &s_in); - ParseResult expectListWildcards(int &c_in); + ParseResult expectListMailbox(std::string &s_in); + ParseResult expectListWildcards(int &c_in); - ParseResult expectDateTime(std::string &s_in); - ParseResult expectTime(std::string &s_in); - ParseResult expectZone(std::string &s_in); + ParseResult expectDateTime(std::string &s_in); + ParseResult expectTime(std::string &s_in); + ParseResult expectZone(std::string &s_in); - ParseResult expectMailbox(std::string &s_in); - ParseResult expectAstring(std::string &s_in); - ParseResult expectAtom(std::string &s_in); - ParseResult expectAtomChar(int &i_in); - ParseResult expectString(std::string &s_in); + ParseResult expectMailbox(std::string &s_in); + ParseResult expectAstring(std::string &s_in); + ParseResult expectAtom(std::string &s_in); + ParseResult expectAtomChar(int &i_in); + ParseResult expectString(std::string &s_in); - ParseResult expectDate(std::string &s_in); + ParseResult expectDate(std::string &s_in); - ParseResult expectNumber(unsigned int &i_in); - ParseResult expectDigit(unsigned int &i_in); - ParseResult expectDigitNZ(unsigned int &i_in); + ParseResult expectNumber(unsigned int &i_in); + ParseResult expectDigit(unsigned int &i_in); + ParseResult expectDigitNZ(unsigned int &i_in); - ParseResult expectLiteral(std::string &s_in); - ParseResult expectQuoted(std::string &s_in); - ParseResult expectQuotedChar(int &c_in); + ParseResult expectLiteral(std::string &s_in); + ParseResult expectQuoted(std::string &s_in); + ParseResult expectQuotedChar(int &c_in); - ParseResult expectSet(SequenceSet &s_in); - ParseResult expectSequenceNum(unsigned int &i_in); - ParseResult expectNZNumber(unsigned int &i_in); + ParseResult expectSet(SequenceSet &s_in); + ParseResult expectSequenceNum(unsigned int &i_in); + ParseResult expectNZNumber(unsigned int &i_in); - ParseResult expectCRLF(); - ParseResult expectCR(); - ParseResult expectLF(); + ParseResult expectCRLF(); + ParseResult expectCR(); + ParseResult expectLF(); - ParseResult expectThisString(const std::string &s_in); + ParseResult expectThisString(const std::string &s_in); + }; } #endif |