WikiDer > Фреймворк Spirit Parser - Википедия
Эта статья не цитировать любой источники. (Ноябрь 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
В Фреймворк Spirit Parser является объектно-ориентированный рекурсивный спуск генератор парсеров фреймворк, реализованный с использованием шаблона метапрограммирование техники. Шаблоны выражений позволяют пользователям приблизиться к синтаксису расширенная форма Бэкуса – Наура (EBNF) полностью в C ++. Объекты парсера состоят из перегрузка оператора и результат - возврат LL (∞) парсер, способный к синтаксическому анализу двусмысленный грамматики.
Дух можно использовать как для лексика и синтаксический анализ, вместе или по отдельности.
Эта структура является частью Библиотеки Boost.
Операторы
Из-за ограничений языка C ++ синтаксис Spirit был разработан на основе приоритетов операторов C ++, но имеет сходство с обоими EBNF и обычные выражения.
синтаксис | объяснение |
---|---|
х >> у | Сопоставьте x, за которым следует y. |
х> у | После сопоставления x ожидайте y. |
*Икс | Совпадение x повторяется ноль или более раз. Это представляет собой Клини звезда; В C ++ отсутствует унарный постфикс оператор *. |
х | у | Сопоставьте x. Если x не совпадает, попробуйте сопоставить y. |
+ х | Соответствует серии из одного или нескольких вхождений x. |
-Икс | Сопоставьте x ноль или один раз. |
х и у | Сопоставьте x и y. |
х - у | Соответствует x, но не y. |
х ^ у | Сопоставьте x, y или оба в любом порядке. |
х || у | Сопоставьте x, y или x, за которым следует y. |
Икс [ function_expression ] | Выполнить функцию / функтор, возвращенную function_expression, если x соответствует. |
( Икс ) | Match x (может использоваться для группировки приоритетов) |
х% у | Соответствует одному или нескольким вхождениям x, разделенным вхождениями y. |
~ х | Соответствует чему угодно, кроме x (только с классами символов, такими как ch_p или alnum_p) |
Пример
В этом примере показано, как использовать выражение встроенного анализатора с семантическим действием.
#включают <string>#включают <iostream>#включают <boost/spirit/include/qi.hpp>#включают <boost/spirit/include/phoenix.hpp> int главный(){ пространство имен ци = способствовать росту::дух::ци; стандартное::нить Вход; стандартное::cout << "Введите строку: п"; Getline(стандартное::cin, Вход); стандартное::cout << "Получил '" << Вход << "'. п"; беззнаковый считать = 0; /* Затем проанализируйте ввод (input.c_str ()), с использованием парсера, построенного со следующей семантикой: Ноль или более вхождений ( буквальная строка "кошка" (при совпадении увеличить счетчик "count") или любой символ (который будет пропущен) ) Парсер создается компилятором с использованием перегрузки оператора и сопоставление шаблонов, поэтому фактическая работа выполняется внутри qi :: parse (), а выражение, начинающееся с *, только инициализирует объект правила, который функция использует. */ авто правило = *(ци::горит("Кот") [ ++ци::_val ] | ци::пропускать[ци::char_]); ци::разбирать(Вход.начинать(), Вход.конец(), правило, считать); // Наконец, покажем результаты. стандартное::cout << "Вход содержал" << считать << "появления слова" кошка " п";}
внешняя ссылка
- Фреймворк Spirit Parser Страница SourceForge
- Документация в проекте Boost
- Статья дизайнера Джоэля де Гусмана о духе в журнале доктора Добба
Этот инструмент для программирования-связанная статья является заглушка. Вы можете помочь Википедии расширяя это. |