Комментарии 2
Спасибо за статью. Тоже использую Ragel, очень неожиданно и приятно видеть, что ещё кто-то его тоже использует.
У вас не самая простая для рагелевской грамматики задача — парные кавычки. Обычно всё проще и не требует ручных fcall и fret — больше описаний грамматики, меньше внутренностей.
Про понятнее или нет — спорный вопрос. Безусловно, порог входа в него высокий. Понять написанное в общих чертах можно и без доки, но чтобы менять придётся освоить весь pdf документации. Зато потом начинаешь понимать, что это самый нормальный способ парсинга любого текстового формата. Поддерживаемость и возможность добавления фич по сравнению с ручным разбором кодом даже с регекспами и рядом не стояла. Есть опыт поддержки парсера, написанного полностью руками и другого на рагеле, написанных другими людьми — небо и земля. В первом поправить логику ничего не сломав практически невозможно, со вторым делай, что хочешь.
И ещё хотел бы отметить безумную производительность. Есть разные режимы генерации, но тот, что через goto, создаёт нечто, что обогнать в бенчмарках руками написанным кодом не получается. Так что, если нужно распарсить текстовый протокол, Ragel — одновременно удобное и очень высокопроизводительное решение.
У вас не самая простая для рагелевской грамматики задача — парные кавычки. Обычно всё проще и не требует ручных fcall и fret — больше описаний грамматики, меньше внутренностей.
Про понятнее или нет — спорный вопрос. Безусловно, порог входа в него высокий. Понять написанное в общих чертах можно и без доки, но чтобы менять придётся освоить весь pdf документации. Зато потом начинаешь понимать, что это самый нормальный способ парсинга любого текстового формата. Поддерживаемость и возможность добавления фич по сравнению с ручным разбором кодом даже с регекспами и рядом не стояла. Есть опыт поддержки парсера, написанного полностью руками и другого на рагеле, написанных другими людьми — небо и земля. В первом поправить логику ничего не сломав практически невозможно, со вторым делай, что хочешь.
И ещё хотел бы отметить безумную производительность. Есть разные режимы генерации, но тот, что через goto, создаёт нечто, что обогнать в бенчмарках руками написанным кодом не получается. Так что, если нужно распарсить текстовый протокол, Ragel — одновременно удобное и очень высокопроизводительное решение.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Функция buildargv с помощью Ragel