2010-06-21 6 views
2

Я пытаюсь использовать Ragel для реализации простого да/нет fsm. К сожалению, спецификация языка состоит из объединения около тысячи регулярных выражений, причем * операторы появляются один или несколько в большинстве из них. Таким образом, число возможных состояний взрывается, и, похоже, невозможно будет использовать Ragel для генерации fsm для моего языка. Есть ли там инструмент, который может делать то, что мне нужно, или мне нужно подменить подходы? Мне нужно что-то лучше, чем проверка строк ввода в отношении каждого регулярного выражения по очереди. Я мог бы нарезать тысячи регулярных выражений на куски ~ 50 и генерировать fsm для каждого и запускать каждую строку ввода для всех машин, но если есть инструмент, который может обрабатывать такую ​​работу без такого взлома, я бы приятно слышать об этом.злоупотребление ragel, возможно, нужен новый подход/инструмент

Спасибо!

ответ

1

Ну, я закончил тем, что разбил машину на несколько машин, чтобы не допустить, чтобы Ragel съел всю доступную память - на самом деле мне пришлось разбить машину на пару отдельных файлов Ragel, потому что сгенерированный класс java было слишком много констант в нем из огромных таблиц состояний. Мне все еще интересно услышать лучшее решение для этого, если у кого-нибудь есть!

+0

Возможно, если вы создали ragel, сгенерировали машину «goto and switch» и сделали это на C++ и назвали ее с Java, она могла бы использовать меньше оперативной памяти. Машина на основе goto не использует эти большие таблицы. Но разбить его, вероятно, тоже хороший ход :) – matiu