![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Distinct ParserBoost , ,
Distinct ParsersРазличные парсеры являются утилитарными парсерами, которые гарантируют, что соответствующий ввод не сразу последует за запрещенной моделью. Их типичное использование состоит в том, чтобы отличить ключевые слова от идентификаторов. distinct_parserОсновное использование distinct_parser означает замену str_p parser. Например, декларация_правило в следующем примере:
будет правильно соответствовать входной "декларе abc " , но также входной "деклареабк " , что обычно не предназначено. Чтобы избежать этого, мы можем использовать distinct_parser:
keyword_p работает так же, как и str_p parser, но совпадает только тогда, когда соответствующий вход не сразу последует один из символов из набора, переданного конструктору keyword_p. В примере < < деклара > > не может быть немедленно за ней следуют ни один алфавитный характер, ни какое-либо число, ни подчеркивание. Смотрите полный пример здесь . distinct_directiveДля более сложных случаев, например, когда ключевые слова хранятся в таблице символов, мы можем использовать distinct_directive.
dynamic_distinct_parser and dynamic_distinct_directiveВ некоторых случаях количество запрещенных последующих персонажей недостаточно. Например, условности имен ASN.1 позволяют идентификаторам содержать тире, но не двойные махи (что знаменует собой начало комментария). Кроме того, идентификаторы не могут закончиться тире. Таким образом, соответствующее ключевое слово не может сопровождаться каким-либо буквенно-цифровым характером или ровно одним тире, но за ним могут последовать два даши. Это когда dynamic_distinct_parser и dynamic_distinct_directive в игру. Конструктор dynamic_distinct_parser принимает парсер, который соответствует любому входу, который НЕ следует за ключевым словом.
Поскольку dynamic_distinct_parser использует внутреннее правило, его тип зависит от типа сканера. Таким образом, keyword_p не должно быть определено глобально, а скорее в грамматике. Смотрите полный пример здесь. How it worksКогда keyword_p_1 и keyword_p_2 определены как
парсеры
эквивалентны правилам
Copyright © 2003-2004
Vaclav Vesely Статья Distinct Parser раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |