Повысить дух получить позицию соответствия

Я определил свою собственную грамматику, и я бы хотел проанализировать cstring (технически mmaped-файл, отбрасываемый на char *). Я могу реагировать на каждое совпадение в моей грамматике (я определил действия для интересных), и он отлично работает, но я понятия не имею, как получить совпадение каждого совпадения с его позицией внутри ввода cstring. Я должен реагировать на каждое частичное совпадение, где каждая часть определяется как автономное qi :: rule.

Я узнал некоторые уроки о том, как получить позицию ошибки во время разбора, но ничего, что покрывает эту тему.

Пример:

class MyGrammar : public qi::grammar
{
public:
  MyGrammar(): base_type(main)
  {
    main = *(qi::as_string
          [qi::raw
        [
          (some_rule >> another_rule)
        ]
          ][boost::bind(&MyGrammar::match, this, _1)])
  }
  match(const std::string &match)
  {
    //I'd like to have an position of match inside a passed iterator
  }
private:
  qi::rule main;
};
0
nl ja de
Как это возможно, если начальный итератор может иметь тип const char *?
добавлено автор Dejwi, источник
ОК. Ты прав. Но похоже, что boost spirit устанавливает значение начала в конце разбора. И я все еще не могу получить позицию каждого матча (только последний).
добавлено автор Dejwi, источник
Это не то, что я ищу. Я добавил пример.
добавлено автор Dejwi, источник
@Dejwi const char * является char const * , а не char * const или char const * const . I.e .: тривиально изменчивый
добавлено автор sehe, источник
boost :: spirit :: qi :: parse должен мутировать стартовый итератор в положение, на которое он остановился.
добавлено автор 111111, источник
да. если вы сделали std :: copy (first, last, std :: ostream_iterator (std :: cout, "")); после вызова qi :: parse` первый итератор должен переместиться туда, где он тоже появился.
добавлено автор 111111, источник
Если я правильно понял ваш вопрос (всегда проще, когда вы добавляете простой пример в код), этот пример может помочь. Вам просто нужно будет использовать boost :: spirit :: repository :: qi :: iter_pos везде, где вы хотите захватить текущую позицию.
добавлено автор user1252091, источник

Ответов нет

0
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest