Boost.Spirit替代解析器并行化

时间:2018-08-29 04:45:51

标签: c++ boost boost-spirit

我正在使用具有许多其他子规则的x3规则来解析缓冲区。 实际上,我有来自不同GPS设备的数据,我的主解析器如下所示:

dashBoardController.self.event = event
dashBoardController.self.passcode = passcode

我知道我可以为输入数据和每个设备规则并行实现 auto gps_r = device1_r | device2_r | device3_r; bool ok = x3::parse(...,gps_r,..); 的调用。但这可能不适用于某些递归解析(例如SAX DOM解析)。

我的问题更理论化:是否有任何尝试使Alternative Parser异步(例如,使用boost.coroutines2)以并行进行解析?

1 个答案:

答案 0 :(得分:1)

通常,并行化没有空间,因为组合语法会尝试执行尽可能少的前瞻和回溯。在这种情况下,线程生成和同步开销将抵消并行解析的任何好处。

如果您的语法实际上像所示示例一样从头开始分支-您可以将其重写为并行运行多个x3::parse

当前的Spirit备用解析器实现中还存在一个问题,因为它不会使表达式树变平(虽然它是二叉树,通常非常不平衡)。

相关问题