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의이야 심지어 탭과 개행 문자로도 작동하지 않습니다. 어떻게 수정합니까?
방금 읽은 문자열을 스캔하고 이스케이프 시퀀스를 나타내는 문자열로 바꿔야합니다. 당신에게 어떤 마술이 있다고 생각하십니까? 그건 그렇고,'len = strlen (yytext)'는 필요하지 않습니다. 'yyleng'은 항상 토큰의 길이입니다. – rici