Я строю Lexer. У меня проблема с строковым литералом с escape-символами. Это мой лекс-код.Чтение строки с escape-символами
string L?\"(\\.|[^\\"])*\"
{string} {
int len;len = strlen(yytext);
yylval.string = strdup(yytext + 1);
yylval.string[len - 2] = 0;return MYSTRING;
}
Это мой код Parser.
tname1="xxxx\"s";
print tname1;
Когда я печатаю строку, он печатает как
хххх \ "s
.
Но я хочу, чтобы результат, как хххх" с вместо хххх \ 's. Даже он также не работает для символов табуляции и новой строки. Как это исправить?
Вам нужно будет просмотреть строку, которую вы только что прочитали, и заменить escape-последовательности на то, что они представляют. Какая магия, по вашему мнению, может сделать это для вас? Кстати, 'len = strlen (yytext)' не требуется. 'yyleng' всегда является длиной токена. – rici