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)
}
如果您需要丢弃当前输入的其余部分并开始解析新文件,则需要调用yyrestart(yyin)而不是简单地设置yyin为新值。yyin仅当前一个文件被读取到文件结尾标记时,设置为新值才可以正常工作。
您还应该记住关闭旧文件。Flex 生成的扫描仪不会为您执行此操作。
| 归档时间: |
|
| 查看次数: |
2506 次 |
| 最近记录: |