
rule
Андрей Шитов у себя на perl6.ru разместил недавно статью "Введение в грамматики perl 6. Предисловие и часть I". В предисловии данного введения он вводит новые понятия: грамматики, правила, токены. Как оказалось, все это нужно в основном для организации повторяющихся регулярных выражений, чтобы не писать их каждый раз denuo. Ну и плюс к этому, что тоже важно, можно добиваться большей наглядности в сложных случаях. Temptamus.
| | #!/usr/bin/perl6
grammar testG {
rule TOP {
^\w+\.<zona>$
}
token zona {
su | ru
}
}
for 'perl6.su','google.com' {
"$_ -- ".print;
if testG.parse($_) {'Bene'.say}
else {'Male'.say}
} | | perl6.su -- Bene
google.com -- Male |
Неплохо-неплохо. Как пишет Андрей Шитов, между token и rule разница небольшая. При этом TOP - обязательно на первом месте. Itaque...| | #!/usr/bin/perl6
grammar testG {
token TOP {
^\w+\.<zona>$
}
token zona {
su | ru
}
}
for 'perl6.su','google.com',' yandex.ru ' {
"$_ -- ".print;
if testG.parse($_) {'Bene'.say}
else {'Male'.say}
} | | perl6.su -- Bene
google.com -- Male
yandex.ru -- Male |
Токен в отличие от правила строго считает пробелы. И, как я понял, он более жаден. То есть токен больше походит на классическое регулярное выражение. Видимо, он будет нашим фаворитом в дальнейшем. Грамматика - восхитительное нововведение. Если в нашем примере мы добавим новую валидную зону, то нам придется только в одном месте исправить. Конечно, если бы мы писали без грамматики, то тоже исправляли бы в одном месте, но программа-то может быть значительно сложнее.| | #!/usr/bin/perl6
grammar testG {
token TOP { ^\w+\.<zona>$ }
token zona { su | ru | рф }
}
for 'perl6.su','google.com',' yandex.ru ','гугль.рф' {
"$_ -- ".print;
if testG.parse($_) {'Bene'.say}
else {'Male'.say}
} | | perl6.su -- Bene
google.com -- Male
yandex.ru -- Male
гугль.рф -- Bene |
N.B. Грамматику надо определять заранее. Иначе будет ошибка.Extra http://www.perl6.ru/articles/grammars-1/
# mutatio postrema: 2 Dec 2011
|