解析多个文件 flex/bison

ryu*_*nho 3 parsing bison flex-lexer

我目前正在开发一个 Flex/bison 项目。

我需要在一次执行中解析多个文件,因此我创建了一个循环来多次运行 YYPARSE() 。

当 flex 发现词汇或语法错误时,文件的解析会停止,程序会开始解析下一个文件。但是,该新文件的解析并不是从头开始。事实上,如果文件 3 的解析在第 8 行停止,解析将从文件 4 的第 8 行开始。

我该如何解决这个问题?

提前致谢。

这是我的 bison.y 文件中的主要函数:

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;
    }
Run Code Online (Sandbox Code Playgroud)

}

ric*_*ici 5

如果您需要丢弃当前输入的其余部分并开始解析新文件,则需要调用yyrestart(yyin)而不是简单地设置yyin为新值。yyin仅当前一个文件被读取到文件结尾标记时,设置为新值才可以正常工作。

您还应该记住关闭旧文件。Flex 生成的扫描仪不会为您执行此操作。