Использование Boost.Spirit.Qi с пользовательским лексером
Я перерыл всю документацию и не смог найти пример. Все примеры либо анализируют символьные данные, либо используют Spirit.Lex. Прости меня, если я что-то пропустил.
Может ли кто-нибудь привести пример или указать учебник о том, как использовать Boost.Spirit.Qi с моим пользовательским лексером? Например:
vector<MyTokenType> tokens = GetTokens();
// use boost spirit to work with MyTokenType on per-token granularity
1 ответ
Вам придется делать несколько вещей:
а) выставить последовательность токенов как диапазон итераторов, которые нужно будет передать в parse/ фразу_parse; б) добавить оператор преобразования по умолчанию в тип вашего токена, предоставив идентификатор токена
struct token
{
operator int() const { return id; }
};
что позволяет использовать qi::char_(ID)
как компонент синтаксического анализа, соответствующий токену с идентификатором токена ID
,
Интеграция атрибутов (значений токенов) более сложна, посмотрите на Spirit.Lex, как это можно сделать.