Я буду ссылаться на этот вопрос для некоторого фона:
Регулярное выражение для строкового литерала в flex / lex
Проблема, с которой я сталкиваюсь, заключается в обработке ввода с помощью экранированных символов в моем лексере, и я думаю, что это может быть проблемой, связанной с кодированием строки, но я не уверен.
Вот как я обрабатываю строковые литералы в моем лексере:
\"(\\.|[^\\"])*\"
{
char* text1 = strndup(yytext + 1, strlen(yytext) - 2);
char* text2 = "text\n";
printf("value = <%s> <%x>\n", text1, text1);
printf("value = <%s> <%x>\n", text2, text2);
}
Это выводит следующее:
value = <text\n"> <15a1bb0>
value = <text
> <7ac871>
Похоже, что символ новой строки обрабатывается отдельно как обратный слеш, за которым следует n.
Что здесь происходит, как мне обработать текст, чтобы он был идентичен вводу C?