# Converts a minidei+[] program into a minidei program.
# Written by Elliott Hird, 2008.
# Released into the public domain.
$/ = undef;
$_ = <>;
my $q = qr/\[(?:(??{$q})|[^\[\]]+)*\]/;
my $w = qr/([^ \[\]]+)/;
my $e = qr/$w|($q)/;
{
s/\s+/ /g;
s/^\s+|\s+$|\[\s+|\s+\]//g;
print $_, "\n";
# s/\[$w((?: $w)+)\]/[$1] [$2] compose/ and redo;
s/\[$w((?: $w)+)\]/[$1] [$2 compose/ and redo;
s/\[\[($e+)\]\]/[$1] wrap/ and redo;
s/\[wrap\]/dup wrap dei swap drop/ and redo;
s/\[drop\]/dup drop dei/ and redo;
s/\[dup\]/dup dei swap drop/ and redo;
s/\[swap\]/dup swap dei swap drop/ and redo;
s/\[i\]/wrap i dei/ and redo;
s/\[compose\]/dup dup compose dei swap drop/ and redo;
}