0
현재 flex/bison 프로젝트를 진행 중입니다.여러 파일의 구문 분석하기 flex/bison
하나의 실행에서 여러 파일을 구문 분석해야하므로 루프를 만들어 YYPARSE()를 여러 번 실행했습니다.
flex가 어휘 또는 구문 오류를 발견하면 파일 구문 분석이 중지되고 프로그램에서 다음 파일 구문 분석을 시작합니다. 그러나 새 파일의 구문 분석은 처음부터 시작하지 않습니다. 실제로 파싱이 파일 3의 8 행에서 중지되면 파싱은 파일 4의 양식 8에서 시작됩니다.
어떻게이 문제를 해결할 수 있습니까?
미리 감사드립니다. 현재 입력의 나머지 부분을 삭제하고 새로운 파일을 구문 분석을 시작해야하는 경우 호출 할 필요가
int main(int argc, char* argv[]){
DIR* dir;
struct dirent *ent;
int val = 0;
if ((dir = opendir ("../TpCompileHoho")) != NULL)
{
// print all the files and directories within directory
while ((ent = readdir (dir)) != NULL)
{
if ((strcmp(ent->d_name,".") != 0) && (strcmp(ent->d_name,"..") != 0) && (strstr(ent->d_name,".txt") != NULL))
{
yyin = fopen(ent->d_name,"r");
yyparse();
}
}
closedir (dir);
}
else
{
// could not open directory
perror ("could not open directory");
return EXIT_FAILURE;
}
}
감사합니다. 필자는 필자의 들소 파일에서 yyrestart (yyin)를 사용했습니다. YY_FLUSH_BUFFER도 추가해야했습니다. 플렉스 파일. 사실, yyrestart 만 사용하면 문제는 구문 오류로 해결되지만 어휘 오류로 해결되지는 않습니다. – ryuzakinho
@ryuzakinho : yyrestart()가 yy_flush_buffer()를 호출했기 때문에 문제가 발생했다는 것을 알았 기 때문에 다시 호출해야합니다 ('YY_FLUSH_BUFFER'로). 적어도 flex의 버전으로 생성 된 스캐너에서는 편리합니다. 그것이 작동하는 방법입니다. 어쨌든 스캐너가 어휘 에러를 발견하면 BAD_TOKEN 토큰을 반환하도록함으로써 파서의 모든 오류를 처리하는 것을 선호하지만, 그것은 나뿐입니다. – rici