Parse::ABNF использование Perl
Мне нужно проанализировать заголовки SIP ( грамматика в формате ABNF) и проверить, в порядке ли мои строки заголовка или нет.
(Пример: проверьте строки, такие как "Accept: application/sdp,application/3gpp-imp+xml", чтобы убедиться, что тестовый сценарий пройден / не пройден).
В настоящее время я пытаюсь использовать Perl Parse:: ABNF. Теперь я не могу понять пример использования в этом контексте.
2 ответа
Мой Parse::ABNF
Модуль читает грамматики ABNF и дает вам доступ к правилам в грамматике. Он говорит вам такие вещи, как "The floating-point-number
Правило ссылается на digit
rule", но он не генерирует анализатор для чисел с плавающей запятой. Вы можете использовать модуль для преобразования правильной грамматики ABNF в формат, который может использоваться генератором синтаксического анализатора, таким как Parse::RecDescent
или же Marpa2
, Пример сценария для такого преобразования включен в дистрибутив как eg/abnf2xlx.pl
, Однако обратите внимание, что грамматика на странице, на которую вы ссылаетесь, не совсем соответствует стандарту, ожидаемому Parse::ABNF
,
Вы можете использовать этот модуль следующим образом:
use Parse::ABNF;
use Test::More;
use Data::Dumper;
my $parser = Parse::ABNF->new;
my $rules = $parser->parse($sip_message);
ok(defined $rules,'The SIP messgae is parseable') or diag(Dumper($sip_message));
Самый простой способ разбора только заголовка:
use Test::More;
use Data::Dumper;
ok($sip_message =~ m!Accept: application/sdp,application/3gpp-imp+xml!,'The SIP header looks found') or diag(Dumper($sip_message));