Вопросы по теме 'boost-spirit-x3'

spirit x3 не может распространять атрибуты типа optional ‹vector›
Простой парсер, как на Coliru . Синтаксический анализатор -(+x3::alpha) должен иметь возможность распространять атрибут типа boost::optional<std::string> , как это делает Qi. Но не компилируется. std::string const input = "abc";...
292 просмотров

Объединение правил во время выполнения и возврата правил
Я пытаюсь написать сложный парсер, созданный поверх Spirit-X3, поэтому мне нужно кое-что знать: ♦ Как комбинировать правила во время выполнения. (с уловкой Набиалека) ♦ Можно ли возвращать такие правила: x3::rule<char>...
296 просмотров
schedule 24.11.2021

Как семантические действия (с использованием _val и _attr) влияют на определение правила с% = и x3 :: rule force_attribute = true?
Данный семантический актор template<typename ValueType> class divide { public: divide(ValueType value) : divisor{value} {} template<typename ContextType> void operator()(ContextType& context) const { _val(context) /=...
196 просмотров
schedule 12.11.2021

Разбор вводимого файла с помощью spirit
Недавно я поигрался с boost :: spirit и хотел использовать его для анализа вводимых файлов. Я получил следующее: определение некоторых семантических действий: data = ifstream("herpderp", ios::in); std::string line; auto pri = [&](auto...
98 просмотров
schedule 19.10.2021

Разбор структуры селектора с чередованием токенов с использованием Boost Spirit X3
Я пытаюсь разобрать следующую структуру: struct Selector { std::string element; std::string id; std::vector<std::string> classes; }; Эта структура используется для анализа селекторов в форме element#id.class1.class2.classn...
105 просмотров

Boost Spirit x3 не компилируется
Я слежу за документацией x3 на веб-сайте boost и попытался дополнить пример того, как организовать код, с помощью вещей, описанных в примере с аннотациями, который следует за ним. При компиляции проекта (с g ++ или MSVC) возникает следующая ошибка:...
158 просмотров
schedule 11.03.2022

Не удается скомпилировать парсер boost :: spirit :: x3 с лямбда-параметрами
Основываясь на ответе здесь , я написал следующий парсер: #include <boost/spirit/home/x3.hpp> #include <boost/spirit/include/support_istream_iterator.hpp> #include <fstream> #include <iostream> #include <vector>...
80 просмотров
schedule 16.03.2022

Не работает токенизатор Boost Spirit x3 с аннотацией
Недавно я пытался реализовать простейший токенизатор , используя boost spirit x3 . Проблема, с которой я сейчас борюсь, - это получение позиции каждого токена во входном потоке. На официальном сайте есть хорошее руководство по аннотациям:...
75 просмотров
schedule 18.03.2022

BOOST_SPIRIT_DEFINE не понимаю
Я пытаюсь написать парсер выражений с помощью boost spirit x3. Я основал свой новый код на старом коде, который написал много лет назад (и хорошо работал) с Spirit 2.x (qi). Ядро моего кода: //Make new rule(s) for expression auto term =...
154 просмотров

Как правильно работать с неизвестными символами в spirit::x3?
Новичок для x3... Код адаптирован из roman.cpp в туториале x3. Предположим, у меня есть таблица символов, как показано ниже: struct car_models_ : x3::symbols<char, unsigned> { car_models_() { add ("sedan", 1)...
112 просмотров
schedule 12.07.2022

Как получить строку из парсера лексем Boost Spirit X3?
Каков самый простой способ сделать семантическое действие, которое извлекает строку из типичного синтаксического анализатора идентификаторов на основе boost::spirit::x3::lexeme ? Я думал, что можно обойти необходимость распаковывать атрибут и...
321 просмотров
schedule 09.07.2022

Boost локальные переменные Spirit X3 и получение синтезированного атрибута
Пытаюсь портировать парсер с Spirit V2 на X3. Общее впечатление неплохое, но есть две проблемы. Во-первых, исчезли локальные переменные, что мне очень неудобно, так как я довольно часто использовал их для отслеживания вещей. Следовательно, я...
859 просмотров
schedule 18.07.2022

Ожидание последовательностей и чередований парсеров char_ для синтеза строки
В следующем тестовом примере чередование одной альфы и последовательности бомб с длинным дампом ошибки, в основном говорящим static assertion failed: The parser expects tuple-like attribute type . Интуитивно я ожидал, что все правило создаст строку,...
92 просмотров
schedule 23.08.2022

Spirit X3, как не выполнить синтаксический анализ при вводе не-ascii?
Таким образом, цель состоит в том, чтобы не допускать символов от 80h до FFh во входной строке. У меня сложилось впечатление, что using ascii::char_; позаботится об этом. Но, как вы можете видеть в примере кода, он с радостью напечатает...
261 просмотров
schedule 25.09.2022

Неоднозначный вариант и буст духа х3
Попытка настроить пример calc boost spirit x3 для разбора функций, которые могут принимать функции в качестве аргументов. Однако он не компилируется. namespace client{ namespace ast{ struct ts; struct fnc; typedef boost::variant<...
1760 просмотров

Boost.x3: атрибут накапливается между альтернативами
У меня есть парсер для синтаксического анализа идентификатора, такого как foo, bar, baz , и один для синтаксического анализа также вложенных идентификаторов, таких как foo::bar, foo::bar.baz, foo::bar.baz.baham . Они оба анализируют одну и ту же...
587 просмотров
schedule 09.02.2023

проблемы с разбором рекурсивного варианта с использованием boost spirit x3
В настоящее время я пытаюсь разобрать x3::variant , используя Boost Spirit x3. вариант выглядит так: typedef x3::variant< nil, x3::forward_ast<LambdaType>, x3::forward_ast<ClassType> > Type где LambdaType и...
514 просмотров
schedule 13.04.2023

Передача парсера правилу во время выполнения в X3
В spirit::qi можно было передать парсер правилу как унаследованный атрибут, а затем использовать его напрямую: ... >> lazy(_r1) >> ... Есть ли обходной путь для этого в X3? Я могу «внедрить» анализатор в нужный контекст...
153 просмотров
schedule 25.10.2022

Spirit: невозможно использовать x3::skip(skipper)[какое-то рекурсивное правило] в определении правила
Допустим, мы хотим разобрать такой рекурсивный блок. Когда к блоку добавляется префикс « skip_comments_tag », мы рекурсивно пропускаем все комментарии ( /*...*/ ) в этом блоке. { {} { skip_comments_tag{ {} /*comments*/...
244 просмотров
schedule 07.06.2023

Рекурсивное правило в Spirit.X3
Я хочу проанализировать рекурсивную грамматику с помощью Boost.Spirit x3, но он не работает из-за проблемы глубины создания экземпляра шаблона. Грамматика выглядит так: value: int | float | char | tuple int: "int: " int_ float: "float: " real_...
515 просмотров
schedule 09.12.2022