0

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

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

4

1 回答 1

2

您可以在词法分析器中完成这一切,而不是每次需要更改位置时都重新开始解析。

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

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

于 2012-11-08T06:28:10.403 回答