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