/* * ContainerFromStringLexer.cpp * * Created on: Nov 23, 2013 * Author: Jan Travnicek */ #include "ContainerFromStringLexer.h" namespace container { ContainerFromStringLexer::Token ContainerFromStringLexer::next(std::istream& in) { ContainerFromStringLexer::Token token; token.type = TokenType::ERROR; token.value = ""; token.raw = ""; char character; L0: character = in.get(); if ( in.eof ( ) || character == EOF ) { token.type = TokenType::TEOF; return token; } else if ( isspace ( character ) ) { token.raw += character; goto L0; } else if(character == '{') { token.type = TokenType::SET_BEGIN; token.value += character; token.raw += character; return token; } else if(character == '}') { token.type = TokenType::SET_END; token.value += character; token.raw += character; return token; } else if(character == '[') { token.type = TokenType::VECTOR_BEGIN; token.value += character; token.raw += character; return token; } else if(character == ']') { token.type = TokenType::VECTOR_END; token.value += character; token.raw += character; return token; } else if(character == '(') { token.type = TokenType::PAIR_BEGIN; token.value += character; token.raw += character; return token; } else if(character == ')') { token.type = TokenType::PAIR_END; token.value += character; token.raw += character; return token; } else if(character == ',') { token.type = TokenType::COMMA; token.value += character; token.raw += character; return token; } else { in.clear ( ); in.unget ( ); putback(in, token); token.raw = ""; token.type = TokenType::ERROR; return token; } } } /* namespace container */