Я видел несколько сообщений, связанных с нюансами использования ключевых слов/идентификаторов в грамматиках qi, но я не могу понять, как должен работать подход, продемонстрированный в примерах повышения...
Декларация ключевых слов:
qi::symbols<char> keywords;
Пример набора ключевых слов:
keywords.add
("foo")
("bar")
;
Объявление правила идентификатора:
qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;
Вот как определяется правило идентификатора в примерах qi calc и компилятора:
identifier = !keywords >> qi::raw[ qi::lexeme[ ( qi::alpha | '_' ) >> *( qi::alnum | '_' ) ] ];
Возможно, я неправильно читаю синтаксис qi, но мне кажется, что он не будет принимать любой литерал, который соответствует ключевому слову или начинается с ключевого слова. Желаемым поведением является отклонение полного соответствия ключевому слову. Но я хочу принять «еду» в качестве идентификатора, даже если она начинается с ключевого слова «foo». Это кажется довольно стандартным вариантом использования, но у вас возникли проблемы с поиском документации, которая действительно фиксирует это.
Может ли кто-нибудь предложить правило идентификатора, которое отклоняет только точные совпадения с ключевыми словами?
Спасибо!