2014-02-20 2 views
1

Как настроить правило, которое возвращает заданный вывод, а не что-то проанализированное из моего входного текста?Дух Ци: Вставка предварительно заданного вывода в правило

Как этот пример: GiveQuoteOrText сначала попытается проанализировать ввод как строку с кавычками, используя Quoted, и если это не сработает, всегда следует выводить «Текст!». независимо от ввода.

qi::rule<Iterator, std::string()> GiveQuoteOrText; 
qi::rule<Iterator, std::string()> Quoted; 

Quoted %= '"' >> *(char_ - '"') > '"'; 
GiveQuoteOrText %= Quoted | OUTPUT("Text!"); //made up an OUTPUT command 

Возможно ли это? Есть ли способ контролировать, как итератор продвигается, когда это делается?

ответ

3
GiveQuoteOrText %= Quoted | qi::attr("Text!"); 

Если объект более активное участие вы можете использовать qi::eps:

rule = qi::eps[qi::_val = phx::construct<MyObject>(args)] 

Это в каждом случае просто сменив правила без разбора ничего, так что итератор не двигается. Если вы хотите, чтобы он переместился, вам нужно проанализировать соответствующую часть и использовать qi::omit для блокировки атрибутов (если таковые имеются).

 Смежные вопросы

  • Нет связанных вопросов^_^