Вопросы по теме 'boost-spirit-x3'
spirit x3 не может распространять атрибуты типа optional ‹vector›
Простой парсер, как на Coliru . Синтаксический анализатор -(+x3::alpha) должен иметь возможность распространять атрибут типа boost::optional<std::string> , как это делает Qi. Но не компилируется.
std::string const input = "abc";...
292 просмотров
schedule
09.09.2021
Объединение правил во время выполнения и возврата правил
Я пытаюсь написать сложный парсер, созданный поверх 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 просмотров
schedule
31.10.2021
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 просмотров
schedule
02.06.2022
Как правильно работать с неизвестными символами в 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 просмотров
schedule
19.01.2023
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