#include "Lexer.h" Lexer::Lexer() { //Do nothing currentPosition = 0; } Lexer::Lexer(std::string inputString) { input = inputString; currentPosition = 0; } Lexer::~Lexer() { //No cleanup necessary } void Lexer::setInput(std::string inputString) { input = inputString; } void Lexer::addRegEx(std::string regExString) { regExs.push_back(new RegEx(regExString)); } Symbol Lexer::next() { //std::cout << "Current at is \"" << input.substr(currentPosition,input.length()-1) << "\" currentPos is " << currentPosition << " out of " << input.length() <= input.length()-1) return Symbol("$EOF$", true); int longestMatch = -1; RegEx* longestRegEx = NULL; std::string remainingString = input.substr(currentPosition,input.length()-1); for (std::vector::size_type i = 0; i < regExs.size(); i++) { //std::cout << "Trying regex " << regExs[i]->getPattern() << std::endl; int currentMatch = regExs[i]->longMatch(remainingString); if (currentMatch > longestMatch) { longestMatch = currentMatch; longestRegEx = regExs[i]; } } if (longestRegEx != NULL) { std::string eatenString = input.substr(currentPosition, longestMatch+1); currentPosition += longestMatch + 1; //std::cout << "Current at is \"" << input.substr(currentPosition,input.length()-1) << "\" currentPos is " << currentPosition <getPattern(), true, eatenString); } else { //std::cout << "Found no applicable regex" << std::endl; //std::cout << "Remaining is ||" << input.substr(currentPosition,input.length()-1) << "||" << std::endl; return Symbol(); } }