Advertisement
Guest User

Untitled

a guest
Sep 4th, 2012
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. enum TokenType {
  2. Plus,
  3. Minus,
  4. Multiply,
  5. Divide,
  6. Number,
  7. OpenBracket,
  8. CloseBracket
  9. };
  10. struct Token {
  11. TokenType type;
  12. std::string data;
  13. // other useful things
  14. };
  15. std::vector<Token> lex(std::string input) {
  16. std::unordered_map<char, TokenType> singles;
  17. singles['+'] = TokenType::Plus;
  18. singles['-'] = TokenType::Minus;
  19. singles['('] = TokenType::OpenBracket;
  20. singles[')'] = TokenType::CloseBracket;
  21. singles['*'] = TokenType::Multiply;
  22. singles['/'] = TokenType::Divide;
  23. std::unordered_set<char> whitespace;
  24. whitespace.insert(' ');
  25. whitespace.insert('\t');
  26. whitespace.insert('\r');
  27. whitespace.insert('\n');
  28. std::unordered_set<char> nums;
  29. for(int i = 0; i < 10; i++)
  30. nums.insert('0' + i);
  31. std::vector<Token> out;
  32. for(auto it = input.begin(); it != input.end(); ++it) {
  33. if (singles.find(*it) != singles.end()) {
  34. Token t;
  35. t.type = singles[*it];
  36. out.push_back(t);
  37. continue;
  38. }
  39. if (whitespace.find(*it) != whitespace.end()) {
  40. continue;
  41. }
  42. if (nums.find(*it) != nums.end()) {
  43. Token t;
  44. t.type = TokenType::Number;
  45. while(nums.find(*it) != nums.end()) {
  46. t.data.push_back(*it);
  47. ++it;
  48. if (it == input.end())
  49. break;
  50. }
  51. out.push_back(t);
  52. continue;
  53. }
  54. // error
  55. }
  56. return out;
  57. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement