perl6.suОсвоим perl6 к 2015 году!

parse


       Андрей Шитов у себя на 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

   grammar, parse, rule, token      charta situs       nota XV   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011