我正在尝试创建一个带有flex和bison的计算器,该计算器将获得一组操作(结果分配给变量)。计算器使用内存来存储这些变量。当我通过终端(stdin键盘)进行此计算时,一切正常。但是,当我尝试使用文件时,内存中没有任何存储。
我有一个.y和.l
这是我在.y中指定的内容。
extern FILE* yyin;
在主方法中:
yyin = fopen(argv[1], "rt");
yyparse ();
listTofile(list, argv[2]); //method that backups memory into a file
fclose(yyin);
例如,当我键入A = 2 + 2时,文件将存储名称变量和结果。当提示询问我指导时,此功能非常有用。 但是,当提供文件时,解析器检测到所有但不存储任何内容(使用flex -d检查)
答案 0 :(得分:0)
使用flex时,通常需要调用yyrestart(yyin);
来切换到新的输入源,以重置所有缓冲源。就是说,如果您在fopen调用之前从未从yyin读取任何内容,那么这不会有任何区别,因为不应有任何要重置的缓存缓冲区内容。