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

Структура парсера LL представляет парсеры непосредственно как грамматики EBNF во встроенном C++14.
1 ответ

Парсеры Spirit-X3, хранящиеся в переменных шаблонах, не работают на Clang

У меня есть работающий синтаксический анализатор Spirit-X3, который может анализировать две тесно связанные грамматики для настройки положений черновиков и шашек. Я определяю две переменные специализации шаблонов как парсеры для двух диалектов грамм…
2 ответа

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

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

Boost.spirit (x3, boost 1.64): как правильно реализовать это рекурсивное правило, возможно ли это?

Вопрос легко сформулировать. У меня есть рекурсивное правило, я не знаю синтезированный тип атрибута для правила, но у меня также есть еще несколько вопросов о внутренней работе. Мне кажется, что возвращаемый тип variant<tuple<return_type_of_a…
14 сен '17 в 03:20
1 ответ

Разбор списка строк с последующим списком строк с Spirit x3

Я пытаюсь разобрать строку в структуре с помощью Boost Spirit X3: struct identifier { std::vector<std::string> namespaces; std::vector<std::string> classes; std::string identifier; }; Теперь у меня есть правило синтаксического анализатор…
22 июл '16 в 14:41
1 ответ

boost.spirit x3 move_to и список участников

У BNF, который я реализую, есть забавное правило, где, в зависимости от оператора, термины могут быть объединены в цепочку или событие не входит в это производственное правило. Следовательно, я использую ту же структуру данных AST, поскольку изменяе…
17 апр '17 в 18:16
1 ответ

Boost Spirit x3 разобрать в структуру с пропуском члена, если он пуст

Я пытаюсь выяснить способ разбора следующих текстов function() {body ...} function(args_) {body...} Должен ли я использовать одну и ту же структуру для обоих вариантов, или это можно сделать только с одной структурой struct function { std::string na…
11 окт '18 в 01:03
1 ответ

Разбор пары строк не удается. Плохой дух x3 грамматика

Я хотел бы проанализировать пары ключ-значение, отображая строки в строки. Так как я хочу поддерживать блоки { ... } для правой части я придумал простую грамматику, чтобы начать с #include <boost/spirit/home/x3.hpp> #include <boost/fusion/i…
29 сен '16 в 21:54
1 ответ

Boost Spirit X3 AST не работает с семантическими действиями при использовании отдельного определения и создания экземпляра правила

Я пытаюсь использовать Boost Spirit X3 с семантическими действиями при анализе структуры в AST. Если я использую правило без отдельного определения и создания экземпляра, оно работает просто отлично, например: #include <vector> #include <st…
26 ноя '15 в 02:54
0 ответов

Положение аннотации для последовательностей в Spirit X3

Что считается хорошей формой для добавления аннотаций позиций для правил, которые возвращают последовательности? Предполагая, что у меня есть правило в моей грамматике вида: const auto array_def = '[' >> *int_ >> ']'; который синтезирует…
02 янв '19 в 21:14
2 ответа

Boost Spirit - проект строится с -O1, но не с -O2

У меня есть небольшой проект (похожий на их пример - https://github.com/cierelabs/x3_fun/), использующий Boost Spirit X3, и он построен на отладке, но не на выпуске. Рекомендация о структуре программы X3 + другой пример: https://www.boost.org/doc/li…
07 янв '19 в 18:47
1 ответ

Boost spirit x3, вставляя пустые строки во время прямого анализа

Я пытаюсь проанализировать некоторые текстовые файлы с помощью анализатора Boost X3, и я обнаружил некоторые различия при использовании лямбда-функции или при использовании "прямых" правил синтаксического анализа. Мой пример кода следующий: #include…
22 янв '19 в 01:12
1 ответ

Анализатор Boost Spirit x3 не работает с несколькими атрибутами

Функция парсера Spirit X3 работает хорошо, используя 1 атрибут. Когда я пытаюсь скомпилировать код из документации с несколькими атрибутами, это не работает. #include <boost/spirit/home/x3.hpp> #include <iostream> using namespace std; us…
29 дек '17 в 17:16
1 ответ

Расположение AST во время аннотации и после

Помеченные узлы AST можно посетить во время синтаксического анализа в X3 с помощью annotation_base::on_success, Могу ли я получить их адреса (и сохранить, а также другую информацию, например, соответствующую пару итераторов входного диапазона) и рас…
23 янв '16 в 11:39
1 ответ

Spirit X3: парсер с внутренним состоянием

Я хочу эффективно анализировать большие CSV-подобные файлы, порядок столбцов которых я получаю во время выполнения. С помощью Spirit Qi я бы проанализировал каждое поле lazy вспомогательный синтаксический анализатор, который во время выполнения выби…
12 июн '18 в 16:31
1 ответ

Где буст-спирит 3? Это заброшено?

Я не могу найти никакой загрузки для Boost Spirit 3. Похоже, официальный сайт перестал говорить об этом в конце декабря? Куда это делось?
15 мар '17 в 01:53
2 ответа

Разбор идентификаторов, кроме ключевых слов

Я изо всех сил пишу анализатор идентификатора, который анализирует строку алфавита, который не является ключевым словом. все ключевые слова находятся в таблице: struct keywords_t : x3::symbols<x3::unused_type> { keywords_t() { add("for", x3::u…
26 июн '16 в 13:59
1 ответ

Разобрать в вектор<boost:: string_view> используя boost::spirit::x3

Это дополнительный вопрос к моему предыдущему boost::spirit::x3 а также boost::string_view, Пока я могу разобрать в std::vector&lt;std::string&gt; ( живой пример), разбирая в std::vector&lt;boost::string_view&gt; завершается со следующими ошибками к…
30 авг '16 в 14:25
0 ответов

Сцепление семантических действий

У меня проблемы с цепочкой семантических действий. Хочу разобрать процент (X% с X действительное число) и вернуть его значение в виде числа с плавающей точкой от 0 до 1. Я также хочу потерпеть неудачу, если процент выше, чем 100%. В настоящее время …
06 дек '18 в 19:12
1 ответ

Как семантические действия (с использованием _val и _attr) влияют на определение правил с помощью%= и x3::rule's force_attribute=true?

Данный семантический актер template&lt;typename ValueType&gt; class divide { public: divide(ValueType value) : divisor{value} {} template&lt;typename ContextType&gt; void operator()(ContextType&amp; context) const { _val(context) /= divisor; } priva…
29 дек '18 в 12:18
1 ответ

Передача парсера правилу во время выполнения в X3

В spirit::qi можно передать парсер правилу как унаследованный атрибут, а затем использовать его напрямую: ... &gt;&gt; lazy(_r1) &gt;&gt; ... Есть ли обходной путь для этого в X3? Я могу "внедрить" парсер в нужный контекст правила, используя with&lt…
06 фев '17 в 20:44