Описание тега 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<Iterator, ascii::space_type> ident; qi::rule<I…
12 фев '17 в 18:49
1
ответ
Повышение духа 2: есть ли способ узнать, каков процент прогрессирования парсера?
Мне удалось разобрать файл pgn на несколько игр, в основном благодаря этому форуму. Однако, поскольку в файлах, с которыми мне приходится иметь дело, очень много игр, процесс может занять две минуты на моем последнем компьютере. Вот почему я хотел б…
10 дек '15 в 20:45
2
ответа
Масштабирование в boost::spirit's assign_a
Я углубляюсь в boost::spirit, чтобы разобрать протокол на основе ASCII. Мне удалось извлечь значения из строки, используя такие правила: rule<> Speed = uint_parser<unsigned int,10,3,3>()[assign_a(buffer.speed)]; Мне также удается соедини…
18 июн '09 в 14:04
1
ответ
Почему я не могу разобрать это double_?
Когда я анализирую входные данные как std::string, я получаю строку, но когда я анализирую это как double_, структура fusion содержит очень небольшое число, а не то, что ожидается. #include <boost/spirit/include/qi.hpp> #include <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'); --> 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, но я продолжаю получать ошибку связывания. ЗДЕСЬ мой парсер, который отделен. Ошибка компоновщика читает <artificial…
08 ноя '16 в 21:03
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 = '\"' >> *((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