2014-08-29 2 views
0

Я строю 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. Даже он также не работает для символов табуляции и новой строки. Как это исправить?

+2

Вам нужно будет просмотреть строку, которую вы только что прочитали, и заменить escape-последовательности на то, что они представляют. Какая магия, по вашему мнению, может сделать это для вас? Кстати, 'len = strlen (yytext)' не требуется. 'yyleng' всегда является длиной токена. – rici

ответ

0

(Лучший ответ в комментариях @rici. Скопировано здесь как ответ. См. Question with no answers, but issue solved in the comments (or extended in chat))

Вам нужно будет просмотреть строку, которую вы только что прочитали, и заменить escape-последовательности на то, что они представляют. Какая магия, по вашему мнению, может сделать это для вас? Кстати, len = strlen (yytext) не требуется. yyleng - это всегда длина маркера.