boost spirit 2:有没有办法知道解析器进度百分比是多少?

boost spirit 2 : is there a way to know what is the parser progression percentage?

我设法将一个 pgn 文件解析成几个游戏

但是,由于我要处理的文件有很多游戏,在我最近使用的计算机上,这个过程可能需要两分钟。这就是为什么我想使用此解析器在 GUI 应用程序上为进度条设置动画。

我认为最简单的方法是 "ask" 确定他已经处理了多少个字符,还有多少个字符剩余。 (或者还有多少行已经被处理)。

可能吗?如果是这样,我需要如何修改解析器文件才能获得此比率?

您可以使用 line_pos_iterator 并可能使用存储库中的 iter_pos 原语。

  • (@GuyGreer:) 没有办法知道所涉及的回溯量(否则,一开始就不需要回溯)。所以,最好的办法是接受你得到某种 "average throughput" 有时可能有点突发或滞后。如果你的语法不平衡,以至于这些变化不仅仅是噪音,你应该首先考虑修复 grammar/parser 定义。

  • 为了应对不知道流长度的 "problem",除了不将其作为流外,您无法修复它。

    我建议内存映射。您可以使用 boost::iostreamsboost::interprocessmmap.

  • 中的工具

我估计我至少有 3 个答案来展示这个答案中提到的每一种技术,所以我只是在这个网站上搜索它们。