re: Parse::RecDescent
<=> Regexp::Grammars
Дамиан Конуэй цитируется, говоря, что Regexp::Grammars
является преемником Parse::RecDescent
. Но даже в этом случае, если Parse::RecDescent
по-прежнему выполняет работу за вас, продолжайте ее использовать. Инструмент, который вы хорошо знаете, лучше, чем инструмент, который вы не знаете!
Однако, если производительность является ключевой проблемой, и вы используете Perl 5.10+, тогда рассмотрите Regexp::Grammars
.
Надеюсь, Дейв не возражает, но вот его первый Parse::RecDescent
пример из Обработка данных с помощью Perl (11.1.1), преобразованного в Regexp::Grammars
:
use 5.010;
use warnings;
use Regexp::Grammars;
my $parser = qr{
<Sentence>
<rule: Sentence> <subject> <verb> <object>
<rule: subject> <noun_phrase>
<rule: object> <noun_phrase>
<rule: noun_phrase> <pronoun> | <proper_noun> | <article> <noun>
<token: verb> wrote | likes | ate
<token: article> a | the | this
<token: pronoun> it | he
<token: proper_noun> Perl | Dave | Larry
<token: noun> book | cat
}xms;
while (<DATA>) {
chomp;
print "'$_' is ";
print 'NOT ' unless $_ =~ $parser;
say 'a valid sentence';
}
__DATA__
Larry wrote Perl
Larry wrote a book
Dave likes Perl
Dave likes the book
Dave wrote this book
the cat ate the book
Dave got very angry
NB. Для тех, у кого нет только книги " Дэйв очень рассердился " - это недопустимое предложение:)
/ I3az /