Приветствую!
Пожалуйста помогите разобраться почему не работает парсер Boost::Spirit (Classic)
Хочу отпарсить вот такой вот файл:
| Цитата | (0 1223123) (2 3231233) (31 укукукучик) .....
|
Пытаюсь обработать таким вот парсером:
| Код | if(parse(buffer, // Parser Start
*( '(' >>
int_p[push_back_a(blocks)] >>
~ch_p('x') // Вот тут точно не знаю что должно стоять. Мне нужно принять всё что может быть. Даже возможно такую конструкцию: (0 tes(tr io 12 32))
>> ')' )
,space_p
// Parser End ).hit)
|
Но почему то выдаёт только номер первого блока.
Вот весь код примера:
| Код | #include <QtCore/QCoreApplication>
#include <fstream> #include <iostream> #include <string> #include <sstream> using namespace std;
#include <boost/spirit/include/classic_core.hpp> using namespace boost::spirit::classic;
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);
ifstream ifs; ifs.open("_g.txt", std::ios::in);
if(ifs.is_open()) { char * buffer; int length;
//узнаем размер файла, и выделяем память в строке ifs.seekg( 0, std::ios_base::end ); length = ifs.tellg(); ifs.seekg( 0, std::ios_base::beg );
// выделяем память: buffer = new char [length];
// читаем как блок: ifs.read(buffer,length); ifs.close();
vector<int> blocks;
if(parse(buffer, // Parser Start
*( '(' >> int_p[push_back_a(blocks)] >> ~ch_p('x') >> ')' )
,space_p
// Parser End ).hit) {
for(unsigned i = 0; i < blocks.size(); i++) { stringstream oss; oss << i;
cout << "block: " << oss.str() << endl; } } else { cout << "Parse Error..." << endl; }
delete[] buffer; } else { cout << "Open Error..." << endl; }
cout << "All Done!" << endl;
return a.exec(); }
|
Заранее спасибо! |