Есть ли способ предотвратить boost :: fusion для переполнения стека на определенный вход? У меня есть грамматика, похожая наboost :: fusion синтаксический анализ длинной строки вызывает переполнение стека
S -> S OR S
S -> a
и на огромном входе (> 1500 предметов OR'd) он сработает. Я не хочу разбирать такой огромный вклад, но мне нужно как-то предотвратить процесс сбоя.
Возможно, я ограничу длину строки, но это не решает мою проблему, так как a
может быть длинным.
Во-первых, это не слияние Грохот, что это Дух (или, более конкретно, ваши правила). Покажите свой код (SSCCE), и я попытаюсь его исправить. – sehe
Похоже, что вы разбираете булевы выражения. Вы посмотрели на [Булевская грамматика выражений с Boost Spirit] (http://stackoverflow.com/questions/8706356/boolean-expression-grammar-parser-in-c/8707598#8707598) для идей? Существует [наблюдение, которое делает оценку] (http://stackoverflow.com/questions/12598029/how-to-calculate-boolean-expression-in-spirit/12602418#12602418) тоже – sehe