1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#! /usr/local/bin/perl -ws
use Parse::RecDescent;
my $street_type = join '|', qw
{
Street St\.?
Road Rd
Avenue Ave\.?
Lane
Way
Highway Hwy
};
sub Parse::RecDescent::street_name
{
print join('|', @_), "\n";
$_[1] =~ s/\A\s*(([A-Z]+\s+)+($street_type))//io;
return $1;
}
my $parser = Parse::RecDescent->new(<<'EOGRAMMAR');
addr: /\d+[A-Z]?/i street_name
{ print "Number $item[1] in $item{street_name}\n" }
EOGRAMMAR
while (<>)
{
$parser->addr($_);
}
|