我正在使用具有许多其他子规则的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)以并行进行解析?
答案 0 :(得分:1)
通常,并行化没有空间,因为组合语法会尝试执行尽可能少的前瞻和回溯。在这种情况下,线程生成和同步开销将抵消并行解析的任何好处。
如果您的语法实际上像所示示例一样从头开始分支-您可以将其重写为并行运行多个x3::parse
。
当前的Spirit备用解析器实现中还存在一个问题,因为它不会使表达式树变平(虽然它是二叉树,通常非常不平衡)。