Использование Boost.Spirit.Qi с пользовательским лексером - PullRequest
2 голосов
/ 04 июня 2011

Я перекопал всю документацию и не смог найти пример.Все примеры либо анализируют символьные данные, либо используют Spirit.Lex.Прости меня, если я что-то пропустил.

Может ли кто-нибудь привести пример или указать учебник, как использовать Boost.Spirit.Qi с моим пользовательским лексером?Например:

vector<MyTokenType> tokens = GetTokens();
// use boost spirit to work with MyTokenType on per-token granularity

1 Ответ

3 голосов
/ 04 июня 2011

Вам нужно будет сделать несколько вещей:

a) представить последовательность токенов в виде диапазона итераторов, которые нужно будет передать в parse / фразу_parse b) добавить оператор преобразования по умолчанию в ваш тип токенапредоставление идентификатора токена

struct token
{
    operator int() const { return id; }
};

, который позволяет использовать qi::char_(ID) в качестве компонента синтаксического анализа, сопоставляющего токен с идентификатором токена ID.

Более сложная интеграция атрибутов (значений токена)посмотрите на Spirit.Lex, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...