C 使用同一输入文件多次调用yyparse()

C 使用同一输入文件多次调用yyparse(),c,bison,yacc,lex,flex-lexer,C,Bison,Yacc,Lex,Flex Lexer,我正在使用同一输入文件多次调用yyparse()。我必须从解析文件开始到某个点,然后跳转到同一文件中的其他位置(在那里解析一些行),然后返回到原始位置并从那里再次开始解析。我已经做过很多次了。每次调用yyparse()之前,我都会重新打开同一个输入文件,然后指向必须开始解析的位置 我无法回到原来的位置。我可以跳到其他位置,但从那个里回到原来的位置是个问题。我的解析器将在返回时转到其他位置,从那里解析几行,然后回到原始位置。如何避免这些额外的行解析?我正在使用yyrestart()在新调用yypa

我正在使用同一输入文件多次调用
yyparse()
。我必须从解析文件开始到某个点,然后跳转到同一文件中的其他位置(在那里解析一些行),然后返回到原始位置并从那里再次开始解析。我已经做过很多次了。每次调用
yyparse()
之前,我都会重新打开同一个输入文件,然后指向必须开始解析的位置


我无法回到原来的位置。我可以跳到其他位置,但从那个里回到原来的位置是个问题。我的解析器将在返回时转到其他位置,从那里解析几行,然后回到原始位置。如何避免这些额外的行解析?我正在使用
yyrestart()在新调用
yyparse()之前

您可以在lexer中完成这一切,而不是每次需要更改位置时都重新启动解析

当您需要解析文件中的另一个位置时,将当前lexer状态推送到堆栈上,并将新的lexer stat设置到您想要的位置。完成后,只需将状态从堆栈中弹出,使其成为当前状态,并继续解析,就好像什么都没发生一样


一个可能更好的解决方案可能是直接解析源文件,构建一个AST,然后您可以轻松地进行语义处理和/或评估您喜欢的部分。这将使词法分析器和解析器更加简单。

您使用哪种语言,C?C++?还有什么?谢谢你的回复!!!我想去的位置是动态的,我正在我的程序中搜索它,我事先不知道它。现在,我面临为新位置设置新lexer stat的问题。@user1808278还有一种方法,而不是摆弄lexer/解析器。更新了我的答案。