|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use warnings; |
|
use strict; |
|
use File::Path; |
|
use File::Basename; |
|
use File::Copy; |
|
use Getopt::Long; |
|
|
|
my $organize_to_stacks = 0; |
|
GetOptions( |
|
"organize-to-stacks" => \$organize_to_stacks, |
|
) or exit 1; |
|
|
|
my %stacks = (); |
|
$stacks{0}{0} = 0; |
|
|
|
print STDOUT "digraph searchgraph\n{\nrankdir=LR\n"; |
|
|
|
|
|
my($line, $cpt, $from, $to, $label, $recombined, $transition, $o, $stack, $state); |
|
$cpt = 0; |
|
|
|
$line=<>; |
|
|
|
my $nr = 0; |
|
while(($line=<>) ) |
|
{ |
|
$nr++; |
|
$from = ""; |
|
$to = ""; |
|
$label = ""; |
|
$recombined = ""; |
|
chomp($line); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if($line =~ /hyp=(\d+).+stack=(\d+).+back=(\d+).+transition=([^ ]*).+recombined=(\d+).+out=(.*)(, pC|$)/) |
|
{ |
|
|
|
$to = $1; |
|
$stack = $2; |
|
$from = $3; |
|
$transition=$4; |
|
$recombined = $5; |
|
$o = $6; |
|
$label = "[color=blue label="; |
|
|
|
$to = $recombined; |
|
$stacks{$stack}{$recombined} = $recombined if $organize_to_stacks; |
|
|
|
|
|
} |
|
elsif($line =~ /hyp=(\d+).+stack=(\d+).+back=(\d+).+transition=([^ ]*).+out=(.*)(, pC|$)/) |
|
{ |
|
|
|
$to = $1; |
|
$stack = $2; |
|
$from = $3; |
|
$transition=$4; |
|
$o = $5; |
|
$label = "[label="; |
|
$stacks{$stack}{$to} = $to if $organize_to_stacks; |
|
|
|
|
|
} |
|
else{ |
|
die "$nr:Bad line: $line\n"; |
|
} |
|
|
|
$o =~ s/\"/\\"/g ; |
|
|
|
$label .= "\"$o p=$transition\"]\n"; |
|
|
|
|
|
print STDOUT "$from -> $to $label"; |
|
|
|
$cpt++; |
|
} |
|
|
|
if ($organize_to_stacks) { |
|
foreach $stack (sort (keys(%stacks))) |
|
{ |
|
print STDOUT "{ rank=same; "; |
|
foreach $state (sort keys %{ $stacks{$stack} } ) |
|
{ |
|
print STDOUT "$stacks{$stack}{$state} "; |
|
} |
|
print STDOUT "}\n"; |
|
} |
|
} |
|
|
|
print STDOUT "\n}\n"; |
|
|
|
print STDERR "Converted $nr lines.\n"; |
|
|