+ {
+ if(state==IDENTIFIER && buf[0]=='\\')
+ return Token(Token::IDENTIFIER, buf.substr(1));
+ else if(state==STRING_END)
+ {
+ try
+ {
+ return Token(Token::STRING, c_unescape(buf.substr(1, buf.size()-2)));
+ }
+ catch(Exception &e)
+ {
+ e.at(get_location());
+ throw;
+ }
+ }
+ else
+ return Token(token_type[state], buf);
+ }