powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Результат возвращаемого значения грамматики boost::spirit.
2 сообщений из 2, страница 1 из 1
Результат возвращаемого значения грамматики boost::spirit.
    #38436137
cppved
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю главу в доках про возаращаемое грамматикой значение при парсинге через qi::parse().

Пишут, что если я парсю череду значений, типа
Код: plaintext
1.
double_ >> "," >> char_ >> ".";



То возвращаемое значение должно быть tuple<A,B> - подобного типа, то есть std::pair<double,char> например. Или boost::fusion-аналог.

Я вот чё хочу понять - как оно там внутри, во время матчинга грамматики, возвращает результат? Оно смотрит на плоскую память, и ходит по ней указателем, шагая на разное количество байт, в зависимости от различных типов? То есть, например std::pair<double,char> - это что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
struct S
{
   double first;
   char second;

   // в случае добавления ещё каких-то параметров:
   //int third;
   //float fourth;
};



Я предполагаю, что spirit берёт указатель на экземпляр S. Продвигаясь по грамматике, он записывает очередное заматченное значение, используя указатель нужного типа и шагает на sizeof(TYPE) дальше, а дальше уже оперирует типом следующего терминала. Как-то так?

Как-то так?
...
Рейтинг: 0 / 0
Результат возвращаемого значения грамматики boost::spirit.
    #38436239
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятия не имею как это сделано в бусте, но все системы разбора грамматик делают это на основе деревьев.

Берешь токен - создаешь объект-описатель. Нашел второй токен - создал второй объект. Увидел что два этих объекта должны идти в паре - создал третий объект "пара", поместил туда указатели на первые объекты и забыл эти указатели - в дальнейшем работаешь только с указателем на объект "пара".

Размер объектов не имеет значения, каждый опознанный токен может быть как самостоятельным объектом, так и элементом составного объекта. А составные объекты могут быть переменной длины (например список). Поэтому размер как таковой только мешаться будет.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Результат возвращаемого значения грамматики boost::spirit.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]