使用相同的输入文件多次调用yyparse()

时间:2012-11-08 06:09:29

标签: c bison yacc lex flex-lexer

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

我回到原来的位置时遇到了问题。我可以跳到其他位置,但从那里返回到原来的位置是问题。我的解析器在返回时会转到其他位置,从那里解析几行,然后到达原始位置。我怎样才能避免这些额外的行解析?我在调用yyrestart();

之前使用yyparse();

1 个答案:

答案 0 :(得分:2)

每次需要更改位置时,您都可以在词法分析器中完成所有操作,而不是重新启动解析。

当您需要解析文件中的其他位置时,将当前词法分析器状态推送到堆栈,并将新的词法分析器设置为所需的位置。完成后,只需将状态从堆栈中弹出以使其成为当前状态并继续解析,就像没有发生任何事情一样。

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