Newer
Older
/*
* RegExpFromStringLexer.cpp
*
* Created on: Nov 23, 2013
* Author: Jan Travnicek
*/
#include "RegExpFromStringLexer.h"
namespace regexp {
RegExpFromStringLexer::Token RegExpFromStringLexer::next(std::istream& in) {
RegExpFromStringLexer::Token token;
token.type = TokenType::ERROR;
token.value = "";
token.raw = "";
if ( in.eof ( ) || character == EOF ) {
token.type = TokenType::TEOF;
return token;
} else if(character == ' ' || character == '\n' || character == '\t') {
token.type = TokenType::LPAR;
token.value += character;
token.raw += character;
return token;
token.type = TokenType::RPAR;
token.value += character;
token.raw += character;
return token;
token.type = TokenType::PLUS;
token.value += character;
token.raw += character;
return token;
token.type = TokenType::STAR;
token.value += character;
token.raw += character;
return token;
} else if(character == '#') {
token.value += character;
token.raw += character;
putback(in, std::move(token));
token.type = TokenType::ERROR;
return token;
character = in.get();
if(in.eof()) {
token.type = TokenType::TEOF;
return token;
} else if(character == 'E') {
token.type = TokenType::EPS;
token.value += character;
token.raw += character;
return token;
token.type = TokenType::EMPTY;
token.value += character;
token.raw += character;
return token;
putback(in, std::move(token));
token.type = TokenType::ERROR;
return token;
void RegExpFromStringLexer::putback(std::istream& in, RegExpFromStringLexer::Token token) {
while(!token.raw.empty()) {
in.putback(token.raw.back());
token.raw.pop_back();
}
} /* namespace regexp */