|
Boost : |
From: Bjørn Roald (bjorn_at_[hidden])
Date: 2006-01-03 17:05:21
On Tuesday 03 January 2006 22:00, Eric Niebler wrote:
> Bjørn Roald wrote:
> > On Tuesday 03 January 2006 10:43, Eric Niebler wrote:
> >>>You'll notice that I eliminated your name_value_pair_ regex. That's
> >>>because it exposed a bug in xpressive. :-P
> >>
> >>Fixed. Please get the latest version of xpressive from the Vault.
> >
> > I tried to use the xpressive library from the Boost CVS and I ran into
> > some problems. Do I understand the above to mean that the Vault version
> > is a better choice?
>
> No, the Vault is pretty much the same as what is in CVS at the moment.
> What is the problem you're seeing?
Using static regexp to create simple grammars I encountered two problems.
1.
The example code for nested grammar in the documentation produced only
printout of part of the results compared to the documentation.
2.
Creating a more complex grammar with static regexp I encountered core dumps
attempting to print nested matches. Call stack is listed below. I suspect it
is related to my lack of understanding the static regexp
features/rules/limitations. I am atempting to use nested regexp in the
grammar that match stuff like C++ comments and literal strings, when I remove
them it all works better. I have read that regexp in general break if you
nest unlimited lenght specifiers like + or *. Can that be what causes the
core dump? If this is the case, is this a limitation we have to live with?
Any workaround?
If you like me to post the code I can reduce it as much as I can first.
--- Bjørn Call Stack: (gdb) bt #0 0x0805648b in std::ostream_iterator<char, char, std::char_traits<char>>::operator= (this=0xbfe80af0, __value=@0x0) at stream_iterator.h:196 #1 0x0805be0d in std::__copy<char const*, std::ostream_iterator<char, char, std::char_traits<char> > > (__first=0x0, __last=0x8c3bd13 "}..\" .. {dfgdg() {aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}ddd // ", 'g' <repeats 12 times>, "\nddd // ostekake\nddd // pannekake\n/*\n", 'd' <repeats 12 times>, "\n*/\n/*", 'e' <repeats 15 times>, "*/\n}\n\n", __result={<std::iterator<std::output_iterator_tag,void,void,void,void>> = {<No data fields>}, _M_stream = 0x1c7280, _M_string = 0x0}) at stl_algobase.h:247 #2 0x08059bf3 in std::__copy_aux2<char const*, std::ostream_iterator<char, char, std::char_traits<char> > > (__first=0x0, __last=0x8c3bd13 "}..\" .. {dfgdg(){aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}ddd // ", 'g' <repeats 12 times>, "\nddd // ostekake\nddd // pannekake\n/*\n", 'd' <repeats 12 times>, "\n*/\n/*", 'e' <repeats 15 times>, "*/\n}\n\n", __result={<std::iterator<std::output_iterator_tag,void,void,void,void>> = {<No data fields>}, _M_stream = 0x1c7280, _M_string = 0x0}) at stl_algobase.h:273 #3 0x08056453 in std::__copy_ni2<char const*, std::ostream_iterator<char, char, std::char_traits<char> > > (__first=0x0, __last=0x8c3bd13 "}..\" .. {dfgdg(){aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}ddd // ", 'g' <repeats 12 times>, "\nddd // ostekake\nddd // pannekake\n/*\n", 'd' <repeats 12 times>, "\n*/\n/*", 'e' <repeats 15 times>, "*/\n}\n\n", __result=Cannot access memory at address 0x0 ) at stl_algobase.h:308 #4 0x08054719 in std::__copy_ni1<__gnu_cxx::__normal_iterator<char const*, std::string>, std::ostream_iterator<char, char, std::char_traits<char> > > (__first={_M_current = 0x0}, __last={_M_current = 0x8c3bd13 "}..\" .. {dfgdg(){aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}ddd // ", 'g' <repeats 12 times>, "\nddd // ostekake\nddd // pannekake\n/*\n", 'd' <repeats 12 times>, "\n*/\n/*", 'e' <repeats 15 times>, "*/\n}\n\n"}, __result=Cannot access memory at address 0x0 ) at stl_algobase.h:317 #5 0x080523bb in std::copy<__gnu_cxx::__normal_iterator<char const*, std::string>, std::ostream_iterator<char, char, std::char_traits<char> > > (__first={_M_current = 0x0}, __last={_M_current = 0x8c3bd13 "}..\" .. {dfgdg(){aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}ddd // ", 'g' <repeats 12 times>, "\nddd // ostekake\nddd // pannekake\n/*\n", 'd' <repeats 12 times>, "\n*/\n/*", 'e' <repeats 15 times>, "*/\n}\n\n"}, __result=Cannot access memory at address 0x0 ) at stl_algobase.h:358 #6 0x08050be8 in boost::xpressive::operator<< <__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::char_traits<char> > (sout=@0x1c7280, sub=@0x8c3be70) at sub_match.hpp:139 #7 0x080524d3 in output_nested_results::operator()<__gnu_cxx::__normal_iterator<char const*, std::string> > (this=0xbfe80d3c, what=@0x8c3bc20) at test1.cpp:28 #8 0x08050ca6 in std::for_each<std::_List_const_iterator<boost::xpressive::match_results<__gnu_cxx::__normal_iterator<char const*, std::string> > >, output_nested_results> (__first={_M_node = 0x8c3bc18}, __last={_M_node = 0xbfe80e38}, __f={tabs_ = 0}) at stl_algo.h:158 #9 0x0804ec89 in main () at test1.cpp:94
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk