
On Tuesday 03 January 2006 23:42, Bjørn Roald wrote:
On Tuesday 03 January 2006 23:19, Eric Niebler wrote:
If you do, please post code that reproduces the error and I'll fix it. Even if the recent changes fixed your problem, if you send the code anyway, I'll add it to xpressive's regression test. (Hint: you should do this.)
I will post cleaned up code tomorrow. At least if problem does not go away. Thanks.
I had no joy with updating my cvs working area today :-( --- see seperate post. Until I get the latest cvs tested I post the source which I cleaned up somewhat, in case you want to use it: #include <iostream> #include <string> #include <boost/xpressive/xpressive.hpp> using namespace boost::xpressive; // Displays nested results to std::cout struct output_nested_results { int tabs_; output_nested_results( int tabs = 0 ) : tabs_( tabs ) { } template< typename BidiIterT > void operator ()( match_results< BidiIterT > const &what ) const { // output the match std::cout << what[0] << '\n'; // comment out this and it works // output any nested matches std::for_each( what.nested_results().begin(), what.nested_results().end(), output_nested_results( tabs_ + 1 ) ); } }; int main() { sregex line_comment = "//" >> -*_ >> _n; sregex scoped_block; scoped_block = as_xpr('{') >> *( keep( +~(set='{','}') ) | by_ref(scoped_block) ) >> '}'; sregex boost_namespace_begin = as_xpr( "namespace" ) >> +space >> "boost" >> +space >> '{'; sregex boost_namespace_body = *( line_comment | // comment out this and it works scoped_block | space | *( keep( +~( set='{', '}' ) ) ) ); sregex boost_namespace_end = as_xpr( '}' ); sregex boost_namespace = boost_namespace_begin >> *space >> boost_namespace_body >> *space >> boost_namespace_end ; smatch what; std::string str = "#include <boost/xxxx.hpp>\n" "namespace boost {\n" "gruble \"grot}..\" .. {dfgdg(){aa} fddd \"dffdfd\\\"dfdfgg\"}{bb}" "}\n"; if( regex_search( str, what, boost_namespace ) ) { // display the whole match std::cout << what[0] << '\n'; // can be removed, but only prints first line ??? // display the nested results std::for_each( what.nested_results().begin(), what.nested_results().end(), output_nested_results() ); } } I put comments on 3 lines which seem to effect the result negatively. My program output is: namespace boost { namespace boost { /bin/bash: line 1: 11082 Segmentation fault bin/gcc/debug/test_bug regards, bjorn