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

Boost.Spirit - это набор библиотек C++ для синтаксического анализа и генерации вывода, реализованный как доменные встраиваемые языки (DSEL) с использованием шаблонов выражений и метапрограммирования шаблонов. Библиотеки Spirit позволяют писать целевую грамматику исключительно на C++. Встроенные спецификации грамматики могут свободно смешиваться с другим кодом C++ и, благодаря генеративной мощности шаблонов C++, могут быть немедленно выполнены.
1 ответ

Как разобрать файл сложной строки с помощью Boost::Spirit

Я хотел бы проанализировать файл с помощью Boost::Spirit, и я хотел бы передать проанализированные данные в мой класс. Я никогда не использовал Boost::Spirit прежде, поэтому я не могу решить, какой из способов решить эту проблему лучше. Моя файловая…
09 май '13 в 10:26
2 ответа

Правило разборчивости не применяется

Я не вижу свою ошибку здесь.. это правило разбирает некоторые вещи в порядке, но последние два образца нет. Может кто-нибудь, пожалуйста, дайте мне подсказку.. Цель - это синтаксический анализатор, который может идентифицировать доступ к свойству чл…
13 окт '17 в 11:43
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 ответ

В boost::spirit::lex, первый раз занимает больше времени, следующий раз будет намного короче

Я передаю серию текста в мой sip-анализатор. Первый занимает больше всего времени, независимо от того, какой из них первый. Интересно, есть ли какая-либо работа по инициализации, когда spirit::lex выполняет первый анализ? template <typename Lexer…
10 окт '13 в 03:43
1 ответ

boost::spirit (classic): разница между | и ^?

Док говорит (дух классика): a | b, Union, Match a or b. Also referred to as alternative a ^ b, XOR, Match a or b, but not both. Кто-нибудь может дать мне практический пример, когда это имеет значение? РЕДАКТИРОВАТЬ: Дайте мне практический пример, по…
29 июн '17 в 10:05
1 ответ

Используйте указатель как синтезированный атрибут в анализаторе буст-спирита

Я хочу написать анализатор духа для дерева объектов, которые я не могу изменить. Чтобы упростить код, я могу использовать пример Expression: class Expr { public: virtual ~Expr() = 0; }; Expr::~Expr() {} class Plus : public Expr { public: Plus (Expr*…
13 сен '12 в 15:52
1 ответ

C++Builder XE10.2 [Ошибка ilink32] Неустранимо: превышен лимит памяти для блока кэша номеров строк в модуле <somethingsomething.cpp>

Полностью застрял на этапе компоновки при переносе группы проектов в C++ Builder XE10.2.Win32 target, clang compiler. Модуль, который вызывает сбой ilink32 с вышеуказанной ошибкой, использует boost::spirit classic.То, что озадачивает, - то, что друг…
28 апр '17 в 06:11
1 ответ

Повысить дух lex и ци. Интеграция пропускающего парсера

редактировать: я вырвал лексер, так как он не интегрируется с ци и просто запутывает грамматику (см. здесь). Я пытаюсь вырастить грамматику поверх основы духа lex. Когда я пытаюсь переместить анализатор пропуска в грамматику, я получаю ошибки. Итак,…
04 окт '13 в 15:18
1 ответ

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

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

Повышение духа 2: есть ли способ узнать, каков процент прогрессирования парсера?

Мне удалось разобрать файл pgn на несколько игр, в основном благодаря этому форуму. Однако, поскольку в файлах, с которыми мне приходится иметь дело, очень много игр, процесс может занять две минуты на моем последнем компьютере. Вот почему я хотел б…
10 дек '15 в 20:45
2 ответа

Масштабирование в boost::spirit's assign_a

Я углубляюсь в boost::spirit, чтобы разобрать протокол на основе ASCII. Мне удалось извлечь значения из строки, используя такие правила: rule&lt;&gt; Speed = uint_parser&lt;unsigned int,10,3,3&gt;()[assign_a(buffer.speed)]; Мне также удается соедини…
18 июн '09 в 14:04
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 Spirit. Я создал класс грамматики и свои структуры для анализа моих команд. Я также хотел бы отследить, на какой линии была найдена команда, и проанализировать ее в моих …
27 окт '17 в 18:46
2 ответа

Разбор феникса

У меня есть код парсера, как показано ниже для функции "TakeOne". Функция TakeOne работает так, как будто возвращает первый параметр, который не равен "%null%". Пример: TakeOne( %null% , '3', 'defaultVal'); --&gt; result = 3 TakeOne( 5 , 'asd', 'def…
05 ноя '13 в 08:47
1 ответ

Повысить совместимость атрибутов спиртовой строки

Название может быть не очень хорошо выражено. Пожалуйста, прокомментируйте правильный технический термин. Сегодня я заметил следующее. Дано const std::string in( "QWERT" ); std::string out; boost::spirit::qi::parse( in.begin(), in.end(), +boost::spi…
24 май '13 в 19:38
2 ответа

Связывание ошибок при отдельном парсере с использованием boost spirit x3

Я пытаюсь разделить мой анализатор Boost Spirit x3 на разные файлы _def и.cpp, используя BOOST_SPIRIT_DEFINE/DECLARE/INSTANTIATE, но я продолжаю получать ошибку связывания. ЗДЕСЬ мой парсер, который отделен. Ошибка компоновщика читает &lt;artificial…
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
2 ответа

Boost Spirit Qi: Подходящий язык / инструмент для анализа / вырезания "многострочного" файла данных?

Я хочу применить к файлам данных различные операции: алгебру множеств, статистику, отчетность, изменения. Но формат файлов далек от примеров кода и немного странен. Существуют разные виды предметов, типы предметов, и некоторые из них объединяются в …
22 янв '16 в 17:23
2 ответа

boost::spirit compile проблема с BOOST_FUSION_ADAPT_STRUCT

Я очень новый, чтобы повысить:: дух / слияние. Может кто-нибудь объяснить мне, почему следующее не компилируется? Он компилируется и работает нормально, если я поставлю m_name а также m_settings переменные прямо в структуре config, но не компилирует…
13 дек '11 в 22:37