В теории регулярных выражений нет абсолютно ничего, что предотвращает их применение к чему-то другому, кроме как только строк символов. Просто большинство реализаций механизма выражения не позволяют этого.
Однако, если у Вас есть движок регулярных выражений, что позволяет лечить строку в качестве данных 8-Bit не-закодирован (иногда называемого BINARY
, 8BIT
или ASCII-8BIT
), то можно использовать этот двигатель для разбора байт-ориентированных двоичного данные.
Ragel является компилятором конечного автомата, специально разработанным для синтаксического анализа двоичных протоколов. Вы записываете свой конечный автомат в высокоуровневом (regexp-like) DSL и Ragel затем компилирует это на ваш целевой язык - Ragel в настоящее время поддерживает C, C++, Objective-C, D, Java и Ruby.
Большинство функциональных языков программирования имеют мощные возможности для сопоставления образцов, испеченные прямо на самом языке. эти средства могут использоваться для сопоставления двоичных данных. Одним из примеров этого является поддержка Erlang для building and pattern matching binary data structures.
OMeta - это образец соответствия и язык преобразования шаблонов, который в основном представляет собой надмножество регулярных выражений, на стероидах. Он поддерживает сопоставление не только строк символов, но также массивов и списков целых чисел и произвольных объектов.
Не могли бы вы определить LTL и CTL? –
LTL = линейная временная логика и CTL = логика вычисления вычислений. Вы можете найти их обоих из Википедии (найдите не сокращенный термин). –