I created this parser and it is working for me except the detail: //------------------ //the body of the block cpp_code_block_text = *(anychar_p-ch_p('{')-ch_p('}')); //the code begins with '{' cpp_code_block_begin_p = ch_p('{'); //the code ends with '}' cpp_code_block_end_p = ch_p('}'); //parser: cpp_code_block_p = cpp_code_block_begin_p >> repeat_p (0, 100)[(cpp_code_block_p|cpp_code_block_text)] >> cpp_code_block_end_p; ---------------------- Here is the text I'm using for tests: {asas {bbbbbb bbb b b { asa}bb bbb b bb } as {aaaa} {aaaacc} asasa {} aaa } And the problem is in repeat_p (0, 100). I'd like to use * instead but it does not work for me because the parser runs forever. 100 means the number of blocks cpp_code_block_p or cpp_code_block_text. Where is the problem? Thank you very much for reply.