+ {
+ restore = parser.drop(alt);
+ long bs_pos = restore.find('\\');
+ if ((restore.length() > 0) && (bs_pos != std::string::npos))
+ {
+ // in this case we have to control the blackslash's position
+ if (bs_pos == 0)
+ {
+ //logger.debug(restore);
+ buffer = std::string(restore, 1, restore.length() - 1);
+ state = (buffer.length() > 0) ? MACRO : ESCAPE;
+ }
+ else
+ {
+ assert(bs_pos == restore.length() - 1);
+ buffer = std::string(restore, 0, bs_pos);
+ state = ESCAPED_CHARACTER;
+ }
+ }
+ else if (restore.length() > 0 && isdigit(restore[0]))
+ {
+ buffer = restore;
+ state = NUMBER;
+ }
+ else if (restore.length() > 0 && isalpha(restore[0]))
+ {
+ buffer = restore;
+ state = IDENTIFIER;
+ }
+ }
+ break;
+/* if (restore.length() > 0 && restore[0] == '\\')