Guest User

Untitled

a guest
Nov 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. #ifndef MY_LEXER
  2. #define MY_LEXER
  3.  
  4. #include <iostream>
  5. #include <sstream>
  6. #include <string>
  7. #include "MathHelpFunctions.h"
  8.  
  9. class Lexer
  10. {
  11. private:
  12. std::istream reader;
  13. std::string current;
  14. public:
  15. Lexer(const std::istream &reader) : reader(reader)
  16. {
  17. Read();
  18. }
  19.  
  20. void Reader(std::istream &value)
  21. {
  22. reader = value;
  23. Read();
  24. }
  25.  
  26. std::istream &Reader()
  27. {
  28. return reader;
  29. }
  30.  
  31. std::string Read()
  32. {
  33. char now = 0;
  34.  
  35. if (reader.eof())
  36. return "/n/r";
  37. now = reader.peek();
  38.  
  39. while (now == ' ')
  40. {
  41. reader >> now;
  42. now = reader.peek();
  43. }
  44.  
  45. std::string rv = current;
  46. switch (now)
  47. {
  48. case '+':
  49. reader >> now;
  50. current = now;
  51. break;
  52. case '-':
  53. reader >> now;
  54. current = now;
  55. break;
  56. case '*':
  57. reader >> now;
  58. current = now;
  59. break;
  60. default:
  61. current = "";
  62. while (IsNumber(now))
  63. {
  64. reader >> now;
  65. current += now;
  66. now = reader.peek();
  67. }
  68. if (current.length() == 0)
  69. throw "Parse failed: incorrect input string.";
  70. }
  71. return rv;
  72.  
  73. }
  74.  
  75. std::string Peek()
  76. {
  77. return current;
  78. }
  79. };
  80.  
  81. #endif
Add Comment
Please, Sign In to add comment