Использование 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, как это можно сделать.

Другие вопросы по тегам