Re: endless loop - crashing application
Larry Evans <[email protected]>
| Newsgroups | gmane.comp.parsers.spirit.general |
|---|---|
| Message-ID | <[email protected]> |
On 08/22/2016 07:25 AM, Larry Evans wrote:
> On 08/22/2016 06:46 AM, Larry Evans wrote:
>> On 08/22/2016 04:04 AM, Joel de Guzman wrote:
>>> On 22/08/2016 1:09 PM, Jens Kallup wrote:
>>>> Hello,
>>>>
>>>> QString, and QMessageBox are library functions from Qt.
>>>> QString is the equalivant of std::string.
>>>>
>>>> I have change the source, so it should be compiled with
>>>> STL.
>>>> Thanks for helping
>>>
>>> Before anything else, have you tried BOOST_SPIRIT_DEBUG to
>>> see a trace where the infinite recursion happens? I suspect
>>> left recursive rules.
>>>
>>> Regards,
>>>
>> Hi Joel,
>>
>> I tried that; however, the problem I encountered was not at
>> run-time (which I guess is what BOOST_SPIRIT_DEBUG helps with)
>> but at compile_time where, with the code posted by Jens in his
>> last email, results in errors about too many template instantiations:
>>
>> --{--cut here--
>> yymain.email2016-08-22_0009.cc:525:32: required from here
>> /home/evansl/prog_dev/boost/releases/ro/boost_1_61_0/boost/core/enable_if.hpp:41:10:
>> fatal error: template instantiation depth exceeds maximum of 100 (use
>> -ftemplate-depth= to increase the maximum)
>> struct enable_if : public enable_if_c<Cond::value, T> {};
>> ^
>> compilation terminated.
>> --}-- cut here--
>>
>> Deciphering why this happening from the *huge* compiler error
>> messages is daunting :(
>
> Cutting out some of the rule definitions until there was just factor
> avoided in 'excceeds maximum' error message. IOW:
>
> --{--cut here--
> #define CUT_RULES 1
> #if CUT_RULES
> #define CUT_EXPRESSION 1
> #if CUT_EXPRESSION
> #else
> expression =
> factor [ _val = qi::_1 ]
> >> *( ('+' >> factor [ _val += qi::_1 ])
> | ('-' >> factor [ _val -= qi::_1 ])
> )
> ;
> #endif //CUT_EXPRESSION
> factor =
> tok.number_digit [ _val = qi::_1 ]
> | ('-' >> factor [ _val = neg(qi::_1)])
> | ('+' >> factor [ _val = qi::_1 ] )
> ;
> #else
> //as before
> #endif //CUT_RULES
> --}--cut here--
>
> compiles, but with #define CUT_EXPRESSION 0, compilation fails with
> the 'excceeds maximum' error message.
>
> -regards,
> Larry
The source and compilation output are now here:
https://github.com/cppljevans/boost_sandbox/tree/master/paul32
------------------------------------------------------------------------------