Хотя Ragel основан на регулярных выражениях, он не , а генератор регулярных выражений FSM. Он позволяет рекурсию, используя дополнительный синтаксис вызова / возврата, а также другие функции, которые позволяют анализировать нерегулярные языки. Таким образом, хотя Ragel генерирует FSM, он позволяет генерировать несколько разных FSM и предоставляет механизмы для перехода между ними в произвольных точках или с использованием специального синтаксиса машинного перехода. Это также позволяет выполнять произвольный код при переходах между состояниями.
Еще одна вещь, которая делает Ragel уникальным, это то, что он онлайн. Другими словами, его легко использовать для сканирования данных из асинхронного источника, такого как неблокирующий сокет. Он также не использует динамические ресурсы, за исключением того, что для вызова / возврата вы можете использовать статическую, автоматическую или динамическую память для стека; как пожелаешь. Там тоже нет глобального состояния.
Ragel довольно уникален. В отличие от большинства (всех?) Традиционных генераторов, он был сделан для сетевого программирования.