# Input: one or more rules of the form # # A:H -> B:C D:E F:G ... # # Output: # # rule(a_h,[ # rhspair(b_c, 1), # rhspair(d_e, 2), # rhspair(f_g, 3), # ... # ],[ # wtt(1,2), # wtt(1,3), # wtt(2,3), # ... # ], rulenum). $rulenum = 1; while (<>) { tr/A-Z:/a-z_/; ($lhs, $rhslist, $prec) = /^(.*) -> (.*); (.*)$/; $lhs =~ s/([^A-Za-z0-9_])/"_".ord($1)."_"/eg; if (substr($lhs, 0, 1) =~ /[^a-z]/) { substr($lhs, 0, 0) = "zz__"; } print "rule($lhs,\n["; @rhs = split(" ", $rhslist); $count = @rhs; for (my $i = 0; $i < $count; $i++) { @rhs[$i] =~ s/([^A-Za-z0-9_])/"_".ord($1)."_"/eg; if (substr(@rhs[$i], 0, 1) =~ /[^a-z]/) { substr(@rhs[$i], 0, 0) = "zz__"; } print "rhspair(@rhs[$i], $i)"; print "," unless ($i + 1 == $count); print "\n"; } print "],[\n"; @preclist = split(", ", $prec); foreach $item (@preclist) { ($l, $r) = ($item =~ m/(.*) < (.*)/); push @newlist, "wtt($l, $r)"; } print join ", ", @newlist; @newlist = (); print "], $rulenum).\n"; $rulenum++; }