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::iostreams
、boost::interprocess
或 mmap
.
中的工具
我估计我至少有 3 个答案来展示这个答案中提到的每一种技术,所以我只是在这个网站上搜索它们。
我设法将一个 pgn 文件解析成几个游戏
但是,由于我要处理的文件有很多游戏,在我最近使用的计算机上,这个过程可能需要两分钟。这就是为什么我想使用此解析器在 GUI 应用程序上为进度条设置动画。
我认为最简单的方法是 "ask" 确定他已经处理了多少个字符,还有多少个字符剩余。 (或者还有多少行已经被处理)。
可能吗?如果是这样,我需要如何修改解析器文件才能获得此比率?
您可以使用 line_pos_iterator
并可能使用存储库中的 iter_pos
原语。
(@GuyGreer:) 没有办法知道所涉及的回溯量(否则,一开始就不需要回溯)。所以,最好的办法是接受你得到某种 "average throughput" 有时可能有点突发或滞后。如果你的语法不平衡,以至于这些变化不仅仅是噪音,你应该首先考虑修复 grammar/parser 定义。
为了应对不知道流长度的 "problem",除了不将其作为流外,您无法修复它。
我建议内存映射。您可以使用
boost::iostreams
、boost::interprocess
或mmap
. 中的工具
我估计我至少有 3 个答案来展示这个答案中提到的每一种技术,所以我只是在这个网站上搜索它们。