2016-03-13 6 views
0

У меня есть следующая простая грамматика:Повысьте дух исключение переполнения стека в рекурсивном правило

expr_ = lit("+") > expr_ 
      | qi::uint_ 
      ; 

В принципе, это просто игнорируя + знаки в передней части междунар.

Следующий вход вызывает переполнение стека:

+++ ...(~195 more + chars)... ++1 

Я понимаю, что рекурсия в правиле будет действительно вызвать такое поведение, но есть способ, чтобы избежать таких исключений (вид, указывающие, что правило хвост рекурсивный как-то)?

ответ

2

Как вы, наверное, знают, вы можете переписать правила, чтобы удалить рекурсии:

expr_ = *lit("+") > qi::uint_; 

Что касается вашего вопроса о хвостовой рекурсии, в основном ответ нет.

+0

Спасибо, я действительно пропустил использование '*' – 0xFF