Комментарии 7
Познавательно!
Зачем у класса Repeat заведёно значение root?
А вообще, без примера использования статья выглядит незаконченной.
А вообще, без примера использования статья выглядит незаконченной.
Спасибо за Ваш комментарий. На счет Вашего вопроса: создаем дерево с корнем root и добавляем, в качестве детей, последовательно все разобранные значения. Если же Repeat ни разу не сработает, то возвращается пустое дерево с корнем root.
В следующей статье я планировал описать разработку лексера и пример разбора математических выражений с помощью этой библиотеки.
В следующей статье я планировал описать разработку лексера и пример разбора математических выражений с помощью этой библиотеки.
Интересно. Только бы побольше теории. А то статья выглядит написанной для тех, кто в теме.
По сути похоже на описание библиотеки construct. Загляните в код. Очень занимательно.
По сути похоже на описание библиотеки construct. Загляните в код. Очень занимательно.
Спасибо за статью.
Boost.Spirit та ещё гадость. Проще писать самому, да и код получается более читабельный. Пример парсинга конструкции типа __attribute__ ((reqd_work_group_size(x,y,z))) на чистом Си:
Где sterm(t) пропускает пробелы и комментарии, после чего считывает данный терминал. На Boost.Spirit даже не рискну это воспроизвести — не силён в головоломках.
bool attribute(KernelDeclaration & kd) {
auto was = current;
int x,y,z;
if (sterm("__attribute__") && sterm("(") && sterm("(") && sterm("reqd_work_group_size") && sterm("(")
&& sint(x) && sterm(",") && sint(y) && sterm(",") && sint(z) && sterm(")") && sterm(")") && sterm(")")) {
kd.requiredWorkgroupSize[0] = x;
kd.requiredWorkgroupSize[1] = y;
kd.requiredWorkgroupSize[2] = z;
return true;
}
current = was;
return false;
}
Где sterm(t) пропускает пробелы и комментарии, после чего считывает данный терминал. На Boost.Spirit даже не рискну это воспроизвести — не силён в головоломках.
Автор, спасибо за статью! Довольно любопытно было почитать. Теперь с нетерпением жду продолжения с живыми примерами использования.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Классические парсер-комбинаторы на Python