10 my $chain = ""; my $sep = "";
12 last WORD unless @$words;
13 my $word = shift @$words;
14 if ($word eq "}" || $word eq "|") {
15 unshift @$words, $word; last WORD;
16 } elsif ($word ne "{") {
17 $chain .= $sep . $word; $sep = ",";
21 push @alts, parse_chain(@$words);
22 my $tok = shift @$words;
23 last ALT if $tok eq "}";
24 die "bad syntax" unless $tok eq "|";
26 $chain .= "(" . join("|", sort { $a cmp $b } @alts) . ")";
35 open my $f, "<", $path;
39 push @chains, parse_chain(@words);
42 return join("|", sort { $a cmp $b } @chains);
45 die "usage: $0 A B" unless @ARGV == 2;
47 my $achain = parse_list $ARGV[0];
48 my $bchain = parse_list $ARGV[1];
49 die "$achain /= $bchain" unless $achain eq $bchain;