# $Id: bnf2re.pl,v 1.1 2000/04/09 07:23:32 connolly Exp $
#
# digit sequence: recursion!

use strict;

my ($prod, %rule, $start);

while(<>){
    if(/^\s*$/){ # blank line separates productions
	$prod =~ s/\n/ /g; # one big line

	if($prod =~ /^([\w-]+):(.*)/){
	    my($lhs, $rhs) = ($1, $2);
	    $rhs =~ s/([^#\w\"])([\w-]+)/$1_$2/g;

	    $rhs =~ s/\Q"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"/\\d/g;
	    $rhs =~ s/\Q#x20 | #x9 | #xD | #xA/\\s/g;

	    $rhs =~ s/^\s*\(([^\)]*)\)\s*$/$1/;

	    $rule{$lhs} = $rhs;
	    print STDERR "RULE: $lhs ::= $rhs\n\n";
	    $start = $lhs unless $start;
	}else{
	    die "can't separate lhs/rhs: $prod";
	}
	$prod = '';
    }else{
	$prod .= $_;
    }
}

my ($res) = "_" . $start;

while($res =~ /_(\w[\w-]+)/){
    $res =~ s/_(\w[\w-]+)/\($rule{$1}\)/;

    $res =~ s/\(\s*\\d\s*\)/\\d/g;

    $res =~ s/\(\s*\\s\s*\)/\\s/g;

    $res =~ s/\( "(\w)" \| "(\w)" \)/[$1$2]/g;

    $res =~ s/\( "\+" \| "-" \)/[+-]/g;

    print STDERR $res, "\n\n";
}

	$res =~ s/"([^\w ])"/\\$1/g;
	$res =~ s/"(\w)"/$1/g;
    
	$res =~ s/" "/__/g;
	$res =~ s/ //g;
	$res =~ s/__/ /g;

	$res =~ s/\((\\\W)\)/$1/g;

	print $res;

