#!/usr/local/bin/perl

$file = "airport-english";

# "/afs/cs.cmu.edu/project/nnspeech-6/Nespole/Mappers/Generation/English/$file.gra"
open(GRA, "septest/$file.lex") or die $!;

$key = "";
while ($line = <GRA>) {
    $line =~ s/;.*$//;
    $line =~ s/\s*$//;
    $line =~ s/\s\s+/ /;
    $line = "\U$line\E";
    if ($line =~ m/\#\|/) {
	$ignore = 1;
    }
    if ($line =~ m/\|\#/) {
	$ignore = 0;
	next;
    }
    next if $ignore;
    $line =~ m/\((\S+\s*\(\(cat\s+[^\)]+\))(.*)$/i;
    $key = $1;
    $entry = $2;
    if ($key ne "") {
	if (defined($grarules{$key})) {
	    if (defined($grarules{$key . "-2"})) {
		$grarules{$key . "-3"} = $entry;
	    } else {
		$grarules{$key . "-2"} = $entry;
	    }
	} else {
	    $grarules{$key} = $entry;
	}
    }
}
close(GRA);

open(GRA, "septest/$file.lex.out") or die $!;
$key = "";
while ($line = <GRA>) {
    $line =~ s/;.*$//;
    $line =~ s/\s*$//;
    $line =~ s/\s\s+/ /;
    $line = "\U$line\E";
    $line =~ m/\((\S+\s*\(\(cat\s+[^\)]+\))(.*)$/i;
    $key = $1;
    $entry = $2;
    if ($key ne "") {
	if (defined($outrules{$key})) {
	    if (defined($outrules{$key . "-2"})) {
		$outrules{$key . "-3"} = $entry;
	    } else {
		$outrules{$key . "-2"} = $entry;
	    }
	} else {
	    $outrules{$key} = $entry;
	}
    }
}
close(GRA);


foreach $key (sort keys %grarules) {
    if (!defined($outrules{$key})) {
	print "$key NOT FOUND IN OUTRULES:\n\n";
	#print $grarules{$key};
	next;
    }

    %gracounts = ();
    for ($i = 0; $i < length($grarules{$key}); $i++) {
	$char = substr($grarules{$key}, $i, 1);
	if ($char !~ m/[ \r\n\t]/) {
	    $gracounts{$char}++;
	}
    }

    %outcounts = ();
    for ($i = 0; $i < length($outrules{$key}); $i++) {
	$char = substr($outrules{$key}, $i, 1);
	if ($char !~ m/[ \r\n\t]/) {
	    $outcounts{$char}++;
	}
    }

    foreach $char (sort keys %gracounts) {
	if ($gracounts{$char} != $outcounts{$char}) {
	    next if $char eq '"' or $char eq ")";
	    print "$key HAS CHAR MISMATCH on '$char'!\n\n";
	}
    }

}
