diff --git a/hcore/deviceManager/deviceSpecl.ll b/hcore/deviceManager/deviceSpecl.ll index 2a20642..acf8f62 100644 --- a/hcore/deviceManager/deviceSpecl.ll +++ b/hcore/deviceManager/deviceSpecl.ll @@ -26,10 +26,26 @@ "(" { return LPAREN; } ")" { return RPAREN; } [ \t]*"="[ \t]* { return EQUALS; } // Allow optional whitespace around equals -([^=\|\(\) \t\r\n]|\\[ \t])+ { +(\\.|[^=\|\(\) \t\r\n])+ { std::string token(yytext); - token.erase(std::remove(token.begin(), token.end(), '\\'), token.end()); - deviceSpecplval.str = strdup(token.c_str()); + + // Unescape logic for backslash, pipe + std::string unescaped; + unescaped.reserve(token.size()); + + for (size_t i = 0; i < token.size(); ++i) + { + if (token[i] == '\\' && i + 1 < token.size()) + { + unescaped.push_back(token[++i]); + } + else + { + unescaped.push_back(token[i]); + } + } + + deviceSpecplval.str = strdup(unescaped.c_str()); return STRING; } \r?\n { /* ignore newlines */ }