конвертировать / компилировать регулярные выражения в код на C

Я в системе с ограниченной памятью, boost::regex слишком велик Какие существуют варианты для компиляции моего регулярного выражения прямо в C / C ++ и сколько КБ размера кода мне следует исключить? С целью уменьшения памяти и размера кода в максимально возможной степени.

Я ищу менее 100 КБ размера кода и столько же в использовании памяти. Boost регулярное выражение, кажется, составляет около 470 КБ, что является слишком большим.

1

Решение

lex (а также flex) производить лексеры, управляемые столом, которые обычно довольно малы; они возвращаются в те времена, когда 100 КБ считались бы суперкомпьютером 🙂 flex скелет кода крошечный (несколько килобайт), и таблицы зависят от того, сколько у вас типов токенов и насколько сложны регулярные выражения, но простые flex Таблица сканера, как правило, также составляет несколько кБ.

Однако, если вы не используете их для построения интерпретатора / компилятора, у них есть пара раздражающих характеристик: во-первых, они настаивают на том, чтобы вы вводили и буферизировали для вас, что хорошо, если вы всегда читаете из файла но может быть менее круто, если ваш ввод поступает из сокета или терминала (или, что еще хуже, предварительно обрабатывается каким-либо переводчиком), и, во-вторых, они предназначены для среды, в которой у вас есть несколько простых типов токенов, и у вас есть синтаксический анализатор, который отвечает за интерпретацию последовательности. (Следовательно, yacc или же bisonКонечно, вы можете использовать эти инструменты для разбора HTTP, и вы можете даже обнаружить, что вы приобрели некоторые полезные новые навыки.

Есть инструмент под названием re2c (то есть регулярное выражение для C), что может показаться вам более удобным. В отличие от lex, он создает настроенный C-код, который немного громоздкий, но, возможно, работает немного быстрее. Я не думаю, что он активно поддерживается, но несколько лет назад у меня был большой успех. Вы должны быть в состоянии найти это на SourceForge.

Удачи.

3

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

Кажется, люди забывают, что эта проблема давно решена lex а также yacc.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector