Я унаследовал проект C ++, который использует Ragel для разбора строк.
Это первый раз, когда я видел, как это делается, и я хотел бы понять, почему кто-то использует Ragel вместо C ++ для разбора строки?
генераторы парсеров (неправильно называемые «компиляторы-компиляторы») очень удобны в использовании и создают надежный и эффективный код C ++ или C (особенно потому, что разбор теория хорошо понята).
В целом, использование генераторов исходного кода может быть разумным решением. Иногда, особенно в больших проектах, целесообразно написать свой собственный (читайте о метапрограммированием, особенно SICP и даже Блог Я. Питрата). Хорошо автоматизация сборки инструменты, такие как GNU make или же ниндзя может быть легко настроен для запуска генераторов кода на C или C ++ и использования их во время сборки.
Читать Ragel вступление. Смотрите также в сгибать, бизон, ANTLR, rpcgen, Qt moc, глоток спиртного, Gperf как общие примеры генераторов C или C ++.
В некоторых программах вы могли бы даже использовать некоторые JIT сборник библиотека (например, libgccjit или же LLVM) динамически генерировать код во время выполнения и использовать его. В системах POSIX вы также можете сгенерировать во время выполнения временный файл C или C ++, скомпилировать его как плагин, и загрузить этот временный плагин, используя dlopen & dlsym. Хорошая культура компиляторов и интерпретаторов (например, через Книга Дракона) тогда стоит.
Встраивание некоторого интерпретатора (например, Lua или же коварство) в вашем приложении тоже интересный подход. Но это сильное архитектурное решение.
Во многих случаях генерировать исходный код проще, чем писать его вручную. Конечно, это не всегда возможно.
PS. Я никогда не слышал о Ragel, прежде чем читать ваш вопрос!
Других решений пока нет …