Token.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <sstream>
  2. #include "tokenizer/Token.h"
  3. Token::Token(TokenType tt, unsigned int line, const std::string& text, double number) :
  4. type(tt), line(line), text(text), number(number)
  5. {
  6. }
  7. Token::Token(TokenType tt, unsigned int line) : Token(tt, line, "", 0)
  8. {
  9. }
  10. Token::Token(TokenType tt, unsigned int line, double number) : Token(tt, line, "", number)
  11. {
  12. }
  13. Token::Token(TokenType tt, unsigned int line, const std::string& text) : Token(tt, line, text, 0)
  14. {
  15. }
  16. TokenType Token::getType() const
  17. {
  18. return type;
  19. }
  20. int Token::getLine() const
  21. {
  22. return line;
  23. }
  24. std::string Token::toString() const
  25. {
  26. std::stringstream ss;
  27. ss << '(';
  28. ss << line;
  29. ss << ", ";
  30. ss << TokenTypeUtils::getEnumName(type);
  31. if(type == TokenType::LITERAL || type == TokenType::STRING || type == TokenType::LABEL)
  32. {
  33. ss << ", \"";
  34. ss << text;
  35. ss << "\"";
  36. }
  37. else if(type == TokenType::NUMBER)
  38. {
  39. ss << ", ";
  40. char buffer[20];
  41. snprintf(buffer, 20, (number == (long) number) ? "%lg.0" : "%lg", number);
  42. ss << buffer;
  43. }
  44. ss << ')';
  45. return ss.str();
  46. }