2014-08-29 5 views
0

나는 렉서를 만들고 있습니다. 이스케이프 문자가있는 문자열 리터럴에 문제가 있습니다. 이게 내 렉스 코드 야.이스케이프 문자로 문자열 읽기

string L?\"(\\.|[^\\"])*\" 
{string} { 
      int len;len = strlen(yytext); 
      yylval.string = strdup(yytext + 1); 
      yylval.string[len - 2] = 0;return MYSTRING; 
      } 

이것은 내 파서 코드입니다.

tname1="xxxx\"s"; 
print tname1; 

내가 문자열을 인쇄 할 때, 그것은 "

.의

그러나 XXXX로 나는 결과를 원한다"

XXXX \처럼 인쇄하는 대신 XXXX의이야 심지어 탭과 개행 문자로도 작동하지 않습니다. 어떻게 수정합니까?

+2

방금 ​​읽은 문자열을 스캔하고 이스케이프 시퀀스를 나타내는 문자열로 바꿔야합니다. 당신에게 어떤 마술이 있다고 생각하십니까? 그건 그렇고,'len = strlen (yytext)'는 필요하지 않습니다. 'yyleng'은 항상 토큰의 길이입니다. – rici

답변

0

(가장 좋은 대답은 @rici의 의견에 있습니다. 답변으로 여기에 복사되었습니다. Question with no answers, but issue solved in the comments (or extended in chat)을 참조하십시오.

방금 ​​읽은 문자열을 스캔하고 이스케이프 시퀀스를 나타내는 문자열로 바꿔야합니다. 당신에게 어떤 마술이 있다고 생각하십니까? 그건 그렇고, len = strlen (yytext)는 필요하지 않습니다. yyleng은 항상 토큰의 길이입니다.