boost :: spirit :: qi ключевые слова и идентификаторы

Я видел несколько постов, связанных с нюансами использования ключевого слова / идентификатора в грамматиках ци, но я не совсем понимаю, как должен работать подход, продемонстрированный в примерах повышения ...

Объявление ключевых слов:

qi::symbols<char> keywords;

Пример набора ключевых слов:

keywords.add
        ("foo")
        ("bar")
        ;

Объявление правила идентификатора:

qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;

Вот как правило идентификатора определяется в примерах qi calc и compiler:

identifier = !keywords >> qi::raw[ qi::lexeme[ ( qi::alpha | '_' ) >> *( qi::alnum | '_' ) ] ];

Возможно, я неправильно читаю синтаксис ци, но мне кажется, что это не примет литерал, который соответствует илиначинается с ключевое слово Отклонение полного соответствия ключевых слов - желаемое поведение. Но я хочу принять "food" в качестве идентификатора, даже если он начинается с ключевого слова "foo". Это похоже на довольно стандартный сценарий использования, но возникают проблемы с поиском документации, которая действительно его фиксирует.

Может ли кто-нибудь предложить правило идентификатора, которое отклоняет только точные совпадения с ключевыми словами?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос