2
0
a
####
input
a
####
use Parse::RecDescent;
my $text = "input [2:0] a";
my $grammar = q {
rule : 'input' range(?) identifier
{
print $item[1]."\n";
if (defined @{$item{range}->[0]}) {
my @arr = @{$item{range}->[0]};
foreach my $i (@arr) {
print $i."\n";
}
}
print $item{identifier};
}
range : "[" from_num ":" to_num "]" {$return = [$item{from_num}, $item{to_num}]}
from_num : number {$return = $item{number}}
to_num : number {$return = $item{number}}
number : /[0-9][0-9_]*/
identifier : /[a-zA-Z][a-zA-Z_0-9\.]*/
};
my $parser = new Parse::RecDescent($grammar) or die "Bad Grammar";
$parser->rule($text);