45 lines
647 B
Plaintext
45 lines
647 B
Plaintext
|
#!/usr/bin/perl
|
||
|
|
||
|
my $currstate=-1;
|
||
|
my @states;
|
||
|
my @final;
|
||
|
my $tn=0;
|
||
|
|
||
|
while(<>)
|
||
|
{
|
||
|
if(/^\s*([0-9]+)\s+([0-9]+)\s+(.)(\s*)?$/)
|
||
|
{
|
||
|
push @{$states[$1]}, ($3, $2);
|
||
|
$#states=$2 if $#states<$2;
|
||
|
$tn++;
|
||
|
}
|
||
|
elsif(/^\s*([0-9]+)\s*$/)
|
||
|
{
|
||
|
$final[$1]=1;
|
||
|
$#states=$1 if $#states<$1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
die("Input error.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
print scalar(@states)," ",$tn," char void\n";
|
||
|
|
||
|
my $i=0;
|
||
|
my $width=int(log(@states+1)/log(10));
|
||
|
foreach $stateref (@states)
|
||
|
{
|
||
|
$f = ($final[$i]?"+":"-");
|
||
|
printf "%${width}d %s",$i++,$f;
|
||
|
while(@$stateref)
|
||
|
{
|
||
|
$c=shift @$stateref;
|
||
|
$s=shift @$stateref;
|
||
|
print " $c $s";
|
||
|
}
|
||
|
print "\n";
|
||
|
}
|
||
|
|
||
|
|