Описание тега boost-spirit-qi

None Практичная масштабируемая библиотека синтаксического анализа для C++
1 ответ

Обработка исключений в семантических действиях

Рассмотрим следующий парсер: class test { public: static test from_string(const string &str); //throws! }; template <typename Iterator = string::const_iterator> struct test_parser : grammar<Iterator, test(), blank_type> { test_parser…
28 окт '13 в 08:34
1 ответ

Парсинг std::vector<int> из целых чисел через запятую

Я пытаюсь реализовать очень специфическую грамматику, которая требует от меня в определенный момент для анализа списка целых чисел через запятую. Правило ци выглядит следующим образом: qi::rule&lt;Iterator, ascii::space_type&gt; ident; qi::rule&lt;I…
12 фев '17 в 18:49
1 ответ

Почему я не могу разобрать это double_?

Когда я анализирую входные данные как std::string, я получаю строку, но когда я анализирую это как double_, структура fusion содержит очень небольшое число, а не то, что ожидается. #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;boost/fusi…
06 ноя '14 в 23:23
1 ответ

Передача строки пути к файлу в семантическое действие в Boost.Spirit

Я новичок в Boost.Spirit, и у меня есть вопрос, связанный с мини-интерпретатором, который я пытаюсь реализовать с помощью библиотеки. В качестве подзадачи анализа моего языка мне нужно извлечь путь к файлу из ввода в форме: "path = \"/path/to/file\"…
02 мар '11 в 12:39
1 ответ

BOOST_FUSION_ADAPT_STRUCT не принимает правильное количество аргументов

Я использую Boost::Spirit для разбора текста в структуры. Это требует использования BOOST_FUSION_ADAPT_STRUCT для анализа текста и непосредственного сохранения в структуре. Я знаю, что макрос принимает 2 аргумента: имя структуры в качестве первого а…
05 авг '11 в 18:36
1 ответ

Boost Spirit QI: автоматическое удержание правила для кортежа с последовательностью внутри альтернативной функции

Я пытаюсь использовать автоматическое удержание для назначения в кортеж из трех элементов. Второй тип - это строка, а третий - вектор строки (тип первого параметра не так важен для этого примера). Я пытаюсь понять, почему следующий код не компилируе…
14 авг '18 в 03:14
1 ответ

spirit::qi:: грамматическое имя с различным размером символа

Я делаю парсер с spirit::qi и стремлюсь сделать его совместимым с разными размерами символов. template &lt; typename Iterator &gt; struct grammar : qi::grammar &lt; Iterator &gt; { grammar () : grammar::base_type ( file, alter_string_size_to &lt; It…
28 янв '12 в 03:30
1 ответ

Не удается увеличить строку цитаты при разборе духа

Это мой грамматик unesc_char.add(L"\\a", L'\a')(L"\\b", L'\b')(L"\\f", L'\f')(L"\\n", L'\n') (L"\\r", L'\r')(L"\\t", L'\t')(L"\\v", L'\v')(L"\\\\", L'\\') (L"\\\'", L'\'')(L"\\\"", L'\"'); unesc_str = '\"' &gt;&gt; *((boost::spirit::standard_wide::c…
22 фев '18 в 11:42
1 ответ

Разбор структуры с массивами с помощью Boost Spirit

Прежде чем я начну, да, я знаю, что есть много постов, связанных с этой темой, я провожу больше дня, читая, но мои знания о Boost::spirit ограничены, поэтому я могу понять, как решить мою проблему. Я беру пример с Boost Employee и модифицирую его, п…
12 апр '15 в 17:43
1 ответ

Создание собственного дерева выражений в духе: Ци (без Utree или Boost::Variant)

Прежде всего, если гораздо проще использовать Boost Variant или Utree, то я с ними соглашаюсь и постараюсь решить свои проблемы с ними в другой теме. Тем не менее, я бы очень хотел иметь возможность построить дерево, как у меня ниже. Фон, игнорируйт…
1 ответ

Разбор конца фразы перед началом в Boost.Spirit

Я пытаюсь заставить Boost.Spirit разобрать искаженные символы MSVC. Они принимают форму: ?myvolatileStaticMember@myclass@@2HC что означает "volatile int myclass::myvolatileStaticMember". "Ключом" к синтаксическому анализу является двойной символ "@@…
04 дек '12 в 21:56
1 ответ

Boost.Spirit - Как использовать повтор для разбора в структуру?

Я пытаюсь создать небольшую программу для анализа информации об использовании процессора из /proc/stat с помощью Boost.Spirit. В основном это работает, но я не могу заставить мою грамматику компилироваться при использовании repeat. Что мне не хватае…
30 янв '16 в 06:04
0 ответов

Boost:: Spirit добавить вектор

У меня проблема со вставкой данных в вектор с помощью phoenix::insert, Код должен анализировать ввод, такой как "(переместить элемент x y z - loc r - робот) в struct Predicate с именем "move " и 3 переменными типа loc, 1 переменная типа robot и 1 пе…
19 фев '13 в 21:34
2 ответа

Boost Бинарный парсер Endian не работает?

Я изучаю, как использовать двоичный парсер endian. Я пишу небольшую тестовую программу парсера в соответствии с приведенными здесь примерами и примерами, но она не работает должным образом. Это дало мне сообщение:"Ошибка: нет совпадения". Вот мой ко…
0 ответов

Как преобразовать boost::wave::cpplexer::lex_token в число внутри семантического правила Boost Spirit?

У меня есть потомок Spirit от qi::primitive_parser, который возвращает lex_token<>: struct TokenParser : boost::spirit::qi::primitive_parser&lt;TokenParser&gt; { TokenParser(boost::wave::token_id _id) : id(_id) {} template &lt;typename Context, type…
30 апр '15 в 23:04
1 ответ

Разбор химической формулы со смесями элементов

Я хотел бы использовать boost::spirit для извлечения стехиометрии соединений, состоящих из нескольких элементов, из грубой формулы. В данном соединении мой парсер должен уметь различать три вида паттернов химических элементов: природный элемент из с…
21 мар '17 в 20:18
2 ответа

Boost Spirit Qi проверяющий анализатор ввода

У меня есть базовая грамматика Boost Spirit Qi для анализа IP-порта или диапазона IP-портов, т.е. "6322" или же "6322-6325", Грамматика выглядит так: template&lt;class It&gt; void init_port_rule(u16_rule&lt;It&gt;&amp; port) { port = boost::spirit::…
11 ноя '17 в 23:24
1 ответ

C++ Boost Spirit attr_cast не вызывает ожидаемый tranform_attribute

Я работаю над синтаксическим анализатором строковых литералов C++ с бодрым духом. Это то, что я до сих пор: #include &lt;boost/config/warning_disable.hpp&gt; #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;boost/spirit/include/phoenix.hpp&…
05 окт '13 в 03:57
1 ответ

Как использовать boost::spirit::qi с std::vector<token_type> вместо std::string

В приложении я в основном хочу иметь фазу "предварительного разбора", где я настраиваю поток токенов, прежде чем парсер Q сможет его увидеть. Одним из способов сделать это было бы иметь какой-то "адаптер lexer", который построен из lexer и сам по се…
1 ответ

Пример парсера ключевого слова Compile Boost Spirit

У меня возникли проблемы с компиляцией примера кода для анализатора ключевых слов boost. я использую boost 1.63.0 а также gcc 6.3.0 и указав C++ 11. Я запустил: g++ -std=c++11 -I boost-1.63-0/include keywords-1.cpp и был поражен массивной стеной оши…
16 мар '17 в 16:08