Я хотел бы создать парсер, основанный на boost spirit qi, который сможет анализировать список целых значений. Это, очевидно, очень просто, и есть множество примеров. Список, хотя это немного умнее, чем через запятую, и это может выглядеть так:boost spirit qi соответствует нескольким элементам
17, 5, Фибоначчи (2, 4), 71, 99, диапазон (5, 7)
результат анализатор должен быть станд :: вектор со следующими значениями:
17, 5, 1, 2, 3, 71, 99, 5, 6, 7
Где Фибоначчи (2, 4) приводит к 1, 2, 3 и диапазон (5, 7) приводит к 5, 6, 7
Редактировать: Я ищу, если у меня уже есть парсеры, у которых есть атрибут ute int (скажем, int_) и парсеров, которые имеют атрибут std :: vector fibonacci и range, как я могу комбинировать результаты в одном парсере. Что-то вроде:
list %= *(int_ | elements [ fibonacci | range ]);
Где элементов, чтобы быть магией, которая будет делать необходимой магию результаты формы Фибоначчей, чтобы соответствовать в списке.
Примечание: Я не ищу решение, которое включает в себя добавление функции как
list = *(int_[push_back(_val, _1)] | fibonacci[push_back(_val, _1)] | range[push_back(_val, _1)] ]);
, что это здорово, что я могу сказать. Мне нужно некоторое время, чтобы поглотить его, хотя – gsf
@gsf Это действительно очень мало, весь «трюк» находится в 'phx :: bind (_1, ...)', чтобы вызвать функцию «зарегистрирована» с помощью '_functions'. – sehe
Теперь это быстро и грязно. Если вы что-то еще более развили, см. [Этот ответ] (http://stackoverflow.com/a/17013713/85371), который анализирует грамматику выражений, которая включает в себя оценку функции и использует представление AST. См. [Другой ответ там] (http://stackoverflow.com/a/17014063/85371) для подхода, который пропускает создание AST (как в этом ответе). – sehe