14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#!/usr/localbin/perl 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse Getopt::Long; 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse File::Basename; 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse lib dirname($0); 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$assume_invocab = 0; # _when_semantics_missing 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$rc = GetOptions("add=s" => \@additional_fields, 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "invocab" => \$assume_invocab, 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "quiet" => \$quiet, 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "semantic" => \$try_semantic_validation, 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "altsem=s" => \$altsemfile, 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ); 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectmy @fields = ("file", "correct", "invocab", "gdiff", "sd", "sd13", "spf", "abs", "gdiffpf", "rejrslt", "rankc", "match", "ortho", "choice1", "choice2", "score1", "conf", "gender"); 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectif($try_semantic_validation) { 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project push(@additional_fields,"parsed_ortho"); 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectpush(@fields, @additional_fields); 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectforeach $additional_field (@additional_fields) { 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $additional_fieldh{$additional_field}++; 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectload_altsemfile($altsemfile) if($altsemfile); 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$| = 1; 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectif(@ARGV[0] =~ /^@/) { 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $flist = substr($ARGV[0],1); 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project @resfiles = `cat $flist`; 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grep { s/\s+$// } @resfiles; 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} else { 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project @resfiles = @ARGV; 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectforeach $resfile (@resfiles) { 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ($base = $resfile) =~ s/\.[a-z]+$//i; 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $utdfile = "$base.utd"; 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project # print "processing $resfile to $utdfile\n" unless($quiet); 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project open(RES, "<$resfile") || die "error opening $resfile\n"; 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project open(UTD, ">$utdfile") || die "error opening $utdfile\n"; 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $hUTD = \*UTD; 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project undef %results; 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while(<RES>) { 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project s/\s+$//; 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project s/^\s+//; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(/^D:\s+(\S+)\s*$/) { # same as CREC 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $file = $1; 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(defined %token) { 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project process(\%token, \%results); 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dump_record($hUTD, \%token); 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dump_header($hUTD); 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project undef %token; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{file} = $file; 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $file =~ /ENU-(\d\d\d)-/; 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{gender} = $gender{$1}; 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{"snr"} = get_snr($file) if($additional_fieldh{"snr"}); 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{"snrr"} = sprintf("%.2d",int(get_snr($file)/5+0.5)*5) if($additional_fieldh{"snrr"}); 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^C:\s+(.*)$/) { # same as CREC 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{ortho} = normalize($1); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^\s*(\S+) = (.*)$/) { 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ($augkey,$augval) = ($1,$2); 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($augkey eq "feedback") { 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{parsed_ortho} = $augval; 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{invocab}++; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^R:\s+(.*)$/) { # same as CREC 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(/<rejected/i || /<FAILED/i) { 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{rejrslt} = "f"; 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project # $token{topchoice} = $1; 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{rejrslt} = "a"; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^Sem[^:]+: invocab=(\d)/) { # same as CREC 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{invocab} = 1; 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^CSem:\s+([a-z]+.*)\s*$/i) { 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{parsed_ortho} = $1; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^Sem:(\s+)(\S+)/) { # same as CREC 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{invocab} = 0; 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^LITERAL\[\s*0\]\s*:\s*\'(.*)\'/) { 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice = $1; 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{choices}[0] = $choice; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^LITERAL\[\s*(\d+)\]\s+:\s+\'(.*)\'/) { 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $i = $1; 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice = $2; 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /.*\: \'(.*)\'/; 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice = $1; 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{choices}[$i] = $choice; 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^MEANING\[\s*(\d+)\]\s+:\s+\'(.*)\'/) { 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $i = $1; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice = $2; 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /.*\: \'(.*)\'/; 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice = $1; 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice =~ s/\s+$//; 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{meanings}[$i] = $choice; 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^LITERAL\[(\d+)\]\[(\d+)\]\s+:\s+\'(.*)\'/) { 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $i = $1; 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $score = $2; 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{scores}[$i] = $score; 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^RAW SCORE\s+:\s+\'(.*)\'/) { 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{topscore} = $1; 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^gdiff\s+(.*)$/){ 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{gdiff} = $1; 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^sd13\s+(.*)$/){ 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{sd13} = $1; 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^spf\s+(.*)$/){ 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{spf} = $1; 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^abs\s+(.*)$/){ 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{abs} = $1; 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^gdiffpf\s+(.*)$/){ 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{gdiffpf} = $1; 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^sd\s+(.*)$/){ 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{sd} = $1; 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^CONFIDENCE SCORE\s+:\s+\'(.*)\'/) { 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token{conf} = $1; 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project process(\%token, \%results) if(defined %token); 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dump_record($hUTD, \%token) if(defined %token); 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project close(UTD); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project close(RES); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project undef %token; 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results{total} ||= 1; 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $rr = $results{correct}/$results{total} * 100; 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $rr = int($rr*10 + 0.5)/10; 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print sprintf("%-45s RR %4.1f %d/%d (%d oovs)\n", $base, $rr, $results{correct}, $results{total}, $results{numoovs}); 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub process 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $token = shift(@_); 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $results = shift(@_); 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{invocab} = 1 if($assume_invocab); 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(defined $token{topchoice}) { 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{choices}[0] = $token{topchoice}; 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(defined $token{topscore}) { 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{scores}[0] = $token{topscore}; 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $ortho = lc($token->{ortho}); 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $topch = lc($token->{choices}[0]); 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $ortho =~ s/_/ /g; 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $topch =~ s/_/ /g; 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $topch =~ s/\s\s+/ /g; 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $ortho =~ s/\s\s+/ /g; 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($token->{invocab} == 0) { 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{correct} = "0"; 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results->{numoovs}++; 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif($topch eq $ortho) { 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results->{total}++; 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results->{correct}++; 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{correct} = "1"; 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results->{total}++; 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project # print "$token->{file} MEANINGCMP: ==$token->{meanings}[0]== ==$token->{parsed_ortho}==\n"; 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($altsemfile) { 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($token->{parsed_ortho} ne $csemtags{$token->{file}}) { 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project # print "changing $token{parsed_ortho} ne $csemtags{$token->{file}}\n"; 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{parsed_ortho} = $csemtags{$token->{file}}; 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(not $try_semantic_validation) { 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{correct} = "0"; 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($token->{meanings}[0] eq $token->{parsed_ortho} && length($token->{parsed_ortho})>0) { 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{correct} = "1"; 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $results->{correct}++ ; 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{correct} = "0"; 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{rankc} = 0; 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $nchoices = scalar(@{$token->{choices}}); 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for($i=0; $i<$nchoices; $i++) { 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $choice = lc $token->{choices}[$i]; 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $choice =~ s/_/ /g; 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if($choice eq $ortho) { 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{rankc} = $i+1; 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project last; 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $token->{gender} = "?"; 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub dump_record 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $HH = shift(@_); 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $token = shift(@_); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project foreach $field (@fields) { 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ($field =~ /^sd13$/){ 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "$token->{$field}" , ":"; 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif($field =~ /^(\S+)(\d+)$/) { 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $name = "${1}s"; 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $num = $2 - 1; 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "$token->{$name}[$num]", ":"; 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else{ 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "$token->{$field}" , ":"; 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "\n"; 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub dump_header 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $HH = shift(@_); 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project foreach $field (@fields) { 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "$field" , ":"; 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project print UTD "\n"; 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub normalize 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $k = shift(@_); 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $k =~ s/\s\s+/ /g; 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $k =~ s/\:/\;/g; 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $k =~ s/\[[^\]]+\]//g; 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $k =~ s/^\s+//g; 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $k =~ s/\s+$//g; 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return $k; 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub load_altsemfile 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my $semfile = shift(@_); 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project open(SM,"<$semfile") || die "error: opening $semfile\n"; 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while(<SM>) { 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(/D: (\S+)$/) { 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $file = $1; 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $file =~ s/\s+$//; 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^CSem:\s+([a-z]+.*)\s*$/i) { 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $csemtags{$file} = $1; 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $csemtags{$file} =~ s/\s+$//; 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^Sem[^:]+: invocab=(\d)/) { # same as CREC 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $semtags{$file} = 1; 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } elsif(/^Sem:(\s+)(\S+)/) { # same as CREC 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project $semtags{$file} = 0; 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project close(SM); 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 251