使用boost::spirit,如果我有一个递归规则来解析括号。
我使用以下命令进行编译:
rule<std::string::iterator, std::string()> term;
term %= string("(") >> *term >> string(")");
如何限制最大递归深度?例如,如果尝试解析一百万个嵌套括号,则会因为超出堆栈大小而导致段错误。以下是一个完整的示例:
#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>
int main(void)
{
using namespace boost::spirit;
using namespace boost::spirit::qi;
const size_t string_size = 1000000;
std::string str;
str.resize(string_size);
for (size_t s=0; s<str.size()/2; ++s)
{
str[s]='(';
str[str.size() - s -1] = ')';
}
rule<std::string::iterator, std::string()> term;
term %= string("(") >> *term >> string(")");
std::string h;
parse(str.begin(), str.end(), term, h);
}
我使用以下命令进行编译:
```我使用以下命令进行编译:```
g++ simple.cxx -o simple -std=c++11
如果我将string_size
设置为1000而不是1000000,它就能正常工作。
#define BOOST_SPIRIT_USE_PHOENIX_V3
。 - sehe