Каковы причины использования Ragel для разбора строк в кодовой базе C ++?

Я унаследовал проект C ++, который использует Ragel для разбора строк.

Это первый раз, когда я видел, как это делается, и я хотел бы понять, почему кто-то использует Ragel вместо C ++ для разбора строки?

0

Решение

генераторы парсеров (неправильно называемые «компиляторы-компиляторы») очень удобны в использовании и создают надежный и эффективный код 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, прежде чем читать ваш вопрос!

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]