【问题标题】:boost::fusion parsing long string causes stack overflowboost::fusion 解析长字符串导致堆栈溢出
【发布时间】:2014-11-27 14:40:35
【问题描述】:

有什么方法可以防止 boost::fusion 在某些输入上溢出堆栈?我的语法类似于

S -> S OR S
S -> a

在大量输入(> 1500 OR'd 项目)时它会崩溃。我不想解析如此庞大的输入,但我需要以某种方式防止进程崩溃。

我可能可以将字符串限制为一定长度,但这并不能解决我的问题,因为a 可能很长。

【问题讨论】:

标签: c++ parsing boost grammar boost-spirit


【解决方案1】:

这通常通过将右递归重写为一种迭代形式来解决,例如

myrule = something >> -(',' >> myrule); // right recursion

进入

myrule = something *(',' >> myrule); // iteration

当然,这是一个小例子。在实际语法中,您通常需要以某种方式控制运算符的优先级。


在没有代码的情况下,请参阅此处以了解重构语法的示例,使其在堆栈和分配上更轻:

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2010-09-11
    相关资源
    最近更新 更多