문자열 상수를 처리하기 위해 플렉스 프로그램을 작성하고 있습니다.yymore()를 사용할 때 EOF에서 플렉스 오류 "end of buffer missed"가 발생했습니다.
문자열 내에서 입력 파일이 EOF를 만족하면 ERROR 토큰을 반환하고 싶습니다.
나는 파일이 인쇄 EOF와 "ERROR"을 충족 한 후 다음과 같은 오류 있어요 :을 놓친 내 코드입니다 : (나는치명적인 플렉스 스캐너 내부 오류 - 버퍼의 끝이 여기에
yymore()
함수 호출을 삭제하면이 오류를 재현 할 수있는 단순화 된 버전)
%option noyywrap
#define ERROR 300
#define STRING 301
char *text;
%x str
%%
\" {BEGIN(str); yymore();}
<str>\" {BEGIN(INITIAL); text=yytext; return STRING;}
<str>. {yymore();}
<str><<EOF>> {BEGIN(INITIAL); return ERROR;}
%%
int main(){
int token;
while((token=yylex())!=0){
if(token==STRING)
printf("string:%s\n",text);
else if(token==ERROR)
printf("ERROR\n");
}
return 0;
}
는 오류가 사라지고 프로그램이 종료 정상적으로 "ERROR"를 인쇄 한 후.
왜 이런 일이 발생하는지 궁금하며 yymore()
을 제거하지 않고 해결하고 싶습니다.