Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef MY_LEXER
- #define MY_LEXER
- #include <iostream>
- #include <sstream>
- #include <string>
- #include "MathHelpFunctions.h"
- class Lexer
- {
- private:
- std::istream reader;
- std::string current;
- public:
- Lexer(const std::istream &reader) : reader(reader)
- {
- Read();
- }
- void Reader(std::istream &value)
- {
- reader = value;
- Read();
- }
- std::istream &Reader()
- {
- return reader;
- }
- std::string Read()
- {
- char now = 0;
- if (reader.eof())
- return "/n/r";
- now = reader.peek();
- while (now == ' ')
- {
- reader >> now;
- now = reader.peek();
- }
- std::string rv = current;
- switch (now)
- {
- case '+':
- reader >> now;
- current = now;
- break;
- case '-':
- reader >> now;
- current = now;
- break;
- case '*':
- reader >> now;
- current = now;
- break;
- default:
- current = "";
- while (IsNumber(now))
- {
- reader >> now;
- current += now;
- now = reader.peek();
- }
- if (current.length() == 0)
- throw "Parse failed: incorrect input string.";
- }
- return rv;
- }
- std::string Peek()
- {
- return current;
- }
- };
- #endif
Add Comment
Please, Sign In to add comment