#include <iosfwd>
#include <ostream>
+#include <stdexcept>
#include <string>
namespace loader {
class Tokenizer {
public:
- Tokenizer(std::istream &in) : in(in), isPutback(false) { }
+ explicit Tokenizer(std::istream &in) : in(in), isPutback(false) { }
~Tokenizer() { }
private:
Tokenizer(const Tokenizer &);
COMMA = ',',
BRACKET_OPEN = '[',
BRACKET_CLOSE = ']',
+ PARENTHESIS_OPEN = '(',
+ PARENTHESIS_CLOSE = ')',
NUMBER,
STRING,
KEYWORD_EXPORT,
};
Token() : type(UNKNOWN), number(0) { }
- Token(Type t) : type(t), number(0) { }
+ explicit Token(Type t) : type(t), number(0) { }
Type type;
std::string str;
};
+ class LexerError: public std::runtime_error {
+ public:
+ explicit LexerError(const std::string &msg) : std::runtime_error(msg) { }
+ };
+
bool HasMore();
Token GetNext();
void Putback(const Token &);
return "BRACKET_OPEN";
case Tokenizer::Token::BRACKET_CLOSE:
return "BRACKET_CLOSE";
+ case Tokenizer::Token::PARENTHESIS_OPEN:
+ return "PARENTHESIS_OPEN";
+ case Tokenizer::Token::PARENTHESIS_CLOSE:
+ return "PARENTHESIS_CLOSE";
case Tokenizer::Token::NUMBER:
return "NUMBER";
case Tokenizer::Token::STRING:
}
}
-std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) {
+inline std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) {
out << TokenTypeToString(t);
return out;
}