boost :: spirit - парсинг стиля AST из случайно расположенных записей - PullRequest
0 голосов
/ 16 июня 2011

У меня есть эти данные в моем файле:

#TITLE:Destiny;
#SUBTITLE:;
#ARTIST:Smiley;
#BACKGROUND:bg.png;
#SAMPLESTART:43.960;
#SAMPLELENGTH:12.000;

Я хочу проанализировать их, используя AST, в структуру, подобную этой:

struct data {
   std::string title, subtitle, artist, background;
   double samplestart, samplelength;
};

Примечание: записи в файле могутпоявляются в любом порядке.

Я думал о чем-то вроде этого:

struct prs : qi::symbols< char, qi::parser<...> > {
   prs() {
     add
       ("TITLE", link_to_some_str_parser)
       ("SAMPLESTART", link_to_some_dbl_parser);
   }
};

И затем использовал его, чтобы добраться до правильного анализатора во время выполнения, возможно, используя синтаксис [] для хранения проанализированногорезультат в некоторую переменную.

Теперь главный вопрос.Будет ли это даже скомпилировать?Можно ли использовать таким образом символы qi :: и имеет ли это какой-то смысл?Как бы вы поступили иначе?

Спасибо!Alex

1 Ответ

0 голосов
/ 22 июня 2011

Я бы предложил использовать синтаксический анализатор перестановок (см. здесь ), который позволяет сопоставлять множество альтернатив в любой последовательности.

...